.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コンポーネントをフィールド変数として宣言し、コンストラクタにてインスタンス化する。

private HelpProvider HelpProvider1;
public Form1()
{
  popupHelp = new HelpProvider();
}
Friend WithEvents popupHelp As HelpProvider
Public Sub New()
  MyBase.New()
  popupHelp = New HelpProvider()
End Sub
HelpProviderコンポーネントのインスタンス化(上:C#、下:VB.NET)

 このHelpProviderコンポーネントのインスタンス化は、VS.NETを利用すれば次の画面の例のようにWindowsフォーム・デザイナでHelpProviderコンポーネントをドラッグ&ドロップするだけで済み、自らコーディングを行う必要はない。

VS.NETによるHelpProviderコンポーネントのインスタンス化
HelpProviderコンポーネントのインスタンス化はVS.NETを利用すればとても簡単。
  [ツールボックス]ウィンドウの[Windows フォーム]カテゴリにある「HelpProvider」をWindowsフォーム上にドラッグ&ドロップする。
  すると、インスタンスかされたHelpProviderコンポーネント(基本的には「HelpProvider1」)がWindowsフォーム・デザイナ下部のコンポーネント領域に表示される。これでHelpProviderコンポーネントのインスタンス化は終了だ。
  ここで分かりやすい名前に変更しておくと、後々使用する段階で便利だ。本稿では、「HelpProvider1」から「popupHelp」という名前に変更した。

 次に、インスタンス化したHelpProviderコンポーネント(以降、HelpProviderオブジェクト)に対してポップアップ・ヘルプの設定を行う。

HelpProviderオブジェクトに対するポップアップ・ヘルプの設定

 ある1つのコントロールに対してポップアップ・ヘルプを設定するために必要な情報は、「ポップアップ・ヘルプを設定(表示)するコントロール」と、「ポップアップ・ヘルプの表示文字列」の2つだ。

 この2つの情報をパラメータに指定してHelpProviderオブジェクトのSetHelpStringメソッドを呼び出せば、そのコントロールに対するポップアップ・ヘルプの設定は完了である。具体的には次のようなコードになる。

private void Form1_Load(object sender, System.EventArgs e)
{
  popupHelp.SetHelpString(button1, "ポップアップ・ヘルプです。");
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  popupHelp.SetHelpString(button1, "ポップアップ・ヘルプです。")
End Sub
ポップアップ・ヘルプの設定(上:C#、下:VB.NET)

 複数のコントロールでポップアップ・ヘルプを表示したい場合には、以上の設定をコントロールごとに行う必要がある(つまり、コントロールごとにSetHelpStringメソッドを呼び出す必要がある)。

 この設定もVS.NETなら、次の画面のように[プロパティ]ウィンドウから手軽に行うことができる。

VS.NETによるポップアップ・ヘルプの設定
VS.NETの[プロパティ]ウィンドウを使えばポップアップ・ヘルプ文字列の設定も簡単だ。なお以下の手順は、ポップアップ・ヘルプを表示したいすべてのコントロールに対して行う必要がある。
  ポップアップ・ヘルプを表示したいコントロールを選択する。
  [<HelpProviderオブジェクト名> の HelpString]プロパティに表示したい文字列を設定する。本稿の例では、[popupHelp の HelpString]プロパティに「ポップアップ・ヘルプです。」という文字列を設定した。

 ただしVS.NETの[プロパティ]ウィンドウで[<HelpProviderオブジェクト名> の HelpString]プロパティを設定する場合には注意点がある。

 [<HelpProviderオブジェクト名> の HelpString]プロパティに文字列を設定する(=実質的にはSetHelpStringメソッドが呼び出される)と同時に、ポップアップ・ヘルプの有効化・無効化を設定するためのSetShowHelpメソッドが(パラメータにTrueが設定されて)、SetHelpStringメソッド内部で自動的に呼び出される仕様になっている。これにより、何も設定しなくともポップアップ・ヘルプが表示される状態となる。さらに、VS.NETが自動生成するコード内部でも、このSetShowHelpメソッドが呼び出される。つまり、2段階でSetShowHelpメソッドが呼び出されている。

 しかしこれらのSetShowHelpメソッドの呼び出しは、[プロパティ]ウィンドウに表示される[<HelpProviderオブジェクト名> の ShowHelp]プロパティにはすぐには反映されないことがあるようだ。そのため、[プロパティ]ウィンドウでは[<HelpProviderオブジェクト名> の ShowHelp]プロパティがFalseになっていても、実際にはTrueに設定されているということが起こり得るので注意してほしい。

 以上のコードを実装し、ビルドして実行すると、冒頭のサンプル・アプリケーションのようなポップアップ・ヘルプが表示される。

ポップアップ・ヘルプの表示位置について

 本稿の方法でポップアップ・ヘルプを実装した場合、マウス・カーソルの近くにポップアップ・ヘルプが表示されることになる。この仕様は確かに[?]ボタンをマウスでクリックしてからポップアップ・ヘルプを表示した場合には適切である。しかし[F1]キーでポップアップ・ヘルプを表示した場合、マウス・カーソルの位置が離れていればそのカーソル付近にヘルプが表示されてしまうため非常に見にくい。

 この対策については、「TIPS:任意の位置にポップアップ・ヘルプを表示するには?」で紹介している。End of Article

カテゴリ:Windowsフォーム 処理対象:ポップアップ・ヘルプ
使用ライブラリ:HelpProviderコンポーネント(System.Windows.Forms名前空間)
関連TIPS:任意の位置にポップアップ・ヘルプを表示するには?

この記事と関連性の高い別の.NET TIPS
任意の位置にポップアップ・ヘルプを表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム 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 記事ランキング

本日 月間