C#ツールチップの使い方を完全解説|表示されない原因とカスタマイズ方法までわかる

はじめに

C#でWindowsアプリケーションを開発していると、ボタンや入力欄に補足説明を表示したい場面があります。そのようなときに便利なのが「ツールチップ」です。

ツールチップとは、ユーザーがマウスカーソルをコントロールの上に置いたときに、小さな吹き出しやポップアップで説明文を表示する機能です。入力フォームの説明、ボタンの役割、注意書き、エラーメッセージなどを自然に伝えられるため、ユーザーにとってわかりやすい画面を作るうえで役立ちます。

C#でツールチップを実装する方法は、Windows FormsとWPFで異なります。Windows FormsではToolTipコントロールを使い、WPFでは各コントロールのToolTipプロパティを使うのが基本です。

この記事では、C#ツールチップの基本的な使い方から、表示されない原因、表示時間の変更、見た目のカスタマイズ、実用的な実装例まで詳しく解説します。

1. C#のツールチップとは?基本機能と使いどころ

C#におけるツールチップは、画面上のコントロールに対して補足情報を表示するためのUI機能です。主にWindowsデスクトップアプリケーションで使われ、Windows FormsやWPFで簡単に実装できます。

たとえば、保存ボタンにマウスを合わせたときに「入力内容を保存します」と表示したり、テキストボックスに「半角数字で入力してください」と表示したりできます。

画面上に常に説明文を表示するとUIがごちゃごちゃしてしまいますが、ツールチップを使えば必要なタイミングだけ補足説明を出せます。そのため、画面をすっきり保ちながら、ユーザーの操作をサポートできます。

1-1. ツールチップでできること

C#のツールチップでは、主に次のようなことができます。

コントロールにマウスカーソルを合わせたときに説明文を表示できます。説明文は短いテキストだけでなく、改行を含む複数行のテキストにも対応できます。

Windows Formsでは、ToolTipTitleを使ってタイトル付きのツールチップを表示したり、ToolTipIconを使って情報、警告、エラーなどのアイコンを表示したりできます。

また、InitialDelayAutoPopDelayなどのプロパティを使うことで、表示開始までの時間や表示され続ける時間も調整できます。

WPFでは、文字列だけでなく、StackPanelTextBlockなどのUI要素をツールチップの中に配置できるため、より柔軟な表現が可能です。

1-2. C#でツールチップを使う主な場面

C#のツールチップは、次のような場面でよく使われます。

入力フォームでは、入力ルールの補足説明に使えます。たとえば、郵便番号欄に「ハイフンなしで入力してください」、パスワード欄に「8文字以上で入力してください」と表示できます。

アイコンボタンにもツールチップは効果的です。アイコンだけでは意味が伝わりにくい場合でも、「編集」「削除」「更新」「検索」などの説明を表示すれば、ユーザーが迷いにくくなります。

一覧画面では、セルに収まりきらない詳細情報をツールチップで表示することもできます。DataGridViewやListViewなどで、表示しきれない内容を補足する場合に便利です。

また、エラーや注意を伝える用途にも使えます。ただし、重要なエラーはツールチップだけに頼らず、画面上にも明確に表示することが大切です。

1-3. Windows FormsとWPFにおけるツールチップの違い

Windows FormsとWPFでは、ツールチップの設定方法が異なります。

Windows Formsでは、ToolTipクラスのインスタンスを作成し、SetToolTipメソッドで各コントロールに説明文を設定します。

C#
ToolTip toolTip = new ToolTip();
toolTip.SetToolTip(button1, "クリックすると保存します");

一方、WPFでは各コントロールに用意されているToolTipプロパティを使います。XAMLで直接設定できるため、画面デザインと一緒に記述しやすいのが特徴です。

XML
<Button Content="保存" ToolTip="クリックすると保存します" />

Windows Formsはシンプルなデスクトップアプリに向いており、基本的なツールチップを簡単に実装できます。WPFはデザインの自由度が高く、複雑なレイアウトや装飾を含むツールチップを作りたい場合に向いています。

2. Windows FormsでToolTipを表示する基本的な使い方

Windows Formsでツールチップを使う場合は、System.Windows.Forms.ToolTipクラスを使用します。フォーム上のButton、TextBox、Label、CheckBoxなど、さまざまなコントロールに説明文を設定できます。

もっとも基本的な流れは、ToolTipオブジェクトを作成し、SetToolTipメソッドで対象のコントロールと表示する文字列を指定することです。

2-1. ToolTipコントロールをフォームに追加する方法

Visual Studioのデザイナーを使う場合は、ツールボックスからToolTipコントロールをフォームにドラッグ&ドロップします。

ToolTipは画面上に表示される通常のコントロールではなく、フォーム下部のコンポーネント領域に追加されます。その後、各コントロールのプロパティからツールチップのテキストを設定できます。

コードで追加する場合は、次のようにToolTipクラスのインスタンスを作成します。

C#
private ToolTip toolTip1 = new ToolTip();

private void Form1_Load(object sender, EventArgs e)
{
toolTip1.SetToolTip(button1, "このボタンを押すと処理を実行します");
}

フォーム全体で同じToolTipインスタンスを使い回すことができるため、複数のコントロールに対して1つのToolTipを使うのが一般的です。

2-2. SetToolTipメソッドでテキストを設定する方法

Windows Formsでツールチップのテキストを設定するには、SetToolTipメソッドを使います。

C#
toolTip1.SetToolTip(対象のコントロール, "表示するテキスト");

たとえば、ボタンにツールチップを設定する場合は次のように書きます。

C#
ToolTip toolTip = new ToolTip();
toolTip.SetToolTip(buttonSave, "入力内容を保存します");

これで、ユーザーがbuttonSaveにマウスカーソルを合わせると、「入力内容を保存します」という説明が表示されます。

ツールチップの内容を後から変更したい場合も、同じSetToolTipメソッドを再度呼び出せば更新できます。

C#
toolTip.SetToolTip(buttonSave, "変更内容を保存します");

ツールチップを削除したい場合は、空文字を設定します。

C#
toolTip.SetToolTip(buttonSave, "");

2-3. Button・TextBox・Labelにツールチップを設定する例

Windows Formsでは、Button、TextBox、Labelなどの基本的なコントロールに簡単にツールチップを設定できます。

C#
using System;
using System.Windows.Forms;

namespace ToolTipSample
{
public partial class Form1 : Form
{
private ToolTip toolTip = new ToolTip();

public Form1()
{
InitializeComponent();

toolTip.SetToolTip(buttonSave, "入力内容を保存します");
toolTip.SetToolTip(textBoxName, "名前を入力してください");
toolTip.SetToolTip(labelEmail, "メールアドレスは連絡用に使用します");
}
}
}

この例では、保存ボタン、名前入力欄、メールアドレスのラベルにそれぞれ異なる説明文を設定しています。

フォームの初期化後に設定するだけで動作するため、C#ツールチップの基本実装として非常にわかりやすい方法です。

2-4. 複数のコントロールにツールチップを設定する方法

複数のコントロールにツールチップを設定する場合でも、ToolTipインスタンスは1つで問題ありません。

C#
private ToolTip toolTip = new ToolTip();

private void Form1_Load(object sender, EventArgs e)
{
toolTip.SetToolTip(buttonAdd, "新しいデータを追加します");
toolTip.SetToolTip(buttonEdit, "選択中のデータを編集します");
toolTip.SetToolTip(buttonDelete, "選択中のデータを削除します");
toolTip.SetToolTip(buttonRefresh, "一覧を再読み込みします");
}

同じ種類のコントロールが多い場合は、配列やループを使ってまとめて設定することもできます。

C#
private void Form1_Load(object sender, EventArgs e)
{
var buttons = new Dictionary<Button, string>
{
{ buttonAdd, "追加します" },
{ buttonEdit, "編集します" },
{ buttonDelete, "削除します" }
};

foreach (var item in buttons)
{
toolTip.SetToolTip(item.Key, item.Value);
}
}

このようにまとめて設定すると、フォーム内のツールチップを管理しやすくなります。

3. WPFでToolTipを表示する基本的な使い方

WPFでツールチップを表示する場合は、各コントロールのToolTipプロパティを使用します。Windows FormsのようにToolTipコンポーネントを別途用意する必要はなく、XAML上で直接指定できます。

WPFのツールチップは文字列だけでなく、複数のUI要素を含められるため、柔軟な表示が可能です。

3-1. XAMLでToolTipを設定する方法

もっとも簡単な方法は、XAMLでToolTip属性に文字列を指定する方法です。

XML
<Button Content="保存"
Width="100"
Height="30"
ToolTip="入力内容を保存します" />

このように書くだけで、ボタンにマウスカーソルを合わせたときにツールチップが表示されます。

TextBoxに設定する場合は次のように書きます。

XML
<TextBox Width="200"
ToolTip="名前を入力してください" />

WPFではXAMLでUIを管理することが多いため、固定の説明文であればXAMLに直接書く方法がわかりやすいです。

3-2. C#コードビハインドでToolTipを設定する方法

ツールチップの内容を動的に変更したい場合は、C#のコードビハインドでToolTipプロパティに値を設定できます。

C#
buttonSave.ToolTip = "入力内容を保存します";
textBoxName.ToolTip = "名前を入力してください";

ToolTipプロパティには文字列だけでなく、ToolTipオブジェクトを設定することもできます。

C#
ToolTip tip = new ToolTip();
tip.Content = "クリックすると保存します";

buttonSave.ToolTip = tip;

状況によって表示内容を変えたい場合は、イベント内で設定することもできます。

C#
private void textBoxName_TextChanged(object sender, TextChangedEventArgs e)
{
if (string.IsNullOrWhiteSpace(textBoxName.Text))
{
textBoxName.ToolTip = "名前は必須です";
}
else
{
textBoxName.ToolTip = "入力済みです";
}
}

このように、WPFでもC#コードから簡単にツールチップを制御できます。

3-3. Button・TextBox・ComboBoxにツールチップを設定する例

WPFでButton、TextBox、ComboBoxにツールチップを設定する例は次のとおりです。

XML
<StackPanel Margin="20">
<Button Content="保存"
Width="120"
ToolTip="入力内容を保存します" />

<TextBox Width="200"
Margin="0,10,0,0"
ToolTip="ユーザー名を入力してください" />

<ComboBox Width="200"
Margin="0,10,0,0"
ToolTip="カテゴリを選択してください">
<ComboBoxItem Content="仕事" />
<ComboBoxItem Content="個人" />
<ComboBoxItem Content="その他" />
</ComboBox>
</StackPanel>

WPFでは、ほとんどのコントロールがToolTipプロパティを持っているため、同じような書き方で設定できます。

3-4. WPFで複数行のツールチップを表示する方法

WPFで複数行のツールチップを表示したい場合は、TextBlockを使う方法が便利です。

XML
<Button Content="登録">
<Button.ToolTip>
<ToolTip>
<TextBlock>
入力内容を登録します。<LineBreak/>
必須項目が未入力の場合は登録できません。
</TextBlock>
</ToolTip>
</Button.ToolTip>
</Button>

長い説明文を表示する場合は、TextWrappingを設定すると読みやすくなります。

XML
<Button Content="ヘルプ">
<Button.ToolTip>
<ToolTip>
<TextBlock TextWrapping="Wrap"
Width="250"
Text="この画面ではユーザー情報を登録できます。名前、メールアドレス、権限を入力してください。" />
</ToolTip>
</Button.ToolTip>
</Button>

WPFではツールチップの中にStackPanelImageなども入れられるため、レイアウトを工夫すれば見やすい補足説明を作成できます。

4. C#ツールチップが表示されない原因と対処法

C#でツールチップを設定したのに表示されない場合、いくつかの原因が考えられます。Windows FormsとWPFでは確認すべきポイントが少し異なります。

ここでは、よくある原因と対処法を順番に解説します。

4-1. ToolTipがコントロールに正しく設定されていない

Windows Formsでよくある原因は、SetToolTipメソッドが正しいコントロールに対して呼び出されていないことです。

C#
toolTip.SetToolTip(buttonSave, "保存します");

このように、対象のコントロールが正しいか確認しましょう。似た名前のコントロールが複数ある場合、別のコントロールに設定していることがあります。

また、InitializeComponent()より前にコントロールへアクセスしていると、まだコントロールが生成されていないため問題が発生することがあります。基本的にはコンストラクタ内でInitializeComponent()を呼び出した後、またはForm_Loadイベント内で設定します。

C#
public Form1()
{
InitializeComponent();

toolTip.SetToolTip(buttonSave, "保存します");
}

4-2. 表示時間や初期遅延の設定に問題がある

InitialDelayAutoPopDelayの値が極端に大きい、または不適切な値になっていると、ツールチップが表示されないように見えることがあります。

C#
toolTip.InitialDelay = 500;
toolTip.AutoPopDelay = 5000;
toolTip.ReshowDelay = 100;

InitialDelayは表示開始までの時間、AutoPopDelayは表示され続ける時間、ReshowDelayは別のコントロールへ移動したときの再表示までの時間です。

たとえばInitialDelayを非常に長く設定すると、ユーザーがマウスを置いてもなかなか表示されません。表示されないと感じる場合は、まず標準的な値に戻して確認しましょう。

4-3. コントロールが無効化されている

Windows Formsでは、Enabledfalseになっているコントロールにマウスイベントが届かないため、通常の方法ではツールチップが表示されないことがあります。

C#
buttonSave.Enabled = false;

このような無効化されたコントロールに説明を出したい場合は、親のPanelにツールチップを設定したり、別の説明ラベルを用意したりする方法があります。

WPFの場合は、ToolTipService.ShowOnDisabledを使うことで、無効化されたコントロールにもツールチップを表示できます。

XML
<Button Content="保存"
IsEnabled="False"
ToolTip="入力内容が不足しているため保存できません"
ToolTipService.ShowOnDisabled="True" />

無効化された理由を説明したい場合、WPFではこの方法が便利です。

4-4. フォームや画面のフォーカスが影響している

Windows Formsでは、フォームが非アクティブの状態だとツールチップが表示されないことがあります。別のウィンドウが前面にある場合や、フォームがフォーカスを持っていない場合です。

このような場合は、ShowAlwaysプロパティをtrueに設定すると改善することがあります。

C#
toolTip.ShowAlways = true;

ただし、常に表示できるようにすると、ユーザーの意図しない場面で表示される可能性もあるため、必要な場合だけ使用しましょう。

4-5. WPFでToolTipプロパティの指定方法が間違っている

WPFでは、ToolTipプロパティの指定方法を間違えると表示されません。

正しい例は次のとおりです。

XML
<Button Content="保存" ToolTip="保存します" />

複雑な内容を設定する場合は、プロパティ要素構文を使います。

XML
<Button Content="保存">
<Button.ToolTip>
<ToolTip Content="保存します" />
</Button.ToolTip>
</Button>

一方で、ToolTipタグの入れ子や名前空間の指定を間違えると、意図した表示にならないことがあります。XAMLの構造が正しいか確認しましょう。

4-6. 実行環境やデザイン設定による表示トラブル

ツールチップの見た目や表示タイミングは、Windowsのテーマ、DPI設定、アプリケーションのスタイル、カスタム描画の有無によって影響を受けることがあります。

特にWindows FormsでOwnerDrawを有効にしている場合、Drawイベントの処理に問題があると、ツールチップが正しく描画されません。

C#
toolTip.OwnerDraw = true;
toolTip.Draw += toolTip_Draw;

このような場合は、まずOwnerDrawを無効にして標準表示で動作するか確認しましょう。

また、ツールチップの文字色と背景色が近すぎると、表示されていても見えない場合があります。カスタマイズしている場合は、色の設定も確認してください。

5. ToolTipの表示時間・遅延時間をカスタマイズする方法

Windows FormsのToolTipクラスには、表示タイミングを制御するためのプロパティが用意されています。

ツールチップが表示されるまでの時間、表示され続ける時間、別のコントロールに移動したときの再表示時間などを調整できます。

5-1. InitialDelayで表示開始までの時間を変更する

InitialDelayは、マウスカーソルをコントロールの上に置いてから、ツールチップが表示されるまでの時間をミリ秒単位で指定するプロパティです。

C#
toolTip.InitialDelay = 500;

この例では、マウスを置いてから0.5秒後にツールチップが表示されます。

すぐに説明を表示したい場合は短めに設定し、誤表示を避けたい場合は少し長めに設定します。

C#
toolTip.InitialDelay = 1000;

ただし、長すぎるとユーザーがツールチップに気づきにくくなるため、500ミリ秒から1000ミリ秒程度を目安にするとよいでしょう。

5-2. AutoPopDelayで表示される時間を変更する

AutoPopDelayは、ツールチップが表示され続ける時間をミリ秒単位で指定するプロパティです。

C#
toolTip.AutoPopDelay = 5000;

この例では、ツールチップが最大5秒間表示されます。

説明文が短い場合は標準のままで問題ありませんが、複数行の説明や少し長めの補足文を表示する場合は、表示時間を長めに設定すると読みやすくなります。

C#
toolTip.AutoPopDelay = 10000;

ただし、長すぎるツールチップは画面操作の邪魔になることがあります。必要以上に長く表示しないようにしましょう。

5-3. ReshowDelayで再表示までの時間を変更する

ReshowDelayは、あるコントロールから別のコントロールへマウスを移動したときに、次のツールチップが表示されるまでの時間を指定します。

C#
toolTip.ReshowDelay = 100;

複数のボタンが並んでいる画面では、ReshowDelayを短くしておくと、ユーザーが各ボタンの意味を確認しやすくなります。

C#
toolTip.InitialDelay = 700;
toolTip.ReshowDelay = 100;

最初の表示は少し待たせ、次のコントロールではすばやく表示するという設定にすると、自然な操作感になります。

5-4. ShowAlwaysでフォーム非アクティブ時にも表示する

ShowAlwaysは、フォームがアクティブでない場合でもツールチップを表示するかどうかを指定するプロパティです。

C#
toolTip.ShowAlways = true;

通常、ツールチップはアクティブなフォーム上で表示されます。しかし、特殊な画面構成や複数ウィンドウを扱うアプリでは、フォームの状態によって表示されないことがあります。

そのような場合にShowAlwaystrueにすると改善する可能性があります。

C#
toolTip.ShowAlways = true;
toolTip.SetToolTip(buttonHelp, "ヘルプを表示します");

ただし、通常のアプリケーションでは必須ではありません。表示されない問題がある場合や、非アクティブ時にも説明を出したい場合に検討しましょう。

6. C#ツールチップの見た目をカスタマイズする方法

C#のツールチップは、テキストを表示するだけでなく、タイトル、アイコン、色、独自描画などを使って見た目をカスタマイズできます。

特にWindows Formsでは、ToolTipTitleToolTipIconOwnerDrawなどを使って表現を調整できます。WPFではXAMLを使って、より自由にレイアウトできます。

6-1. 複数行テキストを表示する方法

Windows Formsで複数行のツールチップを表示したい場合は、文字列に改行コードを含めます。

C#
toolTip.SetToolTip(
buttonRegister,
"入力内容を登録します。\n必須項目を確認してください。"
);

環境に合わせてEnvironment.NewLineを使う方法もあります。

C#
toolTip.SetToolTip(
buttonRegister,
"入力内容を登録します。" + Environment.NewLine +
"必須項目を確認してください。"
);

WPFの場合は、TextBlockLineBreakを使うと自然に複数行を表現できます。

XML
<Button Content="登録">
<Button.ToolTip>
<ToolTip>
<TextBlock>
入力内容を登録します。<LineBreak/>
必須項目を確認してください。
</TextBlock>
</ToolTip>
</Button.ToolTip>
</Button>

長い説明文を表示する場合は、横幅を指定して折り返すと読みやすくなります。

6-2. タイトル付きツールチップを表示する方法

Windows Formsでは、ToolTipTitleプロパティを使うとタイトル付きのツールチップを表示できます。

C#
toolTip.ToolTipTitle = "保存";
toolTip.SetToolTip(buttonSave, "入力内容を保存します");

タイトルを付けると、説明の意味がより明確になります。特に「注意」「エラー」「ヘルプ」などの分類を示したい場合に便利です。

C#
toolTip.ToolTipTitle = "入力のヒント";
toolTip.SetToolTip(textBoxPassword, "8文字以上で入力してください");

ただし、同じToolTipインスタンスを複数のコントロールで使っている場合、ToolTipTitleは共通設定になります。コントロールごとにタイトルを変えたい場合は、ツールチップを分けるか、表示前に動的に変更する必要があります。

6-3. アイコン付きツールチップを表示する方法

Windows Formsでは、ToolTipIconプロパティを使ってアイコン付きのツールチップを表示できます。

C#
toolTip.ToolTipTitle = "情報";
toolTip.ToolTipIcon = ToolTipIcon.Info;
toolTip.SetToolTip(buttonInfo, "詳細情報を表示します");

指定できる代表的なアイコンには、InfoWarningErrorなどがあります。

C#
toolTip.ToolTipTitle = "注意";
toolTip.ToolTipIcon = ToolTipIcon.Warning;
toolTip.SetToolTip(textBoxAge, "年齢は数値で入力してください");

注意喚起やエラー説明ではアイコンがあると伝わりやすくなります。ただし、通常の補足説明に多用すると画面がうるさく感じられるため、重要な場面に限定して使うのがおすすめです。

6-4. 背景色・文字色を変更する方法

Windows FormsのToolTipでは、BackColorForeColorを使って背景色や文字色を設定できます。

C#
toolTip.BackColor = Color.LightYellow;
toolTip.ForeColor = Color.Black;
toolTip.SetToolTip(buttonHelp, "ヘルプを表示します");

ただし、Windowsのテーマや表示スタイルによっては、色の指定が反映されにくい場合があります。その場合は、OwnerDrawを使った独自描画を検討します。

WPFでは、ToolTipの中にスタイルを指定できます。

XML
<Button Content="ヘルプ">
<Button.ToolTip>
<ToolTip Background="LightYellow" Foreground="Black">
ヘルプを表示します
</ToolTip>
</Button.ToolTip>
</Button>

WPFはデザインの自由度が高いため、色やフォント、余白などをXAMLで調整しやすいです。

6-5. OwnerDrawで独自デザインのツールチップを作る方法

Windows Formsでさらに細かく見た目を制御したい場合は、OwnerDrawを使います。OwnerDrawtrueにすると、ツールチップの描画処理を自分で実装できます。

C#
toolTip.OwnerDraw = true;
toolTip.Draw += toolTip_Draw;
toolTip.Popup += toolTip_Popup;

private void toolTip_Popup(object sender, PopupEventArgs e)
{
e.ToolTipSize = new Size(250, 60);
}

private void toolTip_Draw(object sender, DrawToolTipEventArgs e)
{
e.Graphics.FillRectangle(Brushes.LightYellow, e.Bounds);
e.Graphics.DrawRectangle(Pens.Gray, new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width - 1, e.Bounds.Height - 1));

using (Font font = new Font("Meiryo", 9))
{
e.Graphics.DrawString(e.ToolTipText, font, Brushes.Black, new PointF(8, 8));
}
}

この方法を使うと、背景、枠線、フォント、余白などを自由に設定できます。

ただし、独自描画はコードが複雑になりやすく、DPIやテーマによる見え方の違いにも注意が必要です。標準のツールチップで十分な場合は、無理にOwnerDrawを使う必要はありません。

7. 実用的なツールチップ実装例

ここでは、実際のC#アプリケーションで使いやすいツールチップの実装例を紹介します。

単なる説明文だけでなく、入力補助、注意表示、一覧画面での詳細表示、動的な内容変更など、実務でよく使うパターンを押さえておきましょう。

7-1. 入力フォームの補足説明を表示する

入力フォームでは、入力ルールや形式をツールチップで表示すると便利です。

C#
toolTip.SetToolTip(textBoxName, "氏名を入力してください");
toolTip.SetToolTip(textBoxEmail, "例:sample@example.com");
toolTip.SetToolTip(textBoxPhone, "ハイフンなしで入力してください");

画面上にすべての説明を表示すると情報量が多くなりますが、ツールチップを使えば必要なときだけ補足できます。

ただし、必須項目や重要な注意点は、ツールチップだけでなくラベルやメッセージでも示すと親切です。

7-2. エラーメッセージや注意文を表示する

入力エラーがある場合に、対象のコントロールへツールチップで注意文を表示することもできます。

C#
if (string.IsNullOrWhiteSpace(textBoxName.Text))
{
toolTip.ToolTipTitle = "入力エラー";
toolTip.ToolTipIcon = ToolTipIcon.Warning;
toolTip.SetToolTip(textBoxName, "名前を入力してください");
}

ボタンを押したときに一時的にツールチップを表示したい場合は、Showメソッドを使うこともできます。

C#
toolTip.Show("名前を入力してください", textBoxName, 0, textBoxName.Height, 3000);

この例では、textBoxNameの近くに3秒間ツールチップを表示します。

エラー表示にはErrorProviderを使う方法もありますが、簡単な補足や注意であればツールチップも有効です。

7-3. アイコンボタンに説明を追加する

アイコンだけのボタンは見た目がすっきりしますが、ユーザーによっては意味がわかりにくい場合があります。

C#
toolTip.SetToolTip(buttonSearch, "検索");
toolTip.SetToolTip(buttonEdit, "編集");
toolTip.SetToolTip(buttonDelete, "削除");
toolTip.SetToolTip(buttonPrint, "印刷");

特にツールバーやメニューのようにアイコンが並ぶUIでは、ツールチップを付けることで操作性が向上します。

削除などの重要な操作では、ツールチップに簡単な説明を加えるとより親切です。

C#
toolTip.SetToolTip(buttonDelete, "選択中のデータを削除します");

7-4. DataGridViewや一覧画面で詳細情報を表示する

Windows FormsのDataGridViewでは、セルにツールチップを設定できます。

C#
dataGridView1.Rows[0].Cells[0].ToolTipText = "このセルの詳細情報です";

動的に表示内容を変えたい場合は、CellToolTipTextNeededイベントを使う方法があります。

C#
private void dataGridView1_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
e.ToolTipText = $"行: {e.RowIndex + 1}, 列: {e.ColumnIndex + 1}";
}
}

セルに表示しきれない長いテキストや、補足情報を表示したい場合に便利です。

一覧画面では情報量が多くなりがちなので、必要な詳細だけをツールチップで表示すると画面を見やすく保てます。

7-5. 動的にツールチップの内容を変更する

状況に応じてツールチップの内容を変更したい場合は、イベント内でSetToolTipを呼び出します。

C#
private void textBoxPassword_TextChanged(object sender, EventArgs e)
{
if (textBoxPassword.Text.Length < 8)
{
toolTip.SetToolTip(textBoxPassword, "パスワードは8文字以上で入力してください");
}
else
{
toolTip.SetToolTip(textBoxPassword, "使用できるパスワードです");
}
}

ボタンの状態に応じて説明を変更することもできます。

C#
private void UpdateSaveButtonToolTip()
{
if (buttonSave.Enabled)
{
toolTip.SetToolTip(buttonSave, "入力内容を保存します");
}
else
{
toolTip.SetToolTip(buttonSave, "必須項目を入力すると保存できます");
}
}

動的なツールチップは便利ですが、頻繁に内容が変わりすぎるとユーザーが混乱する場合があります。状態変化が明確な場面で使うのがよいでしょう。

8. C#ツールチップ実装時の注意点とベストプラクティス

ツールチップは便利なUI機能ですが、使い方を間違えると逆に使いにくい画面になることがあります。

ここでは、C#でツールチップを実装するときに意識したい注意点とベストプラクティスを紹介します。

8-1. 長すぎる説明文を避ける

ツールチップは短い補足説明に向いています。長すぎる文章を表示すると、読むのに時間がかかり、画面操作の邪魔になることがあります。

悪い例は次のような説明です。

C#
toolTip.SetToolTip(buttonSave, "このボタンをクリックすると、現在入力されているすべての情報がデータベースに登録され、登録後に一覧画面へ戻ります。入力内容に誤りがある場合は登録できません。");

このような長文は、画面上の説明文やヘルプ画面に分けた方がよいです。

ツールチップでは、次のように短くまとめましょう。

C#
toolTip.SetToolTip(buttonSave, "入力内容を保存します");

目安として、1〜2行程度で理解できる説明にするのがおすすめです。

8-2. ユーザーが迷いやすい箇所にだけ使う

すべてのコントロールにツールチップを付ける必要はありません。

たとえば、「OK」や「キャンセル」のように意味が明確なボタンにまで説明を付けると、かえって煩わしく感じられることがあります。

ツールチップは、次のような箇所に絞って使うと効果的です。

入力形式がわかりにくい項目、アイコンだけのボタン、専門用語を含む項目、操作結果がわかりにくいボタン、注意が必要な入力欄などです。

必要な場所にだけ使うことで、ユーザーにとって自然で使いやすい画面になります。

8-3. アクセシビリティを考慮する

ツールチップはマウス操作を前提にしていることが多いため、キーボード操作やスクリーンリーダーを使うユーザーには伝わりにくい場合があります。

重要な情報をツールチップだけで伝えるのは避けましょう。必須入力、エラー、警告などは、画面上のラベルやメッセージでも確認できるようにすることが大切です。

WPFでは、AutomationProperties.HelpTextなどを使って支援技術向けの説明を設定することもできます。

XML
<TextBox ToolTip="メールアドレスを入力してください"
AutomationProperties.HelpText="メールアドレスを入力してください" />

アクセシビリティを考慮すると、より多くのユーザーにとって使いやすいアプリケーションになります。

8-4. 画面設計と一貫性を持たせる

ツールチップの文体や表示内容は、画面全体で統一しましょう。

あるボタンでは「保存」、別のボタンでは「このボタンを押すとデータを保存することができます」のように表現がばらつくと、統一感がなくなります。

たとえば、ボタンの説明は「〜します」で統一すると読みやすくなります。

C#
toolTip.SetToolTip(buttonSave, "入力内容を保存します");
toolTip.SetToolTip(buttonDelete, "選択中のデータを削除します");
toolTip.SetToolTip(buttonRefresh, "一覧を更新します");

また、警告やエラーのツールチップでは、タイトルやアイコンの使い方も統一するとよいでしょう。

8-5. ツールチップに頼りすぎないUI設計にする

ツールチップはあくまで補助的な機能です。ツールチップがないと操作できない画面は、ユーザーにとってわかりにくいUIになっている可能性があります。

重要な操作は、ボタン名やラベルだけで意味が伝わるように設計しましょう。ツールチップは、その補足として使うのが理想です。

たとえば、ボタン名が「実行」だけでは何を実行するのかわかりにくい場合があります。この場合、ツールチップで補足するよりも、ボタン名自体を「検索実行」や「データ更新」に変えた方がよいこともあります。

ツールチップは便利ですが、画面設計そのものを改善できる場合は、まずUIの見直しを優先しましょう。

9. C#ツールチップに関するよくある質問

ここでは、C#ツールチップを実装するときによくある疑問に回答します。

Windows FormsとWPFで方法が異なる場合があるため、それぞれの特徴を理解して使い分けましょう。

9-1. ツールチップを改行して表示できますか?

はい、できます。

Windows Formsでは、文字列に\nEnvironment.NewLineを含めることで改行できます。

C#
toolTip.SetToolTip(buttonSave, "入力内容を保存します。\n保存前に内容を確認してください。");

WPFでは、TextBlockLineBreakを使う方法がわかりやすいです。

XML
<Button Content="保存">
<Button.ToolTip>
<ToolTip>
<TextBlock>
入力内容を保存します。<LineBreak/>
保存前に内容を確認してください。
</TextBlock>
</ToolTip>
</Button.ToolTip>
</Button>

長文になる場合は、折り返しや幅の指定も検討しましょう。

9-2. ツールチップの表示位置は変更できますか?

はい、変更できます。

Windows Formsでは、ToolTip.Showメソッドを使うことで、指定した位置に一時的にツールチップを表示できます。

C#
toolTip.Show("ここに説明を表示します", buttonSave, 10, 30, 3000);

この例では、buttonSaveを基準にして指定位置へ3秒間表示します。

WPFでは、ToolTipPlacementHorizontalOffsetVerticalOffsetなどを使って表示位置を調整できます。

XML
<Button Content="保存">
<Button.ToolTip>
<ToolTip Placement="Bottom"
HorizontalOffset="10"
VerticalOffset="5"
Content="保存します" />
</Button.ToolTip>
</Button>

標準の表示位置で問題ないことも多いですが、画面端で見切れる場合や、特定の場所に表示したい場合に調整するとよいでしょう。

9-3. 無効化されたコントロールにも表示できますか?

WPFでは、ToolTipService.ShowOnDisabledを使うことで表示できます。

XML
<Button Content="保存"
IsEnabled="False"
ToolTip="必須項目を入力すると保存できます"
ToolTipService.ShowOnDisabled="True" />

Windows Formsでは、無効化されたコントロールは通常マウスイベントを受け取らないため、標準の方法ではツールチップが表示されにくいです。

対処法としては、親のPanelや周囲のLabelにツールチップを設定する、無効化せずにクリック時の処理を制御する、別の説明メッセージを表示するなどの方法があります。

無効化された理由をユーザーに伝えたい場合は、ツールチップだけでなく画面上に補足文を表示することも検討しましょう。

9-4. 画像やHTMLをツールチップに表示できますか?

標準のWindows Formsツールチップでは、HTMLをそのまま解釈して表示することはできません。画像を表示したい場合も、標準機能だけでは簡単ではありません。

Windows Formsで独自の見た目を作りたい場合は、OwnerDrawを使って自分で描画する方法があります。

WPFでは、ツールチップの中にImageStackPanelなどのUI要素を配置できます。

XML
<Button Content="情報">
<Button.ToolTip>
<ToolTip>
<StackPanel>
<TextBlock FontWeight="Bold" Text="ヘルプ" />
<TextBlock Text="この機能の説明です。" />
</StackPanel>
</ToolTip>
</Button.ToolTip>
</Button>

HTMLを表示したい場合は、標準のツールチップではなく、別のポップアップUIやカスタムコントロールを検討した方がよいでしょう。

9-5. Windows FormsとWPFではどちらの方法を使うべきですか?

使用しているアプリケーションの種類に合わせて選びます。

Windows Formsアプリケーションであれば、ToolTipクラスとSetToolTipメソッドを使うのが基本です。シンプルな説明文やタイトル、アイコン付きツールチップを簡単に実装できます。

WPFアプリケーションであれば、各コントロールのToolTipプロパティを使います。XAMLで設定でき、レイアウトやデザインの自由度が高い点がメリットです。

新規開発でデザイン性や拡張性を重視する場合はWPFが向いています。一方、既存のWindows Formsアプリに補足説明を追加したい場合は、Windows FormsのToolTipを使うのが自然です。

重要なのは、開発しているUIフレームワークに合った方法で実装することです。

まとめ

C#のツールチップは、ユーザーに補足説明を表示するための便利な機能です。Windows FormsではToolTipクラスを使い、SetToolTipメソッドで各コントロールに説明文を設定します。WPFでは、各コントロールのToolTipプロパティを使って簡単に表示できます。

ツールチップが表示されない場合は、設定対象のコントロールが正しいか、表示時間や遅延設定に問題がないか、コントロールが無効化されていないか、WPFの指定方法が正しいかを確認しましょう。

また、InitialDelayAutoPopDelayReshowDelayShowAlwaysなどを使えば、Windows Formsのツールチップ表示タイミングを細かく調整できます。タイトルやアイコン、背景色、文字色、OwnerDrawを使えば、見た目のカスタマイズも可能です。

実装時は、説明文を長くしすぎず、ユーザーが迷いやすい箇所にだけ使うことが大切です。重要な情報はツールチップだけに頼らず、画面上のラベルやメッセージでも伝えるようにしましょう。

C#ツールチップを適切に使えば、画面をすっきり保ちながら、ユーザーにとってわかりやすく操作しやすいアプリケーションを作ることができます。