我正在使用Devexpress PopupMenu來顯示右鍵單擊。現在我想知道關閉這個彈出菜單之前,就像Windows ContextMenu Closing事件一樣。Devexpress PopupMenu像Windows上下文菜單關閉事件關閉事件
PopupMenu有特寫事件,但在關閉它之後觸發。其實我的目標是根據情況處理何時關閉彈出式菜單。
無論如何,我能實現它嗎?
我正在使用Devexpress PopupMenu來顯示右鍵單擊。現在我想知道關閉這個彈出菜單之前,就像Windows ContextMenu Closing事件一樣。Devexpress PopupMenu像Windows上下文菜單關閉事件關閉事件
PopupMenu有特寫事件,但在關閉它之後觸發。其實我的目標是根據情況處理何時關閉彈出式菜單。
無論如何,我能實現它嗎?
我發現這個previous issue - 有人試圖用XtraBars.PopupMenu做同樣的事情,並且必須創建BarManager的子類並重寫BarSelectionInfo.ClosePopup事件(也許你可以將它適配到你的場景中)。示例項目附加到問題中,並演示如何在彈出式菜單中選擇日期並保持菜單處於打開狀態。
編輯:
下面是完整的相關代碼 - 只要彈出窗口即將關閉,ClosePopup火災,按照文檔爲BarManager:
當您將BarManager窗體上在設計時,所有控件 都發布PopupContextMenu擴展器屬性( 屬性窗口中的標題看起來像'barManager1上的PopupContextMenu')
您可以使用此屬性分配上下文菜單並實現覆蓋。
在這個例子中,你從基於某些條件的方法返回(取消事件) - 在這種情況下,條的標籤在表單中的事件上設置爲False並在覆蓋中選中。
private void barEditItem1_EditValueChanged(object sender, EventArgs e) {
popupMenu1.Manager.Bars[0].Tag = false;
}
using DevExpress.XtraBars;
using DevExpress.XtraBars.ViewInfo;
public class MyBarManager : BarManager {
protected override BarSelectionInfo CreateSelectionInfo() {
return new MyBarSelectionInfo(this);
}
}
public class MyBarSelectionInfo : BarSelectionInfo {
public MyBarSelectionInfo(BarManager manager)
: base(manager) {
}
public override void ClosePopup(IPopup popup) {
if (!(bool)Manager.Bars[0].Tag) {
Manager.Bars[0].Tag = true;
return;
}
base.ClosePopup(popup);
}
}
我檢查了文檔,你是對的 - 沒有事件存在你以後的事情。 +1爲好問題。我是否正確地說,簡而言之,你想阻止用戶關閉contextmenu直到你的代碼允許它? –
嗨DeeMac, 是的,我想要的一樣。但現在無法做到。我也試圖檢查所有的虛擬成員,但沒有成功。 –