Cursor Cursor Cursor Cursor Class

定义

代表用于绘制鼠标指针的图像。Represents the image used to paint the mouse pointer.

public ref class Cursor sealed : IDisposable, System::Runtime::Serialization::ISerializable
[System.ComponentModel.TypeConverter(typeof(System.Windows.Forms.CursorConverter))]
[System.Serializable]
public sealed class Cursor : IDisposable, System.Runtime.Serialization.ISerializable
type Cursor = class
    interface IDisposable
    interface ISerializable
Public NotInheritable Class Cursor
Implements IDisposable, ISerializable
继承
CursorCursorCursorCursor
属性
实现

示例

下面的代码示例显示窗体演示了如何使用自定义光标。The following code example displays a form that demonstrates using a custom cursor. 自定义Cursor嵌入在应用程序的资源文件中。The custom Cursor is embedded in the application's resource file. 该示例需要名为的光标文件中包含的游标MyCursor.curThe example requires a cursor contained in a cursor file named MyCursor.cur. 若要编译此示例中使用命令行,包括以下标记: /res:MyCursor.Cur, CustomCursor.MyCursor.CurTo compile this example using the command line, include the following flag: /res:MyCursor.Cur, CustomCursor.MyCursor.Cur

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 a bitmap
            //        1. Add a new cursor file to your project: 
            //                Project->Add New Item->General->Cursor File

            // --- 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 Resources"

            // 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");  
           
        }
    }
}
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"
         
        ' The following generates a cursor from an embedded resource.
         
        'To add a custom cursor, create a bitmap
        '       1. Add a new cursor file to your project: 
        '               Project->Add New Item->General->Cursor File

        '--- 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 Resources"

        '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.
        Me.Cursor = New Cursor(Me.GetType(), "MyCursor.cur")
      End Sub 'New       
   End Class 'Form1
End Namespace 'CustomCursor

下面的代码示例显示的客户信息TreeView控件。The following code example displays customer information in a TreeView control. 根树节点显示客户名称和子树节点显示分配给每个客户的订单号。The root tree nodes display customer names, and the child tree nodes display the order numbers assigned to each customer. 在此示例中,有 15 个订单显示 1,000 名客户。In this example, 1,000 customers are displayed with 15 orders each. 重新绘制的TreeView通过使用抑制BeginUpdateEndUpdate方法和等待Cursor显示时TreeView创建和绘制TreeNode对象。The repainting of the TreeView is suppressed by using the BeginUpdate and EndUpdate methods, and a wait Cursor is displayed while the TreeView creates and paints the TreeNode objects. 此示例要求有一个名为的光标文件MyWait.cur应用程序目录中。This example requires that you have a cursor file named MyWait.cur in the application directory. 它还需要Customer对象,可以保留一系列Order对象和创建的实例TreeView上控制FormIt also requires a Customer object that can hold a collection of Order objects, and that you have created an instance of a TreeView control on a Form.

// The basic Customer class.
ref class Customer: public System::Object
{
private:
   String^ custName;

protected:
   ArrayList^ custOrders;

public:
   Customer( String^ customername )
   {
      custName = "";
      custOrders = gcnew ArrayList;
      this->custName = customername;
   }


   property String^ CustomerName 
   {
      String^ get()
      {
         return this->custName;
      }

      void set( String^ value )
      {
         this->custName = value;
      }

   }

   property ArrayList^ CustomerOrders 
   {
      ArrayList^ get()
      {
         return this->custOrders;
      }

   }

};


// End Customer class
// The basic customer Order class.
ref class Order: public System::Object
{
private:
   String^ ordID;

public:
   Order( String^ orderid )
   {
      ordID = "";
      this->ordID = orderid;
   }


   property String^ OrderID 
   {
      String^ get()
      {
         return this->ordID;
      }

      void set( String^ value )
      {
         this->ordID = value;
      }

   }

};
// End Order class



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.
   myEnum = customerArray->GetEnumerator();
   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();
}

// The basic Customer class.
public class Customer : System.Object
{
   private string custName = "";
   protected ArrayList custOrders = new ArrayList();

   public Customer(string customername)
   {
      this.custName = customername;
   }

   public string CustomerName
   {      
      get{return this.custName;}
      set{this.custName = value;}
   }

   public ArrayList CustomerOrders 
   {
      get{return this.custOrders;}
   }

} // End Customer class 


// The basic customer Order class.
public class Order : System.Object
{
   private string ordID = "";

   public Order(string orderid)
   {
      this.ordID = orderid;
   }

   public string OrderID
   {      
      get{return this.ordID;}
      set{this.ordID = value;}
   }

} // End Order class

// 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();
}
Public Class Customer
   Inherits [Object]
   Private custName As String = ""
   Friend custOrders As New ArrayList()

   Public Sub New(ByVal customername As String)
      Me.custName = customername
   End Sub

   Public Property CustomerName() As String
      Get
         Return Me.custName
      End Get
      Set(ByVal Value As String)
         Me.custName = Value
      End Set
   End Property

   Public ReadOnly Property CustomerOrders() As ArrayList
      Get
         Return Me.custOrders
      End Get
   End Property
End Class 'End Customer class


Public Class Order
   Inherits [Object]
   Private ordID As String

   Public Sub New(ByVal orderid As String)
      Me.ordID = orderid
   End Sub 'New

   Public Property OrderID() As String
      Get
         Return Me.ordID
      End Get
      Set(ByVal Value As String)
         Me.ordID = Value
      End Set
   End Property
End Class ' End Order class

' 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

注解

游标是在屏幕上的位置受指针设备,如鼠标、 笔或轨迹球的小图片。A cursor is a small picture whose location on the screen is controlled by a pointing device, such as a mouse, pen, or trackball. 当用户移动的指针设备时,操作系统将相应地移动光标。When the user moves the pointing device, the operating system moves the cursor accordingly.

不同的光标形状用于通知用户鼠标将具有哪些操作。Different cursor shapes are used to inform the user what operation the mouse will have. 例如,当编辑或选择文本,Cursors.IBeam通常显示的光标。For example, when editing or selecting text, a Cursors.IBeam cursor is typically displayed. 等待光标通常用来通知当前运行进程的用户。A wait cursor is commonly used to inform the user that a process is currently running. 可能必须等待用户进程的示例打开一个文件,保存文件,或如填充控件DataGridListBoxTreeView与大量的数据。Examples of processes you might have the user wait for are opening a file, saving a file, or filling a control such as a DataGrid, ListBox or TreeView with a large amount of data.

派生的所有控件Control类具有Cursor属性。All controls that derive from the Control class have a Cursor property. 若要更改控件的边界内时,鼠标指针显示的光标,将分配CursorCursor控件的属性。To change the cursor displayed by the mouse pointer when it is within the bounds of the control, assign a Cursor to the Cursor property of the control. 或者,通过将分配,在应用程序级别显示光标CursorCurrent属性。Alternatively, you can display cursors at the application level by assigning a Cursor to the Current property. 例如,如果你的应用程序的目的是用于编辑文本文件,您可能会设置Current属性设置为Cursors.WaitCursor若要在应用程序上显示等待光标,而该文件加载或保存以防止任何鼠标事件处理。For example, if the purpose of your application is to edit a text file, you might set the Current property to Cursors.WaitCursor to display a wait cursor over the application while the file loads or saves to prevent any mouse events from being processed. 该过程完成后,设置Current属性设置为Cursors.Default应用程序在每个控件类型之上显示相应的光标。When the process is complete, set the Current property to Cursors.Default for the application to display the appropriate cursor over each control type.

备注

如果您调用Application.DoEvents之前重置Current属性改回Cursors.Default光标,该应用程序将继续侦听鼠标事件,并且会继续显示相应Cursor为应用程序中的每个控件。If you call Application.DoEvents before resetting the Current property back to the Cursors.Default cursor, the application will resume listening for mouse events and will resume displaying the appropriate Cursor for each control in the application.

游标对象可以创建从多个源,例如对现有的句柄Cursor,一种标准Cursor文件、 资源或数据的流。Cursor objects can be created from several sources, such as the handle of an existing Cursor, a standard Cursor file, a resource, or a data stream.

备注

Cursor类不支持动态的游标 (.ani 文件) 或游标使用黑色和白色之外的颜色。The Cursor class does not support animated cursors (.ani files) or cursors with colors other than black and white.

如果使用游标作为图像是太小,则可以使用DrawStretched方法,以强制图像以填充游标的界限。If the image you are using as a cursor is too small, you can use the DrawStretched method to force the image to fill the bounds of the cursor. 通过调用可以暂时隐藏光标Hide方法,并将其还原通过调用Show方法。You can temporarily hide the cursor by calling the Hide method, and restore it by calling the Show method.

从.NET Framework 4.5.2,开始Cursor将基于 app.config 文件包含以下条目时系统 DPI 设置调整大小:Starting with the .NET Framework 4.5.2, the Cursor will be resized based on the system DPI setting when the app.config file contains the following entry:

<appSettings>  
  <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />  
</appSettings>  

构造函数

Cursor(IntPtr) Cursor(IntPtr) Cursor(IntPtr) Cursor(IntPtr)

从指定的 Windows 句柄初始化 Cursor 类的新实例。Initializes a new instance of the Cursor class from the specified Windows handle.

Cursor(Stream) Cursor(Stream) Cursor(Stream) Cursor(Stream)

从指定的数据流初始化 Cursor 类的新实例。Initializes a new instance of the Cursor class from the specified data stream.

Cursor(String) Cursor(String) Cursor(String) Cursor(String)

从指定的文件初始化 Cursor 类的新实例。Initializes a new instance of the Cursor class from the specified file.

Cursor(Type, String) Cursor(Type, String) Cursor(Type, String) Cursor(Type, String)

从具有指定资源类型的指定资源初始化 Cursor 类的新实例。Initializes a new instance of the Cursor class from the specified resource with the specified resource type.

属性

Clip Clip Clip Clip

获取或设置表示光标的剪辑矩形的边界。Gets or sets the bounds that represent the clipping rectangle for the cursor.

Current Current Current Current

获取或设置代表鼠标光标的光标对象。Gets or sets a cursor object that represents the mouse cursor.

Handle Handle Handle Handle

获取光标句柄。Gets the handle of the cursor.

HotSpot HotSpot HotSpot HotSpot

获取光标作用点。Gets the cursor hot spot.

Position Position Position Position

获取或设置光标位置。Gets or sets the cursor's position.

Size Size Size Size

获取光标对象的大小。Gets the size of the cursor object.

Tag Tag Tag Tag

获取或设置包含有关 Cursor 的数据的对象。Gets or sets the object that contains data about the Cursor.

方法

CopyHandle() CopyHandle() CopyHandle() CopyHandle()

复制该 Cursor 的句柄。Copies the handle of this Cursor.

Dispose() Dispose() Dispose() Dispose()

释放由 Cursor 使用的所有资源。Releases all resources used by the Cursor.

Draw(Graphics, Rectangle) Draw(Graphics, Rectangle) Draw(Graphics, Rectangle) Draw(Graphics, Rectangle)

在指定边界内、指定的表面上绘制光标。Draws the cursor on the specified surface, within the specified bounds.

DrawStretched(Graphics, Rectangle) DrawStretched(Graphics, Rectangle) DrawStretched(Graphics, Rectangle) DrawStretched(Graphics, Rectangle)

在指定边界内、指定的表面上以拉伸格式绘制光标。Draws the cursor in a stretched format on the specified surface, within the specified bounds.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

返回一个值,该值指示此光标是否等于指定的 CursorReturns a value indicating whether this cursor is equal to the specified Cursor.

Finalize() Finalize() Finalize() Finalize()

在垃圾回收将某一对象回收前允许该对象尝试释放资源并执行其他清理操作。Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

检索当前 Cursor 的哈希代码。Retrieves the hash code for the current Cursor.

GetType() GetType() GetType() GetType()

获取当前实例的 TypeGets the Type of the current instance.

(Inherited from Object)
Hide() Hide() Hide() Hide()

隐藏光标。Hides the cursor.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

创建当前 Object 的浅表副本。Creates a shallow copy of the current Object.

(Inherited from Object)
Show() Show() Show() Show()

显示光标。Displays the cursor.

ToString() ToString() ToString() ToString()

检索表示此 Cursor 的可读字符串。Retrieves a human readable string representing this Cursor.

操作员

Equality(Cursor, Cursor) Equality(Cursor, Cursor) Equality(Cursor, Cursor) Equality(Cursor, Cursor)

返回一个值,该值指示 Cursor 类的两个实例是否相等。Returns a value indicating whether two instances of the Cursor class are equal.

Inequality(Cursor, Cursor) Inequality(Cursor, Cursor) Inequality(Cursor, Cursor) Inequality(Cursor, Cursor)

返回一个值,该值指示 Cursor 类的两个实例是否不相等。Returns a value indicating whether two instances of the Cursor class are not equal.

显式界面实现

ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext) ISerializable.GetObjectData(SerializationInfo, StreamingContext)

序列化对象。Serializes the object.

适用于

另请参阅