2013-10-10 37 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); 
      } 
     }