我正在使用Devexpress PopupMenu右键显示。现在我想在关闭这个弹出菜单之前知道,就像Windows ContextMenu Closing事件一样。
PopupMenu有特写事件,但在关闭后会触发。实际上我的目标是根据情况处理何时关闭弹出菜单。
无论如何,我能实现吗?
答案 0 :(得分: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);
}
}