Windowsフォームを使用してボタンの上にツールチップを表示する


回答:


222

ToolTipは実際には、単一のフォーム上の複数の要素のツールヒントの表示を処理するWinFormsコントロールです。

ボタンの名前がMyButtonだとします。

  1. (Windowsフォームツールボックスの[コモンコントロール]の下にある)ToolTipコントロールをフォームに追加します。
  2. 名前を付けます-MyToolTipと言います
  3. MyButtonの "Tooltip on MyToolTip"プロパティ(ボタンプロパティグリッドの[Misc]の下)を、マウスオーバーしたときに表示されるテキストに設定します。

カーソルをボタンの上に置くと、ツールチップが自動的に表示されますが、プログラムで表示する必要がある場合は、

MyToolTip.Show("Tooltip text goes here", MyButton)

コードでツールチップを表示し、MyToolTip.Hide(MyButton)でツールチップを非表示にします。


いいですが、質問:フォームに複数のボタンがある場合、さらにツールチップが必要ですか、または同じツールチップに複数の説明とボタンを設定できますか?
ghiboz 2014

8
フォームに必要なToolTipコントロールは1つだけです。ボタンごとに異なるヘルプテキストを使用できます(これが、「MyToolTipのTooltip」が、関連付けられたコントロールのプロパティであり、ToolTipコントロール自体のプロパティではないためです)
Dylan Beattie

2
最も単純なケースでは、フォームにツールチップを追加するのが最善の方法です。問題:カスタムコントロールのデザイン時に、親フォームへの参照がありません。解決策:コントロールにツールチップオブジェクトを作成します。ToolTipオブジェクトを必ずしもフォームに添付されていると考えないでください。
ステフェイン・グーリッホン

93

フォームデザイナーの使用:

  • ToolTipコントロールをツールボックスからフォームにドラッグします。
  • ツールチップを表示するコントロールのプロパティを選択します。
  • プロパティ 'ToolTip on toolTip1'を見つけます(デフォルトの名前を変更した場合、名前はtoolTip1ではない可能性があります)。
  • プロパティのテキストを、表示するツールチップのテキストに設定します。

次の呼び出しを使用して、プログラムでツールチップを設定することもできます。

this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");

45

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");
}

1
自動生成されたVSコードと直接統合されるため、これは完璧なソリューションです。ありがとう:)
anon58192932 2012年

@DaveKありがとう。すべてのツールチップを1か所で定義できるため、この方法の方が優れています
フェデテカ2017

ありがとう。この質問に対する最良かつ最も簡単な答え。
Najeeb

さらに短い:new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf

6

デフォルトのツールチップの場合、これを使用できます-

System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.textBox1, "Hello world");

ツールチップメッセージにフォーマットが必要な場合は、カスタマイズされたツールチップを使用することもできます。これは、フォームをカスタムフォーマットして作成し、コントロールのマウスホバーイベントのツールチップダイアログとして使用できます。詳細については、次のリンクを確認してください-

http://newapputil.blogspot.in/2015/08/create-custom-tooltip-dialog-from-form.html


5

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イベントはラムダ式を使用してインラインで定義されます。イベントでは、ホバーされたボタンのタグテキストがツールチップに割り当てられて表示されます。


4

.NETフレームワークは、ToolTipクラスを提供します。それらの1つをフォームに追加し、ツールチップを表示する各項目のMouseHoverイベントで、次のようなことを行います。

    private void checkBox1_MouseHover(object sender, EventArgs e)
    {
        toolTip1.Show("text", checkBox1);
    }

4
private void Form1_Load(object sender, System.EventArgs e)
{
    ToolTip toolTip1 = new ToolTip();
    toolTip1.AutoPopDelay = 5000;
    toolTip1.InitialDelay = 1000;
    toolTip1.ReshowDelay = 500;
    toolTip1.ShowAlways = true;
    toolTip1.SetToolTip(this.button1, "My button1");
    toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}

4
このコードスニペットは問題を解決する可能性がありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。
secelite

0

DaveKの回答に基づいて、コントロール拡張機能を作成しました。

public static void SetToolTip(this Control control, string txt)
{
    new ToolTip().SetToolTip(control, txt);
}

次に、任意のコントロールのツールチップを1行で設定できます。

this.MyButton.SetToolTip("Hello world");

-4

もちろん、マウスホバーイベントを処理して、ツールチップを表示するように指示するだけです。tは、グローバルまたはコンストラクターで以下を使用して定義されたツールチップです。

ToolTip t = new ToolTip();

次にイベントハンドラ:

private void control_MouseHover(object sender, EventArgs e)
{
  t.Show("Text", (Control)sender);
}

2
WindowsフォームでToolTipコントロールを使用する方法ではないため、不満に思ったと思います。フォームに必要なコントロールは1つだけで、すべてのコントロールのヒントが表示されます。他の応答のコードを参照してください。
ジュリアンメルビル

1
説明がコードと一致していないと思います。説明で説明したように表示し、コードで初期化しました。私の悪い。:P
09年

2
@ julianz実際、これは、状態に応じて必要に応じて動的にすることができる特殊なツールチップを使用するのに適しています(もちろん、作成ではありません-許してください、私はそれをすべて1つのブロックに収めようとしていました)。同様の静脈... yshuditeluとDylan Beattieは、インスタンス化されていなくても似ていました。
揚げる
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.