ツールヒントをコントロールに追加するにはどうすればよいですか?


154

ToolTipマウスをその上に置いたときに表示するコントロールがいくつかあります。これどうやってするの?これをコード内だけでなくデザイナでも適切に実行する方法を知りたい(ToolTipツールボックスにコンポーネントがありますが、わかりません)。

これが重複していても驚くことはありませんが、より高度な特定のシナリオに関する質問しか見つけることができません。基本を知りたいのですが。



関連する古いバージョン(一般に.NETに適用):stackoverflow.com/questions/168550/…–
クリストファーカイルホートン

回答:


208

ここでは、コードでそれを行うためのあなたの記事があります

private void Form1_Load(object sender, System.EventArgs e)
{
     // Create the ToolTip and associate with the Form container.
     ToolTip toolTip1 = new ToolTip();

     // Set up the delays for the ToolTip.
     toolTip1.AutoPopDelay = 5000;
     toolTip1.InitialDelay = 1000;
     toolTip1.ReshowDelay = 500;
     // Force the ToolTip text to be displayed whether or not the form is active.
     toolTip1.ShowAlways = true;

     // Set up the ToolTip text for the Button and Checkbox.
     toolTip1.SetToolTip(this.button1, "My button1");
     toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}

3
それで、toolTip1変数がスコープから外れたかどうかは問題ではないと思いますか?
Svish

1
ToolTipすべてのフォームに1つのstatic はどうですか?
Svish

7
ボタンとチェックボックスがまだそれを参照しているので、参照されなくなったら解放されません
Rowland Shaw

2
「SetToolTip」がボタンとチェックボックスのイベントにEventHandlerを追加するため、彼らはそれを参照しています
Eduardo Wada

3
ツールチップを静的変数に入れるのは悪い考えだと思います。フォームを閉じて再度開いた場合はどうなりますか?SetTooltipは再び機能しますか?もしそうなら、閉じたフォームのハンドラーはメモリにとどまるか、正しく削除されますか?私はそれをテストするのに1分も費やしませんでした。代わりに、variabeメンバーを使用してください。
Elmue 14

138

ツールチップコントロールをツールボックスからフォームにドラッグします。名前以外のプロパティを実際に指定する必要はありません。次に、ツールチップを表示したいコントロールのプロパティで、追加したツールチップコントロールの名前で新しいプロパティを探します。デフォルトでは、カーソルがコントロールの上に置かれたときにツールチップが表示されます。


54
これを行うとき(午前2時など)は、ToolStripコントロールではなくToolTipコントロールを使用するようにしてください。
エイドリアンK

2
この答えにより、winformに単一のツールチップを追加すると、フォーム内のすべてのコントロールに独自のツールチップが与えられます。
SA 2016

シンプルでパワフル。隣のコントロールではなく、正しいコントロールにドロップしてください(午前2時など)。
Michael Stimson

40
  1. ToolTipコンポーネントをフォームに追加する
  2. ツールチップが必要なコントロールの1つを選択します
  3. プロパティグリッド(F4)を開くと、リストに "ToolTip on toolTip1"(または類似のツール)というプロパティがあります。そのプロパティに目的のツールチップテキストを設定します。
  4. 他のコントロールについても2〜3を繰り返します。
  5. できました。

ここでのトリックは、ToolTipコントロールがエクステンダーコントロールであることです。つまり、フォーム上の他のコントロールのプロパティのセットを拡張します。舞台裏では、これはSvetlozarの答えのようにコードを生成することによって達成されます。同じように機能する他のコントロールがあります(などHelpProvider)。


1
したがって、異なるテキストを持つ多くのコントロールに同じツールチップを使用できますか?
Svish

@Svish:はい、それがエクステンダーコントロールの目的です。
FredrikMörk、

ユーザーコントロールやフォーム間でも使用できますか?標準プロパティ値を使用して静的ツールヒントを作成した場合と同様です。それとも悪い習慣と見なされますか?
Svish

私はそれを試したことはなく、ToolTipの内部の仕組みもよくわかりませんが、テキストが関連付けられているコントロールへの参照を取得するため、うまくいくと思います。調べる唯一の方法。試してみてください:o)
FredrikMörk09年

まあ、私は明らかにそれを試してみます。しかし、私はメモリリークなどを見つけるのが特に得意ではありません...そして、それがメモリリークや私が知りたいことのようなものを引き起こすなら、彼は。
Svish

8

C#のツールヒントは、ほとんどすべてのUIコントロールに非常に簡単に追加できます。このためにMouseHoverイベントを追加する必要はありません。

これはそれを行う方法です

  1. ToolTipオブジェクトをフォームに追加します。フォーム全体に対して1つのオブジェクトで十分です。 ToolTip toolTip = new ToolTip();

  2. 目的のテキストを含むツールチップにコントロールを追加します。

    toolTip.SetToolTip(Button1,"Click here");


1

この方法で行いました。イベントを任意のコントロールに追加し、コントロールのタグを設定し、適切なコントロール/タグのツールチップを処理する条件を追加します。

private void Info_MouseHover(object sender, EventArgs e)
{
    Control senderObject = sender as Control;
    string hoveredControl = senderObject.Tag.ToString();

    // only instantiate a tooltip if the control's tag contains data
    if (hoveredControl != "")
    {
        ToolTip info = new ToolTip
        {
            AutomaticDelay = 500
        };

        string tooltipMessage = string.Empty;

        // add all conditionals here to modify message based on the tag 
        // of the hovered control
        if (hoveredControl == "save button")
        {
            tooltipMessage = "This button will save stuff.";
        }

        info.SetToolTip(senderObject, tooltipMessage);
    }
}

-3

コントロールのToolTipTextNeededイベントをサブスクライブして、e.TooltipTextを返すだけです。


6
これは標準のWinFormコントロールイベントではないと思います。
Dan7、2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.