Devexpress PopupMenu Closing 事件,如 Windows Contextmenu Closin

本文关键字:Windows Contextmenu Closin PopupMenu Closing 事件 Devexpress | 更新日期: 2023-09-27 18:34:38

我正在使用Devexpress PopupMenu在右键单击时显示。现在我想知道在关闭此弹出菜单之前,就像Windows上下文菜单关闭事件一样。

PopupMenu 具有特写事件,但在关闭后会触发。实际上,我的目标是根据情况处理何时关闭弹出菜单。

有没有,我能做到?

Devexpress PopupMenu Closing 事件,如 Windows Contextmenu Closin

我发现了之前的问题 - 有人试图使用 XtraBars.PopupMenu 做同样的事情,并且必须创建 BarManager 的子类并覆盖 BarSelectionInfo.ClosePopup 事件(也许您可以根据自己的情况进行调整(。示例项目附加到问题,并演示了在弹出菜单中选择日期和保持打开状态的菜单。

编辑

这是完整性的相关代码 - 每当弹出窗口即将关闭时,ClosePopup 都会触发,根据 BarManager 的文档:

在设计时将 BarManager 放置在窗体上时,所有控件 发布 PopupContextMenu 扩展程序属性(其标题在 属性窗口看起来像"栏管理器1上的弹出上下文菜单"(

可以使用此属性分配上下文菜单并实现替代。

在此示例中,您根据某些条件从方法返回(取消事件( - 在本例中,Bar 的 Tag 在窗体中的事件上设置为 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);
            }
        }