C# 遍历工具提示

C# 遍历工具提示,c#,.net,winforms,C#,.net,Winforms,伙计们,我有一个带有面板控件的windows窗体,在面板控件内还有几个附加了System.windows.Forms.Tooltip的控件。如何迭代每个工具提示并将工具提示的活动属性设置为false?与其他控件不同,工具提示实际上不是控件。所以我有这个: foreach (System.Windows.Forms.Control ctrl in this.pnlControl.Controls) { if (ctrl.Name.StartsWith("tt")) // since all

伙计们,我有一个带有面板控件的windows窗体,在面板控件内还有几个附加了System.windows.Forms.Tooltip的控件。如何迭代每个工具提示并将工具提示的活动属性设置为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;
    }
}
但这并不奏效。由于工具提示控件未从System.Windows.Forms.control继承,因此它会收到一个错误。有什么想法吗

编辑:
好的,伙计们。我可能没有深入到足够的细节来得到我需要的答案。我的问题是,我将面板中的所有控件移动到另一个面板。一旦它们被切换,工具提示仍然附加到控件上,这就是我想要的。但是,一旦我移动了它们,我就没有办法取消激活或重新激活它们,因为表单和原始面板不再存在。但是,我找到了一个解决方案,我将在这里发布。

编辑:好的,放弃我以前的答案。是的,工具提示是一个组件,而不是控件,因此它实际上根本不在面板中。从您的问题来看,听起来您有一个工具提示实例,您将其用于此面板内的控件以及其他控件,对吗?在这种情况下,解决方案很简单:创建一个单独的工具提示实例,并将其用于面板中的控件,然后直接引用它以停用它,例如

ttPanel.Active = false;

通常,您只有一个工具提示实例,用于处理所有控件的工具提示的显示。该工具提示实例只是表单的常规成员。只需将其活动属性设置为false。

如何为两个按钮添加工具提示?正确的方法不是以这种方式创建两个工具提示实例:

 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");
要删除按钮2的工具提示,请使用:

tt1.SetToolTip(button2,string.Empty);
对于您的情况,我们可以使用

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

好的,我所做的是创建一个从控件继承的新类,如下所示:

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个工具提示。最后,我将此控件添加到面板中。完成所有这些之后,我可以稍后通过遍历每个控件并查找ToolTimaster控件来访问工具提示。
希望这有意义

问题是,它不是。工具提示显然不被视为控件。您通常如何访问或创建它们?我已经有一段时间没有使用WinForms了,所以记不清工具提示是如何工作的。tt.Active将影响工具提示实例设置为的其他控件。