C# Windows窗体复制光标引用

C# Windows窗体复制光标引用,c#,winforms,C#,Winforms,我有一个控件,它的Cursor属性类型为System.Windows.Forms.Cursor。下面是我尝试做的一个例子: if (someCondition) { oldCursor = myControl.Cursor; myControl.Cursor = Cursors.Hand; } else { myControl.Cursor = oldCursor; } 我已经使用断点进入了代码,我可以看到逻辑是正确的。但是,当控件的Cursor属性设置回oldCurs

我有一个控件,它的
Cursor
属性类型为
System.Windows.Forms.Cursor
。下面是我尝试做的一个例子:

if (someCondition)
{
    oldCursor = myControl.Cursor;
    myControl.Cursor = Cursors.Hand;
}
else
{
    myControl.Cursor = oldCursor;
}
我已经使用断点进入了代码,我可以看到逻辑是正确的。但是,当控件的
Cursor
属性设置回
oldCursor
时,光标的视觉外观保持不变(例如
Cursors.Hand

我注意到
Cursor
类中的
CopyHandle()
方法,我想知道我是否需要在复制操作中使用它


任何人都可以了解如何复制
光标
引用吗?

您试图捕获的
光标
是内存中的Win32资源。您需要它的
句柄
,因为您怀疑:

private IntPtr _prevCursor;

public MyClass()
{
    myControl.Cursor = Cursor.Default;
    _prevCursor = myControl.Cursor.Handle;
}

public SomeMethod()
{
    if (someCondition)
    {
        _prevCursor = myControl.Cursor.Handle;
        myControl.Cursor = Cursors.Hand;
    }
    else
    {
        myControl.Cursor = new Cursor(_prevCursor);
    }
}

您可能需要在更改光标后调用,使其使用对纯
光标的引用来显示更改

。我一定是做错了什么。我切换回了我原来的方法(进行了一点重构),现在一切都很顺利


感谢大家的帮助。

从提供的信息来看,没有任何不可行的理由,Winforms确保当鼠标当前位于该控件上时,屏幕上的光标得到更新。你解释得不够清楚,还发生了什么?检查myControl.IsHandleCreated与调试器。
DoEvents()
是邪恶的。而且不会有帮助,顺便说一句。看看你是否不相信我。我已经实现了这一点,但它只在一些时候起作用。我不明白为什么。。。我还尝试了使用CopyHandle()方法,而不仅仅是使用Handle,这样就可以了。光标是正确的图像,但缩放太小。也许问题是我的初始游标是自定义游标?好吧,我不确定以前我只是保存对游标对象本身的引用时出现了什么问题,但我再次尝试,它成功了。。。也许我对控件的引用不正确。。。