Winformアプリケーションの砂時計の問題
-
01-10-2019 - |
質問
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;
カーソルを手動で設定します。それが私がしていることです。
所属していません StackOverflow