DevExpress Winform:纯代码方式创建PopupMenu

DevExpress版本:18.1

.NET Framework版本:4.0

VS版本:2017

C#语言版本:7.3

 1 public partial class YourClass : XtraForm
 2 {
 3     private readonly PopupMenu PopupMenu = new PopupMenu();
 4     private readonly BarManager BarManager = new BarManager();
 5 
 6     public YourClass()
 7     {
 8         // constructor
 9     }
10 
11     private void InitContextMenuGridControlDbTables()
12     {
13         this.PopupMenu.BeginInit();
14         this.BarManager.BeginInit();
15 
16         var menuRefresh = new BarButtonItem
17         {
18             Manager = this.BarManager,
19             Caption = "Refresh",
20             Name = "Refresh",
21             Id = 0
22         };
23         // menuRefresh.ItemClick += this.WhenClickRefresh;
24 
25         var menuSynchronize = new BarButtonItem
26         {
27             Manager = this.BarManager,
28             Caption = "Synchronize",
29             Name = "Synchronize",
30             Id = 1
31         };
32         // menuSynchronize.ItemClick += this.WhenClickSynchronize;
33 
34         var menuPurge = new BarButtonItem
35         {
36             Manager = this.BarManager,
37             Caption = "Purge",
38             Name = "Purge",
39             Id = 2
40         };
41         // menuPurge.ItemClick += this.WhenClickPurge;
42 
43         var menuRemove = new BarButtonItem
44         {
45             Manager = this.BarManager,
46             Caption = "Remove",
47             Name = "Remove",
48             Id = 3
49         };
50         // menuRemove.ItemClick += this.WhenClickRemove;
51 
52         this.PopupMenu.LinksPersistInfo.AddRange(new[]
53         {
54             new LinkPersistInfo(menuRefresh),
55             new LinkPersistInfo(menuSynchronize, true), // 第二个参数true,表示在Synchronize和Refresh菜单之间添加分割线
56             new LinkPersistInfo(menuPurge, true), // 第二个参数true,表示在Purge和Synchronize菜单之间添加分割线
57             new LinkPersistInfo(menuRemove)
58         });
59         this.PopupMenu.Manager = this.BarManager;
60 
61         this.BarManager.Form = this.gridControlDbTables; // BarManager.Form属性表示菜单所属的控件
62         this.BarManager.Items.AddRange(new BarItem[]
63         {
64             menuRefresh,
65             menuSynchronize,
66             menuPurge,
67             menuRemove
68         });
69 
70         this.PopupMenu.EndInit();
71         this.BarManager.EndInit();
72 
73         // 绑定BarManager.Form控件的MouseUp事件以显示菜单
74         this.gridControlDbTables.MouseUp += (sender, e) =>
75         {
76             if (MouseButtons.Right == e.Button)
77                 this.PopupMenu.ShowPopup(Control.MousePosition);
78         };
79     }
80 }

 更简洁的方式:删除13~14行,62~71行的代码。

问题:

1,如何在菜单显示之前做其他事情

(1)绑定PopupMenu.BeforePopup事件。

(2)绑定BarManager.Form所指定的控件(即,菜单绑定的控件)的PopupMenuShowing事件。

2,如何隐藏个别菜单项

以问题1中第(1)部分所述举例:

this.PopupMenu.BeforePopup += (sender, e) =>
{
if (yourCondition) { this.PopupMenu.LinksPersistInfo[0].Item.Visibility = BarItemVisibility.Never; this.PopupMenu.LinksPersistInfo[1].Item.Visibility = BarItemVisibility.Never; } else
    
this.PopupMenu.LinksPersistInfo[2].Item.Visibility = BarItemVisibility.Never; };
posted @ 2020-06-14 10:02  腾鲲  阅读(690)  评论(0编辑  收藏  举报