无法在设计时更改WinForms控件中的光标

无法在设计时更改WinForms控件中的光标,winforms,cursor,controls,windows-forms-designer,design-time,Winforms,Cursor,Controls,Windows Forms Designer,Design Time,我们有一个WinForms控件(继承Systems.Windows.Forms.control),它附带了一个自定义设计器(继承ControlDesigner)。我们需要在设计时处理一些鼠标事件,比如在控件内的特殊区域中单击鼠标。为了表明该区域中可以使用鼠标单击,我们需要将默认的4箭头光标更改为其他内容-至少更改为标准箭头,但我们找不到这样做的方法 我们重新定义了ControlDesigner.GetHitTest方法,为特殊的点击矩形返回true,但光标在该区域上时会闪烁。它被更改为默认箭头几

我们有一个WinForms控件(继承Systems.Windows.Forms.control),它附带了一个自定义设计器(继承ControlDesigner)。我们需要在设计时处理一些鼠标事件,比如在控件内的特殊区域中单击鼠标。为了表明该区域中可以使用鼠标单击,我们需要将默认的4箭头光标更改为其他内容-至少更改为标准箭头,但我们找不到这样做的方法

我们重新定义了
ControlDesigner.GetHitTest
方法,为特殊的点击矩形返回true,但光标在该区域上时会闪烁。它被更改为默认箭头几毫秒,然后返回到4箭头光标,这意味着可以在窗体上选择和移动整个控件。重写
ControlDesigner.OnSetCursor
没有任何效果,因为似乎只有当光标更改为默认的4箭头光标时才会调用此虚拟方法。带有WndProc的游戏(试图拦截WM_鼠标*事件)也没有给我们带来任何积极的结果

即使我们尝试实现相关书籍中的示例(如Eric White的“使用C#创建自定义控件的GDI+编程”中的SimpleLineControl),我们也有相同的行为


我们的开发环境是VS2010/.NET4.0,这是最低要求。如何使其在本环境和以后的环境中工作?

使用MouseMove事件。指定Cursor属性。@HansPassant,如果您指的是控件本身的MouseMove事件,那么是的,我们在其中这样做(我们将Cursor.Current设置为)。事实上,我们试图在设计时使用现有的运行时功能。问题是光标不断地变回四向箭头。你有怎样做的样品吗?也许,我在开发中忽略了一些东西……我反编译了ControlDesigner类,以查看何时何地引发
ControlDesigner.OnSetCursor
。只需在其
WndProc
中执行一次。然而,ControlDesigner的WndProc足够复杂,并且在完成此调用时很难实现所有情况。我检测到的另一件事是,如果定义了
IMouseHandler
的所谓
mouseHandler
,则存在一个等价的
OnSetCursor
调用。也许,我们需要走这条路?但是我找不到这种技术的好例子,如果有人能帮我的话,那就太好了。