欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Composite UI Application Block 學(xué)習(xí)筆記之Com

系統(tǒng) 1945 0

?? 聽了曹嚴(yán)明先生的《組合型智能客戶端應(yīng)用 With Composite Application Block》的講座后,對(duì)CAB有了一個(gè)初步的理解,同時(shí)感覺CAB將大有用武之地。于是,本人從微軟網(wǎng)站 http://practices.gotdotnet.com/projects/cab 下載了源代碼,開始研究。

??? 這個(gè)學(xué)習(xí)筆記將主要講述CAB中Commands的應(yīng)用,以及一些本人的疑惑,期望園子里的朋友予以指點(diǎn)。

一、何謂Commands.

??? Commands是CAB程序集里一個(gè)重要的對(duì)象,它主要用來關(guān)聯(lián)控件、WorkSpace和業(yè)務(wù)邏輯,也就是讓一個(gè)命令可以被多個(gè)控件的事件引發(fā)。

一般的情況下可以通過以下代碼關(guān)聯(lián)一個(gè)命令和控件的事件:

??? Commands[strCommandName].AddInvoker(objControl, strEventName);

二、建立測(cè)試Commands的程序

1.打開VS2005,新建Windows Application項(xiàng)目。

2.添加以下引用

  • Microsoft.Practices.CompositeUI;
  • Microsoft.Practices.CompositeUI.WinForms;
  • Microsoft.Practices.ObjectBuilder

3.此時(shí)VS將自動(dòng)產(chǎn)生program.cs,Form1.cs。將Form1.cs命名為TestForm。

4.給TestForm加入菜單。命名為menuStrip1。依次加入菜單子項(xiàng),名稱如下:

  • AddNew
  • SaveFileTool
  • DeleteFile

5.重命名program.cs為CommandsApplication.cs,并且將內(nèi)容修改成以下形式:

using ?System;
using ?System.Collections.Generic;
using ?System.Windows.Forms;
using ?Microsoft.Practices.CompositeUI;
using ?Microsoft.Practices.CompositeUI.Commands;
using ?Microsoft.Practices.CompositeUI.WinForms;
using ?Microsoft.Practices.CompositeUI.UIElements;
class ?CommandsApplication?:?FormShellApplication < MainWorkItem,?TestForm >
{
/// ? <summary>
/// ?The?main?entry?point?for?the?application.
/// ? </summary>

[STAThread]
public ? static ? void ?Main()
{
??
new ?CommandsApplication().Run();
}

}


?

修改時(shí)要注意將static class 修改成 class,否則無法通過編譯,提示類似錯(cuò)誤1所示的錯(cuò)誤信息

Static class 'TestUIBlock.CommandsApplication' cannot derive from type 'Microsoft.Practices.CompositeUI.WinForms.
FormShellApplication<TestUIBlock.MainWorkItem,TestUIBlock.TestForm>'.
Static classes must derive from object.CommandsApplication.cs 13 40 TestUIBlock。

?? 如果將static class 修改成 public class,也會(huì)無法通過編譯,提示類似錯(cuò)誤2的信息:

Inconsistent accessibility: base class 'Microsoft.Practices.CompositeUI.WinForms.
FormShellApplication<TestUIBlock.MainWorkItem,TestUIBlock.TestForm>'
is less accessible than class 'TestUIBlock.CommandsApplication' E:\WorkSpace\Projects\TestUIBlock\TestUIBlock\TestUIBlock\CommandsApplication.cs 13 18 TestUIBlock。

??? 錯(cuò)誤1很好理解,就是靜態(tài)的類無法從類型繼承,但是錯(cuò)誤2就讓我有些費(fèi)解,在CAB的Quick Start中就是這樣寫的。和我新建立的不同區(qū)別是,我是通過引用dll來添加引用的,Quick Start是直接引用解決方案中的項(xiàng)目。查閱MSDN幫助對(duì)Inconsistent accessibility的解釋,好像也不能解釋我遇到的這個(gè)問題。

還有就是要將static void Main()修改成 public static void Main(),同時(shí)刪除VS2005默認(rèn)生成的代碼。

6.建立Controller,也就是命令。通常業(yè)務(wù)行為都放到這個(gè)類里。

???? 新建類MainControler文件,將類MainControler從Controller繼承。

???? 編寫過程,并且以屬性[CommandHandler(strKey)]進(jìn)行修飾,其中strKey是Commands集合中注冊(cè)的命令關(guān)鍵字。示例過程寫法如下:


?

[CommandHandler( " AddNew " )]
public ? void ?AddNewFileHandler( object ?sender,?EventArgs?e)
{
??MessageBox.Show(
" You?Had?Added?A?File " );
}


?

7.建立WorkItem。

??? 新建類MainWorkItem,并且從WorkItem繼承。

?? 重載Run()方法,代碼如下所示:


?

using ?System;
using ?System.Windows.Forms;
using ?System.Collections.Generic;
using ?Microsoft.Practices.CompositeUI;
using ?Microsoft.Practices.CompositeUI.UIElements;
using ?Microsoft.Practices.CompositeUI.WinForms;
using ?Microsoft.Practices.ObjectBuilder;
using ?System.Text;

namespace ?TestUIBlock
{
?
class ?MainWorkItem:WorkItem
?
{
??
public ? override ? void ?Run()
??
{
????Items.AddNew
< MainControler > ();
????Activate();}

??}

?}

}

?

??? 在Quick Start中是將通過XML文件,將菜單項(xiàng)記錄下來,和Commands集合映射,然后動(dòng)態(tài)加載到主菜單上的。由于我們已經(jīng)在TestForm中創(chuàng)建了菜單項(xiàng),所以可以去掉動(dòng)態(tài)加載到主菜單的操作,但是和Commands集合映射是必不可少的。可是在MainWorkItem中我不知道如何訪問TestForm實(shí)例,去獲取每一個(gè)菜單項(xiàng)(哪位大哥知道的話,請(qǐng)告訴我),于是我只好將映射到Commands部分的代碼放到CommandsApplication中。

??? 8.建立菜單項(xiàng)到Commands的映射。

??? 建立方法ProcessCommandMap(IUIElementService uiService):


?

private ? void ?ProcessCommandMap(IUIElementService?uiService)
{

foreach ?(ToolStripMenuItem?item? in ?((ToolStripMenuItem)Shell.MainMenuStrip.Items[ " FileMenue " ]).DropDownItems)
{
??
this .RootWorkItem.Commands[item.Name].AddInvoker(item,? " Click " );
}


???? 這里是通過菜單項(xiàng)的名稱和命令的名稱進(jìn)行映射的。我們也可以將多個(gè)控件的事件映射到同一個(gè)命令如:

Button?btn1? = ? new ?Button();
btn1.Text?
= ? " test " ;
btn1.Name?
= ? " btn1 " ;

Panel?panel1?
= ?(Panel)Shell.Controls[ " panel1 " ];
panel1.Controls.Add(btn1);
this .RootWorkItem.Commands[ " AddNew " ].AddInvoker(btn1,? " Click " );

???? 不知道看過Commands QuikStart的朋友發(fā)現(xiàn)沒有,通過Service的RegisterUIExtensionSite方法注冊(cè)菜單的根后,就可以直接通過Service的Add方法將子菜單添加到父菜單。如以下代碼:

IUIElementService?uiService? = ?RootWorkItem.Services.Get < IUIElementService > ();
ToolStripMenuItem?fileItem?
= ?(ToolStripMenuItem)Shell.MainMenuStrip.Items[ " File " ];
uiService.RegisterUIExtensionSite(
" File " ,?fileItem.DropDownItems);

?

??? 我曾經(jīng)嘗試通過同樣的方法在一個(gè)Panel中加入一個(gè)Button,但是失敗了,原因是沒有注冊(cè)對(duì)應(yīng)的UIElementManagerFactory。

9.至此我們已經(jīng)做好了一個(gè)Commands的例子,可以通過F5運(yùn)行程序了。

三、程序的執(zhí)行順序

通過調(diào)試程序我們不難發(fā)現(xiàn)程序是按照以下順序執(zhí)行的:

1.通過入口程序CommandsApplication調(diào)用 new CommandsApplication().Run();
2.初始化TestForm
3.創(chuàng)建Shell后建立控件和命令的映射,執(zhí)行AfterShellCreated方法。
4.運(yùn)行MainWorkItem,激活主窗體。
文中完整代碼下載: /Files/hyphappy/TestUIBlock.rar

Composite UI Application Block 學(xué)習(xí)筆記之Commands


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美亚洲欧美区 | 久草视 | 小明成人永久在线看 | 成人精品福利 | 中文字幕 国产精品 | 亚洲欧美日韩精品久久亚洲区色播 | 91国产精品| 亚洲欧美成人中文在线网站 | 亚洲一区二区在线视频 | 日韩午夜在线 | 日本呦呦 | 2021年无线乱码播放高清完整 | 国产视频中文字幕 | www.色哟哟 | 欧美日韩一二三区 | 香蕉久草视频 | 日韩欧美在线中文字幕 | 欧美日韩亚洲精品国产色 | 欧美综合久久 | 无码日本精品久久久久久 | 国产12孩岁A片被A午夜 | 欧美激情 在线 | 妈妈的朋友酷客影响 | 奇米色在线| 国产大毛片| 久久99国产精品成人欧美 | 天天夜天干天天爽 | 欧美视频第二页 | 国产传媒在线播放 | 91精选国产91在线观看 | 成人免费视频网站 | 日韩在线黄色 | 日韩视| 手机看片高清日韩精品 | 99精品国产高清在线观看 | 夜班护士在线观看 | 国产在线观看av | 成人爽a毛片免费啪啪红桃视频 | 久久女人被添全过程A片 | 另类综合网| 在线国产一区 |