Devexpress弹出菜单的关闭事件类似于Windows上下文菜单的关闭事件。

5
我正在使用Devexpress PopupMenu来在右键单击时显示。现在我想在关闭此弹出菜单之前知道,就像Windows ContextMenu Closing事件一样。
PopupMenu有Closeup事件,但这是在关闭后触发的。实际上,我的目标是根据情况处理何时关闭弹出菜单。
有没有什么方法可以实现?

我已经查阅了文档,你是正确的 - 没有适合你要求的事件。对于好问题点赞。简而言之,你想防止用户关闭上下文菜单,直到你的代码允许它,我的理解是正确的吗? - user1017882
嗨DeeMac, 是的,我想要一样的。但现在无法做到。我也尝试检查了所有虚拟成员,但没有成功。 - Rohit Prakash
1个回答

2
我找到了这个之前的问题 - 有人试图使用XtraBars.PopupMenu做同样的事情并不得不创建BarManager的子类和覆盖BarSelectionInfo.ClosePopup事件(也许你可以将其适应到你的场景中)。示例项目附在问题中,演示了在弹出菜单中选择日期并保持菜单打开的效果。 编辑: 为了完整起见,这里是相关代码 - 每当弹出窗口即将关闭时,ClosePopup都会触发,根据BarManager的文档:

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

您可以使用此属性分配上下文菜单并实现覆盖。
在示例中,您基于某些条件(取消事件)从该方法返回 - 在这种情况下,在表单中的一个事件上将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);
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接