Devexpress PopupMenu Closing 事件,如 Windows Contextmenu Closing 事件
Posted
技术标签:
【中文标题】Devexpress PopupMenu Closing 事件,如 Windows Contextmenu Closing 事件【英文标题】:Devexpress PopupMenu Closing event like Windows Contextmenu Closing event 【发布时间】:2013-10-17 20:54:30 【问题描述】:我正在使用 Devexpress PopupMenu 在右键单击时显示。现在我想在关闭这个弹出菜单之前知道,就像 Windows ContextMenu Closing 事件一样。
PopupMenu 有 Closeup 事件,但在关闭后触发。其实我的目标是根据情况处理何时关闭弹出菜单。
有没有,我能做到吗?
【问题讨论】:
我已经检查了文档,你是对的 - 对于你所追求的,不存在任何事件。 +1 好问题。我说得对吗,简而言之,您想阻止用户关闭上下文菜单,直到您的代码允许它? 嗨,DeeMac,是的,我也想要。但现在做不到。我也试过检查所有虚拟会员,但没有成功。 【参考方案1】:我发现了这个previous issue - 有人尝试使用 XtraBars.PopupMenu 做同样的事情,并且必须创建 BarManager 的子类并覆盖 BarSelectionInfo.ClosePopup 事件(也许你可以根据你的场景调整它)。示例项目附在问题上,并演示了在弹出菜单中选择日期并且菜单保持打开状态。
编辑:
这是完整性的相关代码 - 每当弹出窗口即将关闭时,ClosePopup 就会触发,根据 BarManager 的文档:
当您在设计时将 BarManager 放置在表单上时,所有控件 发布 PopupContextMenu 扩展器属性(其标题在 属性窗口看起来像“barManager1 上的 PopupContextMenu”)
您可以使用此属性分配上下文菜单并实现覆盖。
在示例中,您根据某些条件从方法返回(取消事件) - 在这种情况下,Bar 的标记在表单中的事件上设置为 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);
【讨论】:
以上是关于Devexpress PopupMenu Closing 事件,如 Windows Contextmenu Closing 事件的主要内容,如果未能解决你的问题,请参考以下文章
Devexpress PopupMenu Closing 事件,如 Windows Contextmenu Closing 事件
[Dev]DevExpress之treelist右键菜单实现
[Dev]DevExpress之treelist右键菜单实现