質問

WinformのUIを使用した私のプログラムで。スレッドプールでメソッドを起動するために、カーソルを砂時計に設定します。

カーソルを設定するためのUIスレッドの私のコードは次のようになります。

Application.UseWaitCursor = true;

メソッドが終了したら、UIスレッドに戻り、通常のケースにカーソルを設定します。

Application.UseWaitCursor = false;

私の問題は、マウスを動かさないまでカーソルが砂時計にとどまることです。ユーザーがマウスを動かさずにアクションの最後に待つ場合、少し邪魔です。

誰でも私を助けることができますか?

ジェローム

役に立ちましたか?

解決

私はこの行動を再現することができませんか?それは私にとってうまく機能します。

ただし、使用する場合は注意すべきことです Control.Cursor = Cursors.WaitCursor アプローチは、それが通常そうするということです:

this.Cursor = Cursors.WaitCursor

ただし、うまく機能するように見えますが、 this フォームを参照して、ユーザーがマウスを別のコントロールに移動した場合、たとえばテキストボックスなど、マウスは待機カーソルを表示しません。

これは、ユーザーに混乱を引き起こす可能性があります。または、アプリケーションが他の作業を行うのに忙しいときに、ユーザーが他の何かに取り組み続ける場合、いくつかの問題を引き起こす可能性があります。

他のヒント

実際、それを行うもう1つの方法がありますが、この問題を数時間研究した後、どこかで見つけました。

残念ながら、それはハックです。

以下は、問題を処理する方法です。

/// <summary>
    /// Call to toggle between the current cursor and the wait cursor
    /// </summary>
    /// <param name="control">The calling control.</param>
    /// <param name="toggleWaitCursorOn">True for wait cursor, false for default.</param>
    public static void UseWaitCursor(this Control control, bool toggleWaitCursorOn)
    {
        ...

        control.UseWaitCursor = toggleWaitCursorOn;

        // Because of a weird quirk in .NET, just setting UseWaitCursor to false does not work
        // until the cursor's position changes. The following line of code fakes that and 
        // effectively forces the cursor to switch back  from the wait cursor to default.
        if (!toggleWaitCursorOn)
            Cursor.Position = Cursor.Position;
    }

もう1つの方法:

Cursor.Current = Cursors.WaitCursor;

終了したら、カーソルを戻すだけです。

Cursor.Current = Cursors.Default;

カーソルを手動で設定します。それが私がしていることです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top