有沒有辦法顯示一個ContextMenu
並阻止進一步的執行,直到一個項目被選中?特別是,我想要獲得類似於ShowDialog()
的行爲,但要獲得ContextMenu
的行爲。有沒有辦法顯示「阻塞」WinForms的ContextMenu?
的直接方法行不通:
ContextMenu cm = new ContextMenu();
cm.MenuItems.Add("1", (s,e) => {value = 1;});
cm.Show(control, location);
因爲Click
回調不從Show()
直接調用,而是在當消息循環處理click事件之後的一些點。
如果你不走運,menu
在處理事件之前就會被垃圾收集,在這種情況下,事件就會悄無聲息地丟失。 (意思是這樣,你不能真正使用局部變量爲ContextMenu
秒)
這似乎是工作,但感覺「不乾淨」:
using (ContextMenu cm = new ContextMenu()) {
cm.MenuItems.Add("1", (s,e) => {value = 1;});
cm.Show(control, location);
Application.DoEvents();
}
有沒有更好的辦法?
將您現有的Show()調用後的任何代碼移動到Collapse事件的事件處理函數中。或者使用一個窗體,這樣你可以使用ShowDialog。 –