Command描述和實例
在系統開發中常遇到對控件的事件委託問題,某個事件需要在容器內進行共享,那就需要通過Command的應用來實現。
1. 創建一個Command的Module:
圖2.5.1
創建一個XML文件準備把需要添加的MenuItem信息放進去:
<Maps>
<list Item="FileItem" Label="One" Name="ClickOne"/>
<list Item="FileItem" Label="Two" Name="ClickTwo"/>
<list Item="FileItem" Label="Three" Name="ClickThree"/>
<list Item="FileItem" Label="Four" Name="ClickFour"/>
</Maps>
然後創建對應的類ToolListItem,ToolListItemMap用於添加MenuItem的控制類,這樣,前期的工作已經弄好,然後就要處理如何把這些ITEM和對應的觸發事件放到Module裏了。
2. 在ModuleController中添加以下代碼用於MenuItem的添加和事件的綁定:
private void ExtendMenu() { ToolListItemMap map = new ToolListItemMap();
foreach (ToolListItem item in map.MenuListMap) { ToolStripMenuItem menuitem = new ToolStripMenuItem(item.Label); menuitem.Name = item.Name;
if (WorkItem.UIExtensionSites.Contains("FileItem")) { UIExtensionSite site = WorkItem.UIExtensionSites["FileItem"]; site.Add(menuitem); WorkItem.Commands[item.CommandName].AddInvoker(menuitem, "Click"); } }
} #region 定義COMMAND事件 [CommandHandler(CommandNames.OneCmd)] public void oneCmd(object sender, EventArgs e) { MessageBox.Show("show one!");
} [CommandHandler(CommandNames.TwoCmd)] public void twoCmd(object sender, EventArgs e) { MessageBox.Show("show two!"); } [CommandHandler(CommandNames.ThreeCmd)] public void threeCmd(object sender, EventArgs e) { MessageBox.Show("show three!"); } [CommandHandler(CommandNames.FourCmd)] public void fourCmd(object sender, EventArgs e) { MessageBox.Show("show four!"); } #endregion |
其中WorkItem.Commands[item.CommandName].AddInvoker(menuitem, "Click");這句是把事件添加到容器的關鍵。
3. 保存後運行程序顯示爲圖2.5.2和圖2.5.3所示。
圖2.5.2
圖2.5.3