2012-01-26 74 views
0

我有一個啓動時間密集型過程的按鈕。當用戶將鼠標懸停在此按鈕上時,會顯示一個工具提示,這很好。但是,在此過程重新路由到後臺線程之前(對於某些內容需要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的一部分。

回答

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 
} 
+0

感謝您的回答。但是,由於我正在使用的SDK(ComponantOne),我似乎無法找到對控件的通用ToolTip的任何引用。如果我能做到你的答案是非常好的。我已經通過設計人員設置了(功能區)按鈕的工具提示,但不清楚如何訪問實際的工具提示對象。有任何想法嗎?謝謝你的時間。 – MoonKnight

+0

您應該使用有關您正在使用的ComponentOne控件的信息更新您的問題。無論如何,爲RibbonButton.Tooltip屬性設置「null」值或爲RibbonButton.Enabled屬性設置「false」值應避免顯示工具提示(我不知道實際的C1工具提示引擎體系結構,但我相信不需要訪問ToolTip對象直接在你的案例中)。 – DmitryG

1

您必須使用您添加到項目中的ToolTip控件。像ToolTip.Active可能工作。

從上面的鏈接:

與活動屬性,您可以啓用或禁用 提示文本的顯示對於具有本 特定的工具提示組件指定文字的所有控件。儘管可以創建多個ToolTip組件 並將其分配給表單,但將「活動」屬性設置爲 false只會影響當前的工具提示。

0

如果UI線程正在工作,那麼如果您找到隱藏工具提示的方法,它將不會發生,直到UI線程再次釋放時纔會發生。

您的解決方案就是您始終知道的,將非UI處理移至非UI線程。

+0

這不是對上述問題的回答。 – MoonKnight

+0

@Killercam我認爲他試圖隱藏按鈕被點擊後的工具提示,而不是完整的顯示之前。事實上他說懸停時的工具提示是好的,似乎支持這種信念。如果我們因此假設他試圖隱藏點擊事件中的工具提示,並且他也在該點擊事件中做了10秒的工作,則任何UI更改都不會發生,直到他們爲時已晚。因此,他的問題的答案是,考慮到他的限制,這是不能回答的。 – Servy

+0

你在我想要的東西中正確無誤。可以辦到。只是由於在UI線程上進行了一些處理的事實並不意味着我不能使用同一個線程來更新/重繪一些圖形等。爲了說明我可以在UI線程上觸發一些艱苦的工作 - > '做一些辛苦的工作......'然後中途 - >'myControl.Update()',這將重繪'myControl';這是以我的課程處理爲代價的。感謝您的時間無節制,非常感謝... – MoonKnight

相關問題