Windows フォームを使用してボタンの上にツールチップを表示するにはどうすればよいですか?
9 に答える
ToolTip は、単一のフォーム上の複数の要素のツール ヒントの表示を処理する単一のWinForms コントロールです。
ボタンの名前が MyButton だとします。
- ToolTip コントロール (Windows フォーム ツールボックスの [コモン コントロール] の下) をフォームに追加します。
- 名前を付けます - MyToolTip と言ってください
- MyButton の "Tooltip on MyToolTip" プロパティ (ボタン プロパティ グリッドの [その他] の下) を、ホバーしたときに表示されるテキストに設定します。
ツールチップは、カーソルをボタンの上に置くと自動的に表示されますが、プログラムで表示する必要がある場合は、
MyToolTip.Show("Tooltip text goes here", MyButton);
コードでツールチップを表示し、
MyToolTip.Hide(MyButton);
また消えるように。
フォーム デザイナーの使用:
- ToolTip コントロールをツールボックスからフォームにドラッグします。
- ツール ヒントを表示するコントロールのプロパティを選択します。
- プロパティ「ToolTip on toolTip1」を見つけます (デフォルト名を変更した場合、名前は toolTip1 ではない可能性があります)。
- プロパティのテキストを、表示するツール ヒント テキストに設定します。
次の呼び出しを使用して、プログラムでツール ヒントを設定することもできます。
this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");
ToolTip クラスを使用できます。
例:
private void Form1_Load(object sender, System.EventArgs e)
{
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.Button1, "Hello");
}
.NET フレームワークは ToolTip クラスを提供します。それらのいずれかをフォームに追加し、ツールチップが必要な各アイテムの MouseHover イベントで、次のようにします。
private void checkBox1_MouseHover(object sender, EventArgs e)
{
toolTip1.Show("text", checkBox1);
}
Tagプロパティにテキストを遅延してコンパクトに格納する
少し怠け者で、コントロールのTagプロパティを他の目的で使用しない場合は、それを使用してツールヒント テキストを保存し、次のようにすべてのコントロールにMouseHoverイベント ハンドラーを一度に割り当てることができます。
private System.Windows.Forms.ToolTip ToolTip1;
private void PrepareTooltips()
{
ToolTip1 = new System.Windows.Forms.ToolTip();
foreach(Control ctrl in this.Controls)
{
if (ctrl is Button && ctrl.Tag is string)
{
ctrl.MouseHover += new EventHandler(delegate(Object o, EventArgs a)
{
var btn = (Control)o;
ToolTip1.SetToolTip(btn, btn.Tag.ToString());
});
}
}
}
この場合、 Tagプロパティに文字列を持つすべてのボタンにMouseHoverイベントが割り当てられます。コンパクトに保つために、MouseHoverイベントはラムダ式を使用してインラインで定義されます。イベントでは、ボタンをホバーすると、そのタグテキストがツールチップに割り当てられて表示されます。
確かに、mousehover イベントを処理して、ツール ヒントを表示するように指示するだけです。t は、以下を使用してグローバルまたはコンストラクターで定義されたツールチップです。
ToolTip t = new ToolTip();
次に、イベント ハンドラー:
private void control_MouseHover(object sender, EventArgs e)
{
t.Show("Text", (Control)sender);
}