курсор не меняется при выходе из пользовательского элемента управления - PullRequest
2 голосов
/ 24 июля 2011

У меня была такая проблема: я создал пользовательский элемент управления (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);
}

Я погуглил (например, здесь и в других местах), и мой код кажется правильным ...

1 Ответ

1 голос
/ 24 июля 2011

Когда вы выполняете это:

oldCursor = Cursor;

, вы просто передаете ссылку в поле Cursor.После этого вы изменяете это поле:

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

Это также меняет поле oldCursor как объект ссылочного типа.Таким образом, вы должны изменить способ сохранения oldCursor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...