光标在自定义控件退出时不会更改

时间:2011-07-24 13:53:46

标签: c# windows winforms .net-4.0 cursor

我遇到了这个问题:我创建了一个自定义控件(C#,WinForms,Framework 4.0),当用户按下某个键时,我需要更改光标(这有效);退出控件我想恢复到上一个​​光标..但是这不起作用:退出光标仍然是当前光标。怎么了?

protected override void OnMouseEnter(EventArgs e)
{
    oldCursor = Cursor;
    base.OnMouseEnter(e);
}

protected override void OnMouseLeave(EventArgs e)
{
    Cursor = oldCursor;
    base.OnMouseLeave(e);
}

按下按钮时,我执行:

this.Cursor = NewCursor.CreateCursor(
    Properties.Resources.cur_ZoomIn, 14, 9, Color.White);

,其中

public static Cursor CreateCursor(
    Bitmap bmp_parm, int xHotSpot, int yHotSpot, Color? transparent)
{
    Image img = bmp_parm;
    Bitmap bmp = new Bitmap(img, new Size(img.Width, img.Height));
    if (transparent.HasValue) bmp.MakeTransparent(transparent.Value);

    if (cursor != IntPtr.Zero)
        DestroyIcon(cursor);

    IntPtr ptr = bmp.GetHicon();
    IconInfo tmp = new IconInfo();
    GetIconInfo(ptr, ref tmp);
    tmp.xHotspot = xHotSpot;
    tmp.yHotspot = yHotSpot;
    tmp.fIcon = false;
    cursor = CreateIconIndirect(ref tmp);

    if (tmp.hbmColor != IntPtr.Zero) DeleteObject(tmp.hbmColor);
    if (tmp.hbmMask != IntPtr.Zero) DeleteObject(tmp.hbmMask);
    if (ptr != IntPtr.Zero) DestroyIcon(ptr);

    return new Cursor(cursor);
}

我用Google搜索(例如here和其他地方),我的代码似乎正确......

1 个答案:

答案 0 :(得分:1)

执行此操作时:

oldCursor = Cursor;

您只需将引用传递给Cursor字段即可。之后你改变了这个字段:

this.Cursor = NewCursor.CreateCursor(
    Properties.Resources.cur_ZoomIn, 14, 9, Color.White);

这也将oldCursor字段更改为引用类型对象。 因此,您应该更改保存oldCursor的方式。