2009-11-03 107 views
3

我有一個自定義控件(C#,visual studio)。我想在mousehover事件上顯示一個工具提示。Mousehover,顯示多次的工具提示

但是,不管我做什麼,它要麼永遠不會顯示或有機會多次顯示。

我認爲這將是簡單的:

private void MyControl_MouseHover(object sender, EventArgs e) 
{ 
    ToolTip tT = new ToolTip(); 

    tT.Show("Why So Many Times?", this); 
} 

但是,這是行不通的。我嘗試了一堆東西,但似乎無法讓它工作。我希望將工具提示作爲組件的一部分,因爲我想從中訪問私有字段以供顯示。

感謝所有幫助

回答

7

你試過實例工具提示在構造函數,並顯示在鼠標懸停呢?

public ToolTip tT { get; set; } 

public ClassConstructor() 
{ 
    tT = new ToolTip(); 
} 

private void MyControl_MouseHover(object sender, EventArgs e) 
{ 
    tT.Show("Why So Many Times?", this); 
} 
+0

這工作。 但是,我試過: 私人工具提示tT = new ToolTip(); 以外的mousehover事件,並沒有工作。 爲什麼它在構造函數中實例化而不是在聲明時實例化? – EatATaco 2009-11-03 16:38:51

+0

其實,我只是試圖再次這樣做,它的工作。不知道我第一次搞砸了什麼。再次感謝。 – EatATaco 2009-11-03 16:40:16

+0

@EatATaco很高興能幫到你! – Joseph 2009-11-03 16:43:04

1

每當鼠標移過控件時,都會觸發MouseHover。因此,每當事件發生時,您都會創建一個新的工具提示。這就是爲什麼你看到這個小部件的多個實例。試試Joseph的答案

1

只需使用設計器添加工具提示即可生成與問題中代碼完全不同的代碼。

Form1.Designer.cs:(私有變量移到類的頂部可讀性)

partial class Form1 
{ 
    private System.ComponentModel.IContainer components = null; 
    private System.Windows.Forms.Label label1; 
    private System.Windows.Forms.ToolTip toolTip1; 

    // ... 

    private void InitializeComponent() 
    { 
     this.components = new System.ComponentModel.Container(); 
     this.label1 = new System.Windows.Forms.Label(); 
     this.toolTip1 = new System.Windows.Forms.Tooltip(this.components); 

     // ... 

     this.toolTip1.SetToolTip(this.label1, "abc"); 

     // ... 
    } 
}

我敢肯定,你可以只提取工具提示和容器的東西進入你的組件。

+0

感謝您的回答。 – 2009-11-30 02:45:05

0

閱讀MSDN它的全部!

你可以嘗試另一種解決方案:


private System.Windows.Forms.ToolTip toolTip1; 

private void YourControl_MouseHover(object sender, EventArgs e) 
{ 
    toolTip1 = new System.Windows.Forms.ToolTip(); 
    this.toolTip1.SetToolTip(this.YourControl, "Your text here :) "); 
    this.toolTip1.ShowAlways = true; 
} 

希望我幫助