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

ツールチップ(ツールヒント)を表示する

ここでは、ツールチップ(ツールヒント)を表示する方法を説明します。ツールチップとは、例えば、Windowsのスタートボタンにマウスポインタを移動した時に表示される「このボタンからはじめます」がツールチップです。

コントロールにツールチップを表示する

指定したコントロールにマウスポインタを移動した時にツールチップが表示されるようにするには、ToolTipコンポーネントを使用します。

コントロールにツールチップを表示する

フォームデザイナを使用する方法

Visual Studioを使用しているのであれば、コントロールにツールチップを表示することは非常に簡単です。その手順を簡単に説明します。

  1. フォームデザイナでToolTipを表示させたいコントロールがあるフォームを開き、左側にあるツールボックスからToolTipコンポーネントをフォームにドラッグ&ドロップします(ToolTipコンポーネントはツールボックスの「コモンコントロール」タブ内にあります)。ここでは、ToolTipの名前(Name)が"ToolTip1"であるとします。
    フォームにToolTipを配置
  2. フォームデザイナでツールチップを表示したいコントロールを選択します。
  3. 「プロパティウィンドウ」で「ToolTip1 の ToolTip」という項目を探し、そこにツールチップとして表示したい文字列を入力します。
    コントロールにToolTipを設定
  4. ツールチップの設定を変更したいときは、フォームデザイナでToolTip1を選択し、「プロパティウィンドウ」で"ToolTip1"のプロパティを変更します。ToolTipのプロパティについては、後述します。
  5. 以上で、コントロールにツールチップが表示されるようになります。

自分でコードを書く方法

フォームデザイナを使用しない場合は、自分でコードを書く必要があります。

以下にButton1とButton2にツールチップが表示されるようにするコードの例を示します。このコードは、フォームクラス内に記述されているものとします。

VB.NET
コードを隠すコードを選択
Dim ToolTip1 As ToolTip

'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As Object, _
        ByVal e As EventArgs) Handles MyBase.Load
    'ToolTipを作成する
    ToolTip1 = New ToolTip(Me.components)
    'フォームにcomponentsがない場合
    'ToolTip1 = new ToolTip();
    'ToolTipの設定を行う
    'ToolTipが表示されるまでの時間
    ToolTip1.InitialDelay = 2000
    'ToolTipが表示されている時に、別のToolTipを表示するまでの時間
    ToolTip1.ReshowDelay = 1000
    'ToolTipを表示する時間
    ToolTip1.AutoPopDelay = 10000
    'フォームがアクティブでない時でもToolTipを表示する
    ToolTip1.ShowAlways = True

    'Button1とButton2にToolTipが表示されるようにする
    ToolTip1.SetToolTip(Button1, "Button1です")
    ToolTip1.SetToolTip(Button2, "Button2です")
End Sub
C#
コードを隠すコードを選択
ToolTip ToolTip1;

//フォームのLoadイベントハンドラ
private void Form1_Load(object sender, EventArgs e)
{
    //ToolTipを作成する
    ToolTip1 = new ToolTip(this.components);
    //フォームにcomponentsがない場合
    //ToolTip1 = new ToolTip();

    //ToolTipの設定を行う
    //ToolTipが表示されるまでの時間
    ToolTip1.InitialDelay = 2000;
    //ToolTipが表示されている時に、別のToolTipを表示するまでの時間
    ToolTip1.ReshowDelay = 1000;
    //ToolTipを表示する時間
    ToolTip1.AutoPopDelay = 10000;
    //フォームがアクティブでない時でもToolTipを表示する
    ToolTip1.ShowAlways = true;

    //Button1とButton2にToolTipが表示されるようにする
    ToolTip1.SetToolTip(Button1, "Button1です");
    ToolTip1.SetToolTip(Button2, "Button2です");
}

遅延時間を設定する

ToolTipクラスには、遅延時間を設定するためのプロパティが4つあります。これらのプロパティについて、説明しましょう。

InitialDelayプロパティには、ツールチップが表示されるまでの時間をミリ秒で指定します。マウスポインタをコントロールに移動させてしばらくすると、ツールチップが表示されますが、マウスポインタがコントロール上に移動してからツールチップが表示されるまでの時間を表すのがInitialDelayプロパティです。デフォルトは、500です。

表示されたツールチップは、マウスポインタがコントロールから出るか、一定時間が経過すると自動的に消えます。ツールチップが消えるまでの時間を表すのが、AutoPopDelayプロパティです。ミリ秒で指定し、デフォルトは5000です。

すでにツールチップが表示されており、マウスポインタを別のコントロールに移動して、ツールチップの内容が変更される時に、ツールチップが表示されるまでの時間を表すのが、ReshowDelayプロパティです。ミリ秒で指定し、デフォルトは100です。

上記3つのプロパティを一度に設定できるのが、AutomaticDelayプロパティです。AutomaticDelayプロパティに値を設定すると、InitialDelayプロパティはAutomaticDelay値と同じ値となり、AutoPopDelayプロパティはAutomaticDelay値の10倍となり、ReshowDelayプロパティはAutomaticDelay値の1/5となります。つまり、例えばAutomaticDelayプロパティに1000を設定したならば、InitialDelayプロパティは1000になり、AutoPopDelayプロパティは10000になり、ReshowDelayプロパティは200になります。

補足:AutoPopDelayプロパティで指定された時間が経過してToolTipが消えた後、再びそのコントロールにマウスを移動させてもToolTipが表示されないという不具合が「System.Windows.forms.ToolTip disappears after 5 seconds and does not reappear | Microsoft Connect」で報告されています。回避策として、ToolTipを表示するコントロールのMouseLeaveイベントハンドラで、ToolTip.Activeをfalseにしてからtrueにする方法が紹介されています。

フォーム上の指定した位置に表示する

ToolTipクラスのShowメソッドを使うことにより、フォーム上の指定した位置にツールチップを表示することができます。

以下に、フォームの(0, 0)の位置にツールチップを3秒間表示する例を示します。フォームに"ToolTip1"がすでに配置されており、以下のコードはこのフォームのクラスに記述されているものとします。

VB.NET
コードを隠すコードを選択
'ウィンドウ上の(0, 0)の位置にツールチップを3秒間表示する
ToolTip1.Show("こんにちは。", Me, 0, 0, 3000)
C#
コードを隠すコードを選択
//ウィンドウ上の(0, 0)の位置にツールチップを3秒間表示する
ToolTip1.Show("こんにちは。", this, 0, 0, 3000);

任意の位置にツールチップを表示する

Helpクラス(System.Windows.Forms名前空間)のShowPopupメソッドを使って、ツールチップのような「ポップアップウィンドウ」を表示することもできます。ShowPopupメソッドでは、画面上の任意の位置にポップアップウィンドウを表示することができます。

ShowPopupメソッドで表示したポップアップウィンドウは、見た目はツールチップに似ていますが、ツールチップではありません。ポップアップウィンドウを表示するとフォームは非アクティブになり、フォームをアクティブにするとポップアップウィンドウは消えます。

HelpクラスのShowPopupメソッド

マウスポインタの位置にポップアップウィンドウを表示する例を以下に示します。

VB.NET
コードを隠すコードを選択
'マウスポインタの位置にポップアップウィンドウを表示する
Help.ShowPopup(Me, "こんにちは。", Control.MousePosition)
C#
コードを隠すコードを選択
//マウスポインタの位置にポップアップウィンドウを表示する
Help.ShowPopup(this, "こんにちは。", Control.MousePosition);
  • 履歴:
  • 2009/8/15 画像を増やした。
  • 2009/10/29 「遅延時間を設定する」に補足を追加。

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

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。