首页 > 代码库 > [SharpDevelop]菜单状态更新

[SharpDevelop]菜单状态更新

方式一

在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         }
View Code

方式二

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 menu10             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         }
View Code

方式三

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 }
View Code