.NET TIPS

待機状態のマウス・カーソルを表示するには?

デジタルアドバンテージ
2004/03/12

 Windowsアプリケーションで時間のかかる処理を行う場合、その処理実行中にユーザー・インターフェイスに何も表示されていないと、それが本当に実行中なのか、もしくはアプリケーションがハングアップ(フリーズ)してしまったのか、区別が付かないことが多い。

 このような場合、進行状況(処理の何%が完了したか)を表すメーター(ProgressBarコントロール)を使った「進行状況ダイアログ」を表示するというのが1つの対処方法である。しかし5秒程度の短い処理だと、ダイアログのメーターがあっという間に100%に達して、すぐにダイアログが閉じられてしまうため、ユーザーにとって使い勝手はよくない。

 このような時間がかかるものの、大して長くない処理、約10秒以内の微妙な長さの処理では、マウス・カーソルを待機(Wait)状態にして処理中を表現する方法がお勧めだ(以降、「待機状態のマウス・カーソル」は「待機カーソル」と記述する)。ここでは、その方法について解説する。

 以下の画面では、通常状態のマウス・カーソルが表示されている。

通常のマウス・カーソルの表示
何もしていない状態では、通常のマウス・カーソルが表示されている。

 このマウス・カーソルの表示を、待機カーソルに変更したのが次の画面だ。なお、下の画面のアプリケーションでは、[Waitカーソル表示]ボタンをクリックすると、5秒間だけマウス・カーソルが待機カーソルに変更される。5秒たつと再び通常のマウス・カーソル表示に戻るようになっている。

待機状態のマウス・カーソルの表示
[Waitカーソル表示]ボタンをクリックすると、5秒間だけマウス・カーソルが待機カーソルに変更される。5秒たつと再び通常のマウス・カーソル表示に戻る。

 上の画面のアプリケーションのように、通常のマウス・カーソルの表示を待機カーソルに変更して、5秒後に再び通常カーソルに戻すには、「現在のカーソル」の状態を「元のカーソル」の状態としていったん保存しておいて、「現在のカーソル」を「待機カーソル」に変更する。そして5秒後に、「現在のカーソル」を、保存しておいた「元のカーソル」に戻せばよい。

 Windowsフォームでは、マウス・カーソルはCursorクラス(System.Windows.Forms名前空間)のオブジェクトで示される。実行中のWindowsアプリケーションの「現在のカーソル」は、そのCursorクラスの静的プロパティであるCurrentプロパティから得られるので、まずこれを「元のカーソル」として一時変数などに保存しておく。次に、システムで用意されている「待機カーソル」を、Cursorsクラス(System.Windows.Forms名前空間)の静的プロパティであるWaitCursorプロパティから取得して、先ほどのCurrentプロパティに設定する。すると、Windowsアプリケーション全体でカーソルが待機状態で表示されるようになる。そして5秒後に、先ほどの「元のカーソル」をCurrentプロパティに再設定して、カーソルを元の状態に戻す。

 この処理を実際に実装したサンプル・プログラムを次に示す。

private void button1_Click(object sender, System.EventArgs e)
{
  // 元のカーソルを保持
  Cursor preCursor = Cursor.Current;

  // カーソルを待機カーソルに変更
  Cursor.Current = Cursors.WaitCursor;

  // 少し時間のかかる処理
  System.Threading.Thread.Sleep(5000);

  // カーソルを元に戻す
  Cursor.Current = preCursor;
}
待機カーソルを表示するサンプル・プログラム
サンプル・プログラム(C#:waitcursor.cs、VB.NET:waitcursor.vb)のダウンロード

 この待機カーソルを使って処理実行中を表現する場合は、1秒以上10秒未満くらいの微妙な長さの処理の場合に最適である。もしこれより長い処理の場合は、「進行状況ダイアログ」を使う方がよいだろう。この「進行状況ダイアログ」を表示する方法については後日あらためて解説する。End of Article

カテゴリ:Windowsフォーム 処理対象:カーソル
使用ライブラリ:Cursorクラス(System.Windows.Forms名前空間)
使用ライブラリ:Cursorsクラス(System.Windows.Forms名前空間)
 
この記事と関連性の高い別の.NET TIPS
簡単に待機カーソルを表示するには?
コンソール画面でカーソルを自由に移動させるには?
コンソール・アプリケーションで進行状況を表示するには?
時間がかかる処理の進行状況をダイアログで表示するには?
Windowsアプリケーション上のマウス・カーソルを変更するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間