2012-03-19 52 views
69

LabelにはHintまたはToolTipまたはHovertextという特性がありません。したがって、Labelにマウスで近づいたときのヒント、ツールチップ、またはホバーテキストを表示するための推奨方法は何ですか?C#Winformsのラベルにヒントやツールチップを追加するにはどうすればよいですか?

+0

(http://stackoverflow.com/questions/873175/displaying-tooltip-on-mouse-hover-of-a-text)[テキストのマウスホバーにツールチップを表示する]の可能な重複 –

答えて

89

まずコントロールにToolTipコントロールを追加する必要があります。次に、他のコントロール用に表示するテキストを設定することができます。

enter image description here

+13

うわ、それは畳み込まれた/反直観的に思われる、ヤック。 –

+0

@ClayShannonそれはそうだと思います。しかし、デザインはややエレガントです。いくつかのコントロールはツールのヒントを望んでいません。このようにして、 'ToolTip'コントロールはマウスオーバーイベントのために自身を登録し、発生したイベントに応じて適切なテキストを表示することができます。これはすべてバックグラウンドで起こります。 – Yuck

+1

私は同意します。また、複数のコントロールに対して同じツールヒントコントロールを使用することもできます。 –

18
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip(); 
ToolTip1.SetToolTip(Label1, "Label for Label1"); 
69
yourToolTip = new ToolTip(); 
//The below are optional, of course, 

yourToolTip.ToolTipIcon = ToolTipIcon.Info; 
yourToolTip.IsBalloon = true; 
yourToolTip.ShowAlways = true; 

yourToolTip.SetToolTip(lblYourLabel,"Oooh, you put your mouse over me."); 
+7

動的ツールチップに非常に便利です、ありがとうございます! – Pisu

+0

ツールチップを破棄するのを忘れないでください。マウスオーバーするたびにこれを行うと、GCが古いツールチップのファイナライザを呼び出すまでハンドルがリークします。 – drake7707

11

それをするだけで、別の方法:ここで

toolTip1命名されToolTipコントロールを追加した後、デザイナーを示すスクリーンショットです。

Label lbl = new Label(); 
new ToolTip().SetToolTip(lbl, "tooltip text here"); 
+0

私はこの考えが好きです。しかし、あなたは2行目の "ラベル"ではなく "lbl"という意味ですか? –

+1

はい、ありがとうございます。良い目元。 – ac0de

4

ちょうど私の考えを共有する...

私はLabelクラスを継承するカスタムクラスを作成しました。私は、TooltipクラスとパブリックプロパティTooltipTextとして割り当てられたプライベート変数を追加しました。次に、MouseEnterデリゲートメソッドを与えました。これは、複数のLabelコントロールを扱う簡単な方法であり、各LabelコントロールのTooltipコントロールの割り当てについて心配する必要はありません。

フォームまたはユーザーコントロールのInitializeComponentメソッド(デザイナーコード)で
public partial class ucLabel : Label 
    { 
     private ToolTip _tt = new ToolTip(); 

     public string TooltipText { get; set; } 

     public ucLabel() : base() { 
      _tt.AutoPopDelay = 1500; 
      _tt.InitialDelay = 400; 
//   _tt.IsBalloon = true; 
      _tt.UseAnimation = true; 
      _tt.UseFading = true; 
      _tt.Active = true; 
      this.MouseEnter += new EventHandler(this.ucLabel_MouseEnter); 
     } 

     private void ucLabel_MouseEnter(object sender, EventArgs ea) 
     { 
      if (!string.IsNullOrEmpty(this.TooltipText)) 
      { 
       _tt.SetToolTip(this, this.TooltipText); 
       _tt.Show(this.TooltipText, this.Parent); 
      } 
     } 
    } 

、カスタムクラスにあなたのLabelコントロールを再割り当て:

また
this.lblMyLabel = new ucLabel(); 

は、デザイナコード内のプライベート変数の参照を変更します。

private ucLabel lblMyLabel; 
+0

フォームビジュアルデザイナーを使用してユーザーが何かを変更するたびにデザイナーコードが再生成されますか? – ensisNoctis

関連する問題