Classe Cursor (System.Windows.Forms)

Cambia visualizzazione:
ScriptFree
Riferimento a .NET Framework
Classe Cursor

Rappresenta l'immagine utilizzata per disegnare il puntatore del mouse.

Spazio dei nomi: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)

Sintassi

Visual Basic - (Dichiarazione)
<SerializableAttribute> _
Public NotInheritable Class Cursor
	Implements IDisposable, ISerializable
Visual Basic (Utilizzo)
Dim instance As Cursor

C#
[SerializableAttribute] 
public sealed class Cursor : IDisposable, ISerializable
C++
[SerializableAttribute] 
public ref class Cursor sealed : IDisposable, ISerializable
J#
/** @attribute SerializableAttribute() */ 
public final class Cursor implements IDisposable, ISerializable
JScript
SerializableAttribute 
public final class Cursor implements IDisposable, ISerializable
Note

Un cursore è un'immagine di piccole dimensioni la cui posizione sullo schermo è controllata da un dispositivo di puntamento, ad esempio un mouse, una penna ottica o una trackball. Quando l'utente muove il dispositivo di puntamento, il sistema operativo sposta contestualmente il cursore.

Per informare l'utente delle operazioni che di volta in volta possono essere eseguite con il mouse, vengono utilizzati cursori di forme diverse. Quando, ad esempio, si modifica o si seleziona del testo, viene in genere visualizzato un cursore Cursors.IBeam. Un cursore di attesa viene utilizzato in genere per informare l'utente che un processo è in corso. Tra i processi che richiedono un'attesa da parte dell'utente sono compresi l'apertura o il salvataggio di file o il riempimento di un controllo quale DataGrid, ListBox o TreeView con una grande quantità di dati.

Tutti i controlli che derivano dalla classe Control includono una proprietà Cursor. Per modificare il cursore visualizzato dal puntatore del mouse quando si trova all'interno dei limiti del controllo, assegnare una classe Cursor alla proprietà Cursor del controllo. In alternativa, è possibile visualizzare i cursori a livello dell'applicazione assegnando una classe Cursor alla proprietà Current. Se, ad esempio, lo scopo dell'applicazione è quello di modificare un file di testo, è possibile impostare la proprietà Current su Cursors.WaitCursor per visualizzare un cursore di attesa nell'applicazione mentre il file viene caricato o salvato, in modo da impedire che venga elaborato qualche altro evento del mouse. Una volta completato il processo, impostare la proprietà Current su Cursors.Default affinché nell'applicazione venga visualizzato il cursore appropriato su ciascun tipo di controllo.

NotaNota

Se si chiama il metodo Application.DoEvents prima di reimpostare la proprietà Current sul cursore Cursors.Default, l'applicazione riprenderà ad attendere un evento del mouse e a visualizzare l'oggetto Cursor appropriato per ciascun controllo nell'applicazione.

È possibile creare oggetti cursore da diverse origini, ad esempio l'handle di un oggetto Cursor esistente, un file Cursor standard, una risorsa o un flusso di dati.

NotaNota

La classe Cursor non supporta i cursori animati (file ANI) o cursori con colori diversi dal bianco e nero.

Se l'immagine utilizzata come cursore è troppo piccola, è possibile utilizzare il metodo DrawStretched per estenderla fino ai limiti del cursore. È possibile nascondere temporaneamente il cursore chiamando il metodo Hide, oppure ripristinarlo chiamando il metodo Show.

Esempio

Nell'esempio riportato di seguito viene visualizzato un form che illustrato l'utilizzo di un cursore personalizzato. L'oggetto Cursor personalizzato è incorporato nel file di risorse dell'applicazione. Nell'esempio, è prevista la presenza di un cursore contenuto in un file di cursore denominato MyCursor.cur. Per compilare l'esempio dalla riga di comando, includere il seguente flag: /res:MyCursor.Cur, CustomCursor.MyCursor.Cur.

Visual Basic
Imports System
Imports System.Drawing
Imports System.Windows.Forms

Namespace CustomCursor
   
   Public Class Form1
      Inherits System.Windows.Forms.Form
      
      <System.STAThread()> _
      Public Shared Sub Main()
         System.Windows.Forms.Application.Run(New Form1())
      End Sub 'Main

      Public Sub New()

         Me.ClientSize = New System.Drawing.Size(292, 266)
         Me.Text = "Cursor Example"
         
         ' Looks namespace.MyCursor.cur in the assemblies manifest.
         
         ' The following generates a cursor from an embedded resource.
         ' To add a custom cursor, create or use an existing 16x16 bitmap
         '        1. Add a new cursor file to your project: 
         '                File->Add New Item->Local Project Items->Cursor File
         '        2. Select 16x16 image type:
         '                Image->Current Icon Image Types->16x16
         ' --- To make the custom cursor an embedded resource  ---
         ' In Visual Studio:
         '        1. Select the cursor file in the Solution Explorer
         '        2. Choose View->Properties.
         '        3. In the properties window switch "Build Action" to "Embedded"
         ' On the command line:
         '        Add the following flag:
         '            /res:CursorFileName.Cur,Namespace.CursorFileName.Cur
         '
         ' The following line uses the namespace from the passed-in type
         ' and looks for CustomCursor.MyCursor.Cur in the assemblies manifest.
	 ' NOTE: The cursor name is acase sensitive.        
     
         Me.Cursor = New Cursor(Me.GetType(), "MyCursor.Cur") 
      End Sub 'New       
   End Class 'Form1
End Namespace 'CustomCursor

C#
using System;
using System.Drawing;
using System.Windows.Forms;

namespace CustomCursor
{
    public class Form1 : System.Windows.Forms.Form
    {
        [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }

        public Form1()
        {
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Text = "Cursor Example";
            
            // The following generates a cursor from an embedded resource.
            
            // To add a custom cursor, create or use an existing 16x16 bitmap
            //        1. Add a new cursor file to your project: 
            //                File->Add New Item->Local Project Items->Cursor File
            //        2. Select 16x16 image type:
            //                Image->Current Icon Image Types->16x16

            // --- To make the custom cursor an embedded resource  ---
            
            // In Visual Studio:
            //        1. Select the cursor file in the Solution Explorer
            //        2. Choose View->Properties.
            //        3. In the properties window switch "Build Action" to "Embedded"

            // On the command line:
            //        Add the following flag:
            //            /res:CursorFileName.Cur,Namespace.CursorFileName.Cur
            //        
            //        Where "Namespace" is the namespace in which you want to use the cursor
            //        and   "CursorFileName.Cur" is the cursor filename.

            // The following line uses the namespace from the passed-in type
            // and looks for CustomCursor.MyCursor.Cur in the assemblies manifest.
	    // NOTE: The cursor name is acase sensitive.
            this.Cursor = new Cursor(GetType(), "MyCursor.Cur");  
           
        }
    }
}

C++
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;

namespace CustomCursor
{
   public ref class Form1: public System::Windows::Forms::Form
   {
   public:
      Form1()
      {
         this->ClientSize = System::Drawing::Size( 292, 266 );
         this->Text = "Cursor Example";
         
         // The following generates a cursor from an embedded resource.
         // To add a custom cursor, create or use an existing 16x16 bitmap
         //        1. Add a new cursor file to your project:
         //                File->Add New Item->Local Project Items->Cursor File
         //        2. Select 16x16 image type:
         //                Image->Current Icon Image Types->16x16
         // --- To make the custom cursor an embedded resource  ---
         // In Visual Studio:
         //        1. Select the cursor file in the Solution Explorer
         //        2. Choose View->Properties.
         //        3. In the properties window switch "Build Action" to "Embedded"
         // On the command line:
         //        Add the following flag:
         //            /res:CursorFileName.Cur, Namespace.CursorFileName.Cur
         //
         //        Where "Namespace" is the namespace in which you want to use the cursor
         //        and   "CursorFileName.Cur" is the cursor filename.
         // The following line uses the namespace from the passed-in type
         // and looks for CustomCursor.MyCursor.Cur in the assemblies manifest.
         // NOTE: The cursor name is case sensitive.
         this->Cursor = gcnew System::Windows::Forms::Cursor( GetType(),"MyCursor.Cur" );
      }

   };

}


[STAThread]
int main()
{
   Application::Run( gcnew CustomCursor::Form1 );
}


J#
package CustomCursor;

import System.*;
import System.Drawing.*;
import System.Windows.Forms.*;

public class Form1 extends System.Windows.Forms.Form
{
    /** @attribute STAThread()
     */
    public static void main(String[] args)
    {
        Application.Run(new Form1());
    } //main

    public Form1()
    {
        this.set_ClientSize(new System.Drawing.Size(292, 266));
        this.set_Text("Cursor Example");
        // The following generates a cursor from an embedded resource.
        // To add a custom cursor, create or use an existing 16x16 bitmap
        //        1. Add a new cursor file to your project: 
        //                File->Add New Item->Local Project Items->Cursor File
        //        2. Select 16x16 image type:
        //                Image->Current Icon Image Types->16x16
        // --- To make the custom cursor an embedded resource  ---
        // In Visual Studio:
        //        1. Select the cursor file in the Solution Explorer
        //        2. Choose View->Properties.
        //        3. In the properties window switch "Build Action" to "Embedded"
        // On the command line:
        //        Add the following flag:
        //            /res:CursorFileName.Cur,Namespace.CursorFileName.Cur
        //        
        //        Where "Namespace" is the namespace in which you want to use
        //        the cursor and   "CursorFileName.Cur" is the cursor filename.
        // The following line uses the namespace from the passed-in type
        // and looks for CustomCursor.MyCursor.Cur in the assemblies manifest.
        // NOTE: The cursor name is acase sensitive.
        this.set_Cursor(new Cursor(GetType(), "MyCursor.Cur"));
    } //Form1 
} //Form1

Nell'esempio di codice riportato di seguito vengono visualizzate informazioni relative ai clienti in un controllo TreeView. Nei nodi principali della struttura sono visualizzati i nomi dei clienti mentre nei nodi figli della struttura sono visualizzati i numeri di ordine assegnati a ciascun cliente. In questo esempio, vengono visualizzati 1.000 clienti con 15 ordini ciascuno. Per evitare di ridisegnare il controllo TreeView, utilizzare i metodi BeginUpdate e EndUpdate; viene visualizzato un oggetto Cursor di attesa mentre nel controllo TreeView vengono creati e disegnati gli oggetti TreeNode. Nell'esempio si suppone che nella directory dell'applicazione sia presente un file di cursore denominato MyWait.cur. Richiede, inoltre, un oggetto Customer che possa contenere un insieme di oggetti Order e che sia stata creata un'istanza di un controllo TreeView su un oggetto Form.

Visual Basic
' Create a new ArrayList to hold the Customer objects.
Private customerArray As New ArrayList()

Private Sub FillMyTreeView()
   ' Add customers to the ArrayList of Customer objects.
   Dim x As Integer
   For x = 0 To 999
      customerArray.Add(New Customer("Customer" + x.ToString()))
   Next x

   ' Add orders to each Customer object in the ArrayList.
   Dim customer1 As Customer
   For Each customer1 In customerArray
      Dim y As Integer
      For y = 0 To 14
         customer1.CustomerOrders.Add(New Order("Order" + y.ToString()))
      Next y
   Next customer1

   ' Display a wait cursor while the TreeNodes are being created.
   Cursor.Current = New Cursor("MyWait.cur")

   ' Suppress repainting the TreeView until all the objects have been created.
   treeView1.BeginUpdate()

   ' Clear the TreeView each time the method is called.
   treeView1.Nodes.Clear()

   ' Add a root TreeNode for each Customer object in the ArrayList.
   Dim customer2 As Customer
   For Each customer2 In customerArray
      treeView1.Nodes.Add(New TreeNode(customer2.CustomerName))

      ' Add a child TreeNode for each Order object in the current Customer object.
      Dim order1 As Order
      For Each order1 In customer2.CustomerOrders
         treeView1.Nodes(customerArray.IndexOf(customer2)).Nodes.Add( _
    New TreeNode(customer2.CustomerName + "." + order1.OrderID))
      Next order1
   Next customer2

   ' Reset the cursor to the default for all controls.
   Cursor.Current = System.Windows.Forms.Cursors.Default

   ' Begin repainting the TreeView.
   treeView1.EndUpdate()
End Sub 'FillMyTreeView

C#
// Create a new ArrayList to hold the Customer objects.
private ArrayList customerArray = new ArrayList(); 

private void FillMyTreeView()
{
   // Add customers to the ArrayList of Customer objects.
   for(int x=0; x<1000; x++)
   {
      customerArray.Add(new Customer("Customer" + x.ToString()));
   }

   // Add orders to each Customer object in the ArrayList.
   foreach(Customer customer1 in customerArray)
   {
      for(int y=0; y<15; y++)
      {
         customer1.CustomerOrders.Add(new Order("Order" + y.ToString()));    
      }
   }

   // Display a wait cursor while the TreeNodes are being created.
   Cursor.Current = new Cursor("MyWait.cur");
        
   // Suppress repainting the TreeView until all the objects have been created.
   treeView1.BeginUpdate();

   // Clear the TreeView each time the method is called.
   treeView1.Nodes.Clear();

   // Add a root TreeNode for each Customer object in the ArrayList.
   foreach(Customer customer2 in customerArray)
   {
      treeView1.Nodes.Add(new TreeNode(customer2.CustomerName));
          
      // Add a child treenode for each Order object in the current Customer object.
      foreach(Order order1 in customer2.CustomerOrders)
      {
         treeView1.Nodes[customerArray.IndexOf(customer2)].Nodes.Add(
           new TreeNode(customer2.CustomerName + "." + order1.OrderID));
      }
   }

   // Reset the cursor to the default for all controls.
   Cursor.Current = Cursors.Default;

   // Begin repainting the TreeView.
   treeView1.EndUpdate();
}

C++
void FillMyTreeView()
{
   // Add customers to the ArrayList of Customer objects.
   for ( int x = 0; x < 1000; x++ )
   {
      customerArray->Add( gcnew Customer( "Customer " + x ) );
   }
   
   // Add orders to each Customer object in the ArrayList.
   IEnumerator^ myEnum = customerArray->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Customer^ customer1 = safe_cast<Customer^>(myEnum->Current);
      for ( int y = 0; y < 15; y++ )
      {
         customer1->CustomerOrders->Add( gcnew Order( "Order " + y ) );
      }
   }

   // Display a wait cursor while the TreeNodes are being created.
   ::Cursor::Current = gcnew System::Windows::Forms::Cursor( "MyWait.cur" );
   
   // Suppress repainting the TreeView until all the objects have been created.
   treeView1->BeginUpdate();
   
   // Clear the TreeView each time the method is called.
   treeView1->Nodes->Clear();
   
   // Add a root TreeNode for each Customer object in the ArrayList.
   while ( myEnum->MoveNext() )
   {
      Customer^ customer2 = safe_cast<Customer^>(myEnum->Current);
      treeView1->Nodes->Add( gcnew TreeNode( customer2->CustomerName ) );
      
      // Add a child treenode for each Order object in the current Customer object.
      IEnumerator^ myEnum = customer2->CustomerOrders->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         Order^ order1 = safe_cast<Order^>(myEnum->Current);
         treeView1->Nodes[ customerArray->IndexOf( customer2 ) ]->Nodes->Add( gcnew TreeNode( customer2->CustomerName + "." + order1->OrderID ) );
      }
   }
   
   // Reset the cursor to the default for all controls.
   ::Cursor::Current = Cursors::Default;
   
   // Begin repainting the TreeView.
   treeView1->EndUpdate();
}

J#
// Create a new ArrayList to hold the Customer objects.
private ArrayList customerArray = new ArrayList();

private void FillMyTreeView()
{
    // Add customers to the ArrayList of Customer objects.
    for (int x = 0; x < 1000; x++) {
        customerArray.Add(new Customer("Customer"
            + ((Int32)x).ToString()));
    }
    // Add orders to each Customer object in the ArrayList.
    for (int iCtr = 0; iCtr < customerArray.get_Count(); iCtr++) {
        Customer customer1 = (Customer)customerArray.get_Item(iCtr);
        for (int y = 0; y < 15; y++) {
            customer1.get_CustomerOrders().Add(new Order("Order"
                + ((Int32)y).ToString()));
        }
    }
    // Display a wait cursor while the TreeNodes are being created.
    get_Cursor().set_Current(new Cursor("MyWait.cur"));
    // Suppress repainting the TreeView until all the objects have
    // been created.
    treeView1.BeginUpdate();
    // Clear the TreeView each time the method is called.
    treeView1.get_Nodes().Clear();
    // Add a root TreeNode for each Customer object in the ArrayList.
    for (int iCtr1 = 0; iCtr1 < customerArray.get_Count(); iCtr1++) {
        Customer customer2 = (Customer)customerArray.get_Item(iCtr1);
        treeView1.get_Nodes().Add(new TreeNode(customer2.get_CustomerName()));
        // Add a child treenode for each Order object in the current
        // Customer object.
        for (int iCtr2 = 0; iCtr2 < customer2.get_CustomerOrders().
            get_Count(); iCtr2++) {
            Order order1 = (Order)customer2.get_CustomerOrders().
                get_Item(iCtr2);
            treeView1.get_Nodes().
                get_Item(customerArray.IndexOf(customer2)).get_Nodes().
                Add(new TreeNode(customer2.get_CustomerName() + "."
                + order1.get_OrderID()));
        }
    }
    // Reset the cursor to the default for all controls.
    get_Cursor().set_Current(Cursors.get_Default());
    // Begin repainting the TreeView.
    treeView1.EndUpdate();
} //FillMyTreeView

Gerarchia di ereditarietà

System.Object
  System.Windows.Forms.Cursor
Codice thread safe

I membri statici pubblici (Shared in Visual Basic) di questo tipo sono validi per le operazioni multithreading. I membri di istanza non sono garantiti come thread safe.
Piattaforme

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile per Pocket PC, Windows Mobile per Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

Informazioni sulla versione

.NET Framework

Supportato in: 2.0 1.1 1.0

.NET Compact Framework

Supportato in: 2.0 1.0
Vedere anche