2011-07-24 5 views
2

私はこの問題を抱えていました。ユーザーが何らかのキーを押したときにカーソルを変更する必要のあるカスタムコントロール(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); 
} 
私は(たとえば hereのために、他の場所)の周りGoogleで検索し、私のコードは、右のようだ

...

答えて

1

これを実行すると、

oldCursor = Cursor; 

Cursorフィールドへの参照を渡すだけです。その後、このフィールドを変更します。

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

これは、参照タイプオブジェクトとしてoldCursorフィールドも変更します。 oldCursorの保存方法を変更する必要があります。

+0

はい@VMAtm、あなたは正しいです(私はすでにこれについて考えています)、あなたの答えに感謝!!問題は、カーソルの保存と復元に関する経験がないことです。 – Marco

+0

@Marco問題はありません。良い質問品質と幸運をありがとう:) – VMAtm

+0

@マルコあなたはまだそれに問題がありますか? – VMAtm

関連する問題