2010-05-19 50 views
1

夥計們,我有一個帶有面板控件的窗體窗體,面板控件內部還有幾個其他控件,並附帶了一個System.Windows.Forms.Tooltip。我如何遍歷每個工具提示並將工具提示的Active屬性設置爲false?與其他控件不同,工具提示實際上不是控件。所以我有這個:通過工具提示迭代

foreach (System.Windows.Forms.Control ctrl in this.pnlControl.Controls) 
{ 
    if (ctrl.Name.StartsWith("tt")) // since all my tooltip names start with 'tt' 
    { 
     System.Windows.Forms.ToolTip TipControl=(System.Windows.Forms.ToolTip)ctrl; 

     TipControl.Active=false; 
    } 
} 

雖然這不起作用。它會得到一個錯誤,因爲ToolTip控件不是從System.Windows.Forms.Control繼承的。有任何想法嗎?編號: 好吧,夥計們。我可能沒有詳細得到我需要的答案。我的問題是,我正在將我的面板中的所有控件移到另一個面板。一旦它們被切換,工具提示仍然附加到控件,這是我想要的。但是,由於表單和原始面板不再存在,所以一旦移動它們,我就無法取消或重新激活它們。但是,我找到了一個我將在這裏發佈的解決方案。

回答

2

如何添加兩個按鈕的工具提示?正確的做法是不以這種方式創建工具提示的兩個實例:

ToolTip tt1 = new ToolTip(); //or you can create one in the designer 
tt1.ToolTipTitle = "test"; 
tt1.SetToolTip(button1, "caption1"); 
ToolTip tt2 = new ToolTip(); 
tt2.ToolTipTitle = "test2"; 
tt2.SetToolTip(button2, "caption2"); 

請記住,工具提示實例和控制並不是一個一對一的關聯。在這個例子中正確的做法是:

ToolTip tt1 = new ToolTip(); //or you can create one in the designer 
tt1.ToolTipTitle = "test"; 
tt1.SetToolTip(button1, "caption1"); 
tt1.SetToolTip(button2, "caption2"); 

要刪除BUTTON2的提示,使用方法:

tt1.SetToolTip(button2,string.Empty); 

對於你的情況,我們可以使用

foreach(Control c in this.Controls) 
{ 
    tt.SetToolTip(c,string.Empty); 
} 
+1

或只是'tt.Active = false;' – heavyd 2010-05-19 05:25:13

+0

tt.Active會影響ToolTip實例設置的其他控件。 – 2010-05-19 05:31:38

0

編輯:好吧,取消我以前的答案。是的,工具提示是一個組件,而不是控件,所以它實際上並不在面板中。從你的問題,聽起來你有一個工具提示實例,你用它來控制這個面板以及其他控件,對嗎?在這種情況下,解決方案很簡單:創建一個單獨的ToolTip實例,並將其用於面板中的控件,然後直接引用它以停用它,例如。

ttPanel.Active = false; 
+0

問題是,它不是。工具提示顯然不被視爲控制 – Icemanind 2010-05-19 02:02:55

+0

您通常如何訪問它們或創建它們?我有一段時間沒有完成WinForms,所以不記得工具提示是如何工作的。 – EMP 2010-05-19 02:08:12

+0

我相信這是一個組件吧? – Reddog 2010-05-19 03:30:06

0

通常情況下,您有一個ToolTip實例來處理所有控件的工具提示的顯示。該單個ToolTip實例只是您表單的常規成員。只需將它的Active屬性設置爲false即可。

0

好吧我所做的是創建一個從Control繼承的新類,如下所示:

public class TooltipMaster : System.Windows.Forms.Control 
{ 
    private System.Windows.Forms.ToolTip m_tooltip1; 
    private System.Windows.Forms.ToolTip m_tooltip2; 
    private System.Windows.Forms.ToolTip m_tooltip3; 
    private System.Windows.Forms.ToolTip m_tooltip4; 

    public System.Windows.Forms.ToolTip ToolTip1 { 
     get { return m_tooltip1; } 
     set { m_tooltip1 = value; } 
    } 
    public System.Windows.Forms.ToolTip ToolTip2 { 
     get { return m_tooltip2; } 
     set { m_tooltip2 = value; } 
    } 
    public System.Windows.Forms.ToolTip ToolTip3 { 
     get { return m_tooltip3; } 
     set { m_tooltip3 = value; } 
    } 
    public System.Windows.Forms.ToolTip ToolTip4 { 
     get { return m_tooltip4; } 
     set { m_tooltip4 = value; } 
    } 
} 

然後我在我的主窗體的Load事件中創建了這個類的一個實例。然後,我只是將我的4個工具提示中的每一個分配給這個類中的4個工具提示。最後,我將此控件添加到我的面板。做完所有這些之後,我可以稍後通過遍歷每個控件並查找TooltipMaster控件來訪問工具提示。 希望這是有道理的!