通过工具提示迭代

时间:2010-05-19 01:30:11

标签: c# .net winforms

伙计们,我有一个带有面板控件的窗体,在面板控件内是几个其他控件,附带了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继承的。有什么想法吗?

编辑: 好的伙计们。我可能没有详细说明我得到的答案。我的问题是,我正在采取我的面板中的所有控件并将它们移动到另一个面板。切换后,工具提示仍然连接到控件,这就是我想要的。但是,由于表单和原始面板不再存在,因此移动它们后我无法取消激活或重新激活它们。但是,我找到了一个解决方案,我将在这里发布。

4 个答案:

答案 0 :(得分:2)

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

 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实例和控件不是一对一相关的。这个例子的正确方法是:

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 :(得分:0)

编辑:好的,废弃我之前的回答。是的,ToolTip是一个组件,而不是一个控件,所以它根本不在Panel中。从您的问题来看,听起来您有一个ToolTip实例,并且您将其用于此Panel内的控件以及其他控件,对吧?在这种情况下,解决方案很简单:创建一个单独的ToolTip实例并将其用于Panel中的控件,然后直接引用它以停用它,例如。

ttPanel.Active = false;

答案 2 :(得分:0)

通常,您有一个ToolTip实例可以处理所有控件的工具提示显示。单个ToolTip实例只是表单的常规成员。只需将其Active属性设置为false即可。

答案 3 :(得分: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控件来访问工具提示。 希望这是有道理的!