2011-02-13 100 views
2

我有一個winform ContextMenuStrip,它爲所有ToolStripMenuItem設置了ToolTipText。子菜單下拉菜單隱藏菜單項的工具提示

其中一個菜單項「插入操作」具有關聯的ToolStripDropDown子菜單。當鼠標移動到插入操作時,會自動顯示下拉菜單,並顯示與插入操作關聯的工具提示,但會將其推送到ContextMenuStrip和下拉菜單後面的背景。

在這裏看到了問題的一個畫面:http://www.screencast.com/t/GZkeBNcU

我曾嘗試以編程方式重新選擇子菜單打開後插入操作,但工具提示不會在上面重新顯示。

任何想法?

或者,是否有一種方法只在點擊時顯示插入動作的子菜單(而不是在鼠標移過它時自動進行)?我想這應該有一個設置,但一直沒能找到它。

感謝您的幫助。

+0

你可以用工具提示爲零件添加示例代碼嗎? – Crimsonland

+0

我使用可用於ToolStripMenuItem的內置工具提示,因此除了設置菜單項的ToolTipText&AutoToolTip(false)屬性並將ContextMenuStrip的ShowItemToolTips屬性設置爲true之外,沒有特殊的工具提示代碼。 – Governor

+0

你確定這種行爲是你想要的嗎?我的直覺告訴我,爲每個菜單項添加大量幫助信息似乎有點混亂...... – Pedery

回答

1

好吧,這不是非常優雅,所以忍受着我。

似乎ToolTipText最初是在頂部繪製的,但是一旦下一個ToolStripMenuItems加載(在您的案例中由「插入動作」引起的那些),兩組MenuStrips都會在ToolTipText上方找到它們。所以,我的動機是強制ToolTipText在新的MenuStrip加載後出現。

所以,首先,我爲DropTownStripMenuItem添加了一個DropDownOpened處理函數,它將被稱爲「Insert Action ...」MenuItem。

然後,我添加以下代碼

private void myToolStripMenuItem_DropDownOpened(object sender, EventArgs e) 
{ 
    myToolStripMenuItem.Visible = false; 
    myToolStripMenuItem.Visible = true; 
    myToolStripMenuItem.ToolTipText = "Tooltip info that you want to see!"; 
} 

這樣做是對的子菜單可以載入等待,切換​​myToolStripMenuItem的可見性(這是在這一切的醜陋的部分),並重置ToolTipText強制它在加載所有內容之後顯示,並且在所有內容之上顯示。

但是,如果您試圖將鼠標懸停並離開兩次或更多次,則如果這樣做會導致文本閃爍。只用這個代碼給它一個鏡頭,你會明白我的意思。所以,您必須將ToolTipText重置爲空字符串。當同一個MenuItem的DropDownClosed事件觸發時,我這樣做了。

private void myToolStripMenuItem_DropDownClosed(object sender, EventArgs e) 
{ 
    myToolStripMenuItem.ToolTipText = ""; 
} 

現在,ToolTipText正好出現在何時何地,我們希望它不會閃爍。

注意:此方法將導致ToolTipText花費一點點時間來顯示比正常。這當然是因爲代碼等待下載菜單加載。此外,切換myToolStripMenuItem.Visible偶爾會在菜單中導致閃爍。不過,我覺得這比顯示一個你看不清的ToolTipText要好得多。