SmartClient Software factory中的Composite UI Application Block(Cab)技術瞭解(四):Command

Command描述和實例

       在系統開發中常遇到對控件的事件委託問題,某個事件需要在容器內進行共享,那就需要通過Command的應用來實現。

1.         創建一個CommandModule

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>

     然後創建對應的類ToolListItemToolListItemMap用於添加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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章