2013-10-10 36 views
5

我正在使用Devexpress PopupMenu來顯示右鍵單擊。現在我想知道關閉這個彈出菜單之前,就像Windows ContextMenu Closing事件一樣。Devexpress PopupMenu像Windows上下文菜單關閉事件關閉事件

PopupMenu有特寫事件,但在關閉它之後觸發。其實我的目標是根據情況處理何時關閉彈出式菜單。

無論如何,我能實現它嗎?

+0

我檢查了文檔,你是對的 - 沒有事件存在你以後的事情。 +1爲好問題。我是否正確地說,簡而言之,你想阻止用戶關閉contextmenu直到你的代碼允許它? –

+0

嗨DeeMac, 是的,我想要的一樣。但現在無法做到。我也試圖檢查所有的虛擬成員,但沒有成功。 –

回答

2

我發現這個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); 
      } 
     }