C# 控件。游标和窗体。游标。。。

C# 控件。游标和窗体。游标。。。,c#,winforms,cursor,C#,Winforms,Cursor,好的,据我所知(这里我可能错了),Windows窗体和所有子控件都有游标属性。这个游标竟然默认为Cursors.Default,即箭头指针。到目前为止,一切顺利 现在,如果我想在控件未覆盖的窗体区域上使用不同的光标,我可以检查窗体鼠标移动事件并更改其中的光标。所以现在我期望的是,当光标移动到表单上时,光标将更改为我在form.MouseMove\u处理程序中设置的任何值,但当光标移动到表单的子控件上时,它将更改为子控件的control.cursor 然而,这不是我所看到的。我看到光标在窗体上移动

好的,据我所知(这里我可能错了),Windows窗体和所有子控件都有游标属性。这个游标竟然默认为Cursors.Default,即箭头指针。到目前为止,一切顺利

现在,如果我想在控件未覆盖的窗体区域上使用不同的光标,我可以检查窗体鼠标移动事件并更改其中的光标。所以现在我期望的是,当光标移动到表单上时,光标将更改为我在form.MouseMove\u处理程序中设置的任何值,但当光标移动到表单的子控件上时,它将更改为子控件的control.cursor

然而,这不是我所看到的。我看到光标在窗体上移动时发生了变化,但当光标在子控件上移动时,它仍保持在父窗体上移动时的状态。Cursor属性似乎一点也不受尊重


我是否必须为表单上的所有控件处理MouseMove、MouseEnter和MouseLeave事件才能使其正常工作?

来自MSDN

将光标指定给控件的Cursor属性,以更改鼠标指针位于控件上方时显示的光标。要临时更改应用程序上所有控件的鼠标光标,请设置cursor.Current属性。通常,在填充组合框或保存或加载文件时,您会将Cursor.Current属性设置为等待光标

光标属性是环境属性环境属性是一个控件属性,如果未设置,将从父控件中检索。例如,默认情况下,按钮的底色将与其父窗体相同。有关环境属性的更多信息,请参见AmbientProperties类或控件类概述

继承人须知


在派生类中重写游标属性时,使用基类的游标属性扩展基类实现。否则,必须提供所有实现。不需要重写游标属性的get和set方法;如果需要,您只能重写其中一个。当鼠标位于控件上时,窗体的
MouseMove\u处理程序也在运行,从而将光标从控件认为应该的位置更改回原来的位置。我认为您不需要处理鼠标移动。为什么不将Form.Cursor设置为所需的光标,将controls Cursor设置为Cursor.Default?Steve,我有一个无边框的表单,我正在执行拖动/大小操作,因此我将表单边框上的光标更改为大小,并将表单上其他位置的光标更改为移动/拖动。克劳斯告诉我一些我没有意识到的事情:当鼠标在控件上时,窗体的MouseMove被调用?这对我来说似乎有点愚蠢:)我明白了,但我仍然认为,如果在每个控件上显式地将光标设置为移动/拖动,则会覆盖窗体上的实际设置。不确定,但我会试试。谢谢,我不知道“环境”属性。我要试一试。话虽如此,考虑到父窗体MouseMove事件似乎仍然被调用,即使鼠标位于子控件上,这仍然毫无意义。我想我得检查一下。。。