如何以编程方式结束按钮工具提示显示

时间:2012-01-26 16:01:45

标签: c# winforms button tooltip

我有一个启动时间密集型过程的按钮。当用户将鼠标悬停在此按钮上时,会显示一个工具提示,这很好。但是,在此过程重新路由到后台线程之前(对于某些事情发生10秒左右),工具提示将显示为半透明。我知道这是一个糟糕的编码,它应该尽快放到非UI线程上,但这就是现在的方式......

我的问题是,我怎样才能获得对按钮工具提示对象的引用,以便我可以使它不可见?我设想它看起来像:

ToolTip someTT = Button.ToolTip; // This only gets or set the tool tip text.
someTT.Active = false;
someTT.Dispose(); // As a last resort.

对不起,伙计们,我知道这是一个令人作呕的人。

编辑:该按钮属于ComponantOne RibbonButton - 作为Studio for WinForms的一部分输入。

3 个答案:

答案 0 :(得分:2)

通常,当您使用ToolTip时,可以在Form.InitializeComponent()方法中找到以下代码:

this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.button1 = new System.Windows.Forms.Button();
//...
this.toolTip1.SetToolTip(this.button1, "Tooltip for button1");

因此,您可以使用相同的方法禁用特定按钮的工具提示:

this.toolTip1.SetToolTip(this.button1, null);

您还可以在启动后台线程时禁用按钮。这也避免了此按钮上方不必要的工具提示:

void button1_Click(object sender, EventArgs e) {
    toolTip1.Hide(button1);
    button1.Enabled = false;
    //start the background thread here
}

答案 1 :(得分:1)

您必须使用添加到项目中的ToolTip控件。像ToolTip.Active之类的东西可能有用。

从上面链接:

  

使用Active属性,您可以启用或禁用显示   具有由此指定的文本的所有控件的工具提示文本   特定的ToolTip组件。虽然有多个ToolTip组件   可以创建并分配给表单,将Active属性设置为   false仅影响当前的工具提示。

答案 2 :(得分:0)

如果UI线程正在工作,那么如果你找到隐藏工具提示的方法就无所谓了,在UI线程再次释放之前它仍然不会发生。

您的解决方案就是您一直都知道的,将非UI处理移动到非UI线程。