Devexpress PopupMenu关闭事件,如Windows Contextmenu Closing事件

Roh*_*ash 5 c# devexpress popupmenu winforms

我正在使用Devexpress PopupMenu在右键单击显示.现在我想在关闭这个弹出菜单之前知道,就像Windows ContextMenu Closing事件一样.

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

无论如何,我能实现吗?

Jay*_*cee 2

我发现了上一个问题- 有人尝试使用 XtraBars.PopupMenu 做同样的事情,并且必须创建 BarManager 的子类并覆盖 BarSelectionInfo.ClosePopup 事件(也许您可以根据您的场景调整它)。该示例项目附加到该问题中,并演示了在弹出菜单中选择日期以及菜单保持打开状态。

编辑

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

当您在设计时将 BarManager 放置在窗体上时,所有控件都会发布 PopupContextMenu 扩展程序属性(其在“属性”窗口中的标题看起来像“PopupContextMenu on barManager1”)

您可以使用此属性分配上下文菜单并实现覆盖。

在示例中,您根据某些条件从方法返回(取消事件) - 在这种情况下,在表单中的事件上,条形图的标记设置为 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);
            }
        }
Run Code Online (Sandbox Code Playgroud)