方式一
在Idle方法中更新
1 void OnApplicationIdle(object sender, EventArgs e)
2 {
3 // Use the Idle event to update the status of menu and toolbar.
4 // Depending on your application and the number of menu items with complex conditions,
5 // you might want to update the status less frequently.
6 UpdateMenuItemStatus();
7 }
8
9 /// <summary>Update Enabled/Visible state of items in the main menu based on conditions</summary>
10 void UpdateMenuItemStatus()
11 {
12 foreach (ToolStripItem item in menu.Items) {
13 if (item is IStatusUpdate)
14 (item as IStatusUpdate).UpdateStatus();
15 }
16 }
方式二
sealed class DefaultWorkbench : Form, IWorkbench
通过一个Timer来更新
1 toolbarUpdateTimer = new System.Windows.Forms.Timer();
2 toolbarUpdateTimer.Tick += new EventHandler(UpdateMenu);
1 void UpdateMenu(object sender, EventArgs e)
2 {
3 UpdateMenus();
4 UpdateToolbars();
5 }
6
7 void UpdateMenus()
8 {
9 // update menu
10 foreach (object o in TopMenu.Items) {
11 if (o is IStatusUpdate) {
12 ((IStatusUpdate)o).UpdateStatus();
13 }
14 }
15 }
16
17 void UpdateToolbars()
18 {
19 if (ToolBars != null) {
20 foreach (ToolStrip toolStrip in ToolBars) {
21 ToolbarService.UpdateToolbar(toolStrip);
22 }
23 }
24 }
方式三
sealed partial class WpfWorkbench : FullScreenEnabledWindow, IWorkbench, System.Windows.Forms.IWin32Window
1 requerySuggestedEventHandler = new EventHandler(CommandManager_RequerySuggested);
2 CommandManager.RequerySuggested += requerySuggestedEventHandler;
1 EventHandler requerySuggestedEventHandler;
2
3 void CommandManager_RequerySuggested(object sender, EventArgs e)
4 {
5 UpdateMenu();
6 }
7 void UpdateMenu()
8 {
9 MenuService.UpdateStatus(mainMenu.ItemsSource);
10 foreach (ToolBar tb in toolBars)
11 {
12 ToolBarService.UpdateStatus(tb.ItemsSource);
13 }
14 }
[SharpDevelop]菜单状态更新,布布扣,bubuko.com
原文:http://www.cnblogs.com/yhlx125/p/3849757.html