DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

フォームやコントロールのマウスポインタ(カーソル)を待機状態にする

時間のかかる処理の間、フォーム上(あるいはコントロール上)のマウスポインタを一時的に待機状態(通常は砂時計のアイコン)にする方法を紹介します。

Cursor.Currentプロパティによる方法

次のコードのように、Cursor.CurrentプロパティをCursors.WaitCursorに変更することにより、すべてのフォーム及びコントロール上のカーソルを待機状態に出来ます。元に戻すには、Cursors.Defaultとします。ただしマウスイベントの待機が再開されることによってカーソルが解除されますので、Cursors.Defaultで元に戻さなくても、大抵の場合は問題なく元に戻ります。

VB.NET
コードを隠すコードを選択
'待機状態
Cursor.Current = Cursors.WaitCursor
'5秒間停止する
System.Threading.Thread.Sleep(5000)
'元に戻す
Cursor.Current = Cursors.Default
C#
コードを隠すコードを選択
//待機状態
Cursor.Current = Cursors.WaitCursor;
//5秒間停止する
System.Threading.Thread.Sleep(5000);
//元に戻す
Cursor.Current = Cursors.Default;

Control.Cursorプロパティによる方法

特定のフォーム上(あるいはコントロール上)のマウスポインタを待機状態にする(砂時計のアイコンにする)には、Control.CursorプロパティをCursors.WaitCursorに変更します。この場合はCursor.Currentプロパティと違い、マウスイベントの待機が再開されることによって解除されるということはありません。

VB.NET
コードを隠すコードを選択
'待機状態
Me.Cursor = Cursors.WaitCursor
'5秒間停止する
System.Threading.Thread.Sleep(5000)
'元に戻す
Me.Cursor = Cursors.Default
C#
コードを隠すコードを選択
//待機状態
this.Cursor = Cursors.WaitCursor;
//5秒間停止する
System.Threading.Thread.Sleep(5000);
//元に戻す
this.Cursor = Cursors.Default;

UseWaitCursorメソッドによる方法

.NET Framework 2.0からは、Control.UseWaitCursorや、Application.UseWaitCursorプロパティをtrueにすることにより、カーソルを待機状態にできます。待機状態を解除するには、UseWaitCursorをfalseにします。

Control.UseWaitCursorでは、そのコントロール(フォームを含む)と、コントロールに配置されたすべての子コントロール上で、カーソルが待機状態になります。

Application.UseWaitCursorでは、アプリケーションのすべてのフォームやコントロール上で、カーソルが待機状態になります。

しかしこれらのプロパティの使用には、注意が必要です。マウスを移動させたというメッセージをフォームが受信しなければ、これらのプロパティでカーソルが変更されることはないようです。よって現時点ではこのプロパティを使用するケースはごく限られます。先に紹介したControl.Cursorプロパティを変更する方法を使用したほうが確実です。

VB.NET
コードを隠すコードを選択
'カーソルの待機状態をトグルで変更する
Application.UseWaitCursor = Not Application.UseWaitCursor
C#
コードを隠すコードを選択
//カーソルの待機状態をトグルで変更する
Application.UseWaitCursor = !Application.UseWaitCursor;
  • 履歴:
  • 2007/1/15 「UseWaitCursorメソッドによる方法」を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。