.NET TIPS Windowsフォームでポップアップ・ヘルプを表示するには?デジタルアドバンテージ 一色 政彦2005/10/28 |
|
|
Windowsアプリケーションのダイアログでは、「ポップアップ・ヘルプ」(もしくは「バルーン・ヘルプ」)と呼ばれる黄色い小さなウィンドウが表示されることがある。これは、エンド・ユーザーに対して該当コントロールの説明(ヘルプ)をダイナミックに提示するための機能である。
一般的にポップアップ・ヘルプは、タイトルバーにある[?]ボタンをクリックしてマウス・カーソルの形状を「?」に変えてから、その状態のままコントロールをクリックすることで、マウス・カーソル付近に表示される。もしくはコントロールを選択したうえで[F1]キーを押すことでも表示される。
例えば次のサンプル・アプリケーションでは、まずタイトルバーの[?]ボタンをクリックして、次にボタンをクリックしている。これにより、「ポップアップ・ヘルプです。」という文字列のポップアップ・ヘルプが表示される。
ポップアップ・ヘルプを表示するサンプル・アプリケーション |
まずタイトルバーの[?]ボタンをクリックしてマウス・カーソルの形状を「?」にしたうえで、[button1]というButtonコントロールをクリックすると、「ポップアップ・ヘルプです。」という文字列のポップアップ・ヘルプが表示される。 |
本稿ではこのようなポップアップ・ヘルプを手軽に実装する方法を紹介する。
タイトルバーへの[?]ボタンの追加
まず、タイトルバーに[?]ボタン(一般的には「ヘルプ・ボタン」と呼ばれる)を追加する必要がある。これを行うには、フォームのHelpButtonプロパティをTrueに設定すればよい。
この際、MaximizeBoxプロパティとMinimizeBoxプロパティの両方をFalseに設定しなければ、[?]ボタンは有効にならない(通常、ダイアログ・ボックスとして使用するフォームではこれらのプロパティはFalseに設定する)。
以上の設定をVisual Studio .NET(以降、VS.NET)で行っているのが次の画面だ。
VS.NETによるタイトルボタンへの[?]ボタンの追加 |
フォームのHelpButtonプロパティをTrueに設定する。その際、MaximizeBoxプロパティとMinimizeBoxプロパティをFalseに設定しなければならない。 |
[?]ボタンを追加できたら、次にポップアップ・ヘルプが表示されるようにしよう。これを簡単に実装するには、HelpProviderコンポーネント(System.Windows.Forms名前空間)を利用すればよい。具体的な利用手順は、以下のとおりだ。
HelpProviderコンポーネントのインスタンス化
まず次のコード例のように、Windowsフォームのクラス内でHelpProviderコンポーネントをフィールド変数として宣言し、コンストラクタにてインスタンス化する。
|
||
HelpProviderコンポーネントのインスタンス化(上:C#、下:VB.NET) |
このHelpProviderコンポーネントのインスタンス化は、VS.NETを利用すれば次の画面の例のようにWindowsフォーム・デザイナでHelpProviderコンポーネントをドラッグ&ドロップするだけで済み、自らコーディングを行う必要はない。
VS.NETによるHelpProviderコンポーネントのインスタンス化 | |||||||||
HelpProviderコンポーネントのインスタンス化はVS.NETを利用すればとても簡単。 | |||||||||
|
次に、インスタンス化したHelpProviderコンポーネント(以降、HelpProviderオブジェクト)に対してポップアップ・ヘルプの設定を行う。
HelpProviderオブジェクトに対するポップアップ・ヘルプの設定
ある1つのコントロールに対してポップアップ・ヘルプを設定するために必要な情報は、「ポップアップ・ヘルプを設定(表示)するコントロール」と、「ポップアップ・ヘルプの表示文字列」の2つだ。
この2つの情報をパラメータに指定してHelpProviderオブジェクトのSetHelpStringメソッドを呼び出せば、そのコントロールに対するポップアップ・ヘルプの設定は完了である。具体的には次のようなコードになる。
|
||
ポップアップ・ヘルプの設定(上:C#、下:VB.NET) |
複数のコントロールでポップアップ・ヘルプを表示したい場合には、以上の設定をコントロールごとに行う必要がある(つまり、コントロールごとにSetHelpStringメソッドを呼び出す必要がある)。
この設定もVS.NETなら、次の画面のように[プロパティ]ウィンドウから手軽に行うことができる。
ただしVS.NETの[プロパティ]ウィンドウで[<HelpProviderオブジェクト名> の HelpString]プロパティを設定する場合には注意点がある。
[<HelpProviderオブジェクト名> の HelpString]プロパティに文字列を設定する(=実質的にはSetHelpStringメソッドが呼び出される)と同時に、ポップアップ・ヘルプの有効化・無効化を設定するためのSetShowHelpメソッドが(パラメータにTrueが設定されて)、SetHelpStringメソッド内部で自動的に呼び出される仕様になっている。これにより、何も設定しなくともポップアップ・ヘルプが表示される状態となる。さらに、VS.NETが自動生成するコード内部でも、このSetShowHelpメソッドが呼び出される。つまり、2段階でSetShowHelpメソッドが呼び出されている。
しかしこれらのSetShowHelpメソッドの呼び出しは、[プロパティ]ウィンドウに表示される[<HelpProviderオブジェクト名> の ShowHelp]プロパティにはすぐには反映されないことがあるようだ。そのため、[プロパティ]ウィンドウでは[<HelpProviderオブジェクト名> の ShowHelp]プロパティがFalseになっていても、実際にはTrueに設定されているということが起こり得るので注意してほしい。
以上のコードを実装し、ビルドして実行すると、冒頭のサンプル・アプリケーションのようなポップアップ・ヘルプが表示される。
ポップアップ・ヘルプの表示位置について
本稿の方法でポップアップ・ヘルプを実装した場合、マウス・カーソルの近くにポップアップ・ヘルプが表示されることになる。この仕様は確かに[?]ボタンをマウスでクリックしてからポップアップ・ヘルプを表示した場合には適切である。しかし[F1]キーでポップアップ・ヘルプを表示した場合、マウス・カーソルの位置が離れていればそのカーソル付近にヘルプが表示されてしまうため非常に見にくい。
この対策については、「TIPS:任意の位置にポップアップ・ヘルプを表示するには?」で紹介している。
カテゴリ:Windowsフォーム 処理対象:ポップアップ・ヘルプ 使用ライブラリ:HelpProviderコンポーネント(System.Windows.Forms名前空間) 関連TIPS:任意の位置にポップアップ・ヘルプを表示するには? |
|
「.NET TIPS」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|