Cursor 类

定义

代表用于绘制鼠标指针的图像。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
继承
Cursor
属性
实现

示例

下面的代码示例显示了一个窗体,该窗体演示如何使用自定义光标。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.cur的游标文件中包含的游标。The 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.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

      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
   End Class
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. 在此示例中,1000客户显示每个订单15个订单。In this example, 1,000 customers are displayed with 15 orders each. TreeView TreeView Cursor TreeNode使用和方法EndUpdate可取消重画,并在创建和绘制对象时显示等待。 BeginUpdateThe 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 Form创建了控件的一个实例。It 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


Public Class Order
   Inherits [Object]
   Private ordID As String

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

   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

' 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

注解

光标是一个小图片,其在屏幕上的位置由指针设备(如鼠标、笔或轨迹球)控制。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. 用户可能会等待的进程的示例是打开文件、保存文件或填充控件( DataGrid例如), ListBox或者TreeView使用大量数据。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. 若要更改鼠标指针在控件边界内时显示的光标,请将指定Cursor Cursor给控件的属性。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. 或者,可以通过将分配Cursor Current给属性,在应用程序级别显示光标。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 开始,当 app.config Cursor文件包含以下项时,将根据系统 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)

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

Cursor(Stream)

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

Cursor(String)

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

Cursor(Type, String)

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

属性

Clip

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

Current

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

Handle

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

HotSpot

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

Position

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

Size

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

Tag

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

方法

CopyHandle()

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

Dispose()

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

Draw(Graphics, Rectangle)

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

DrawStretched(Graphics, Rectangle)

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

Equals(Object)

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

Finalize()

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

GetHashCode()

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

GetType()

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

(继承自 Object)
Hide()

隐藏光标。Hides the cursor.

MemberwiseClone()

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

(继承自 Object)
Show()

显示光标。Displays the cursor.

ToString()

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

操作员

Equality(Cursor, Cursor)

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

Inequality(Cursor, Cursor)

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

显式界面实现

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

序列化对象。Serializes the object.

适用于

另请参阅