2008年4月27日 星期日

使用鍵盤Keyboard操控Winform(2)-傳送按鍵SendKey對照表

亞當斯在使用鍵盤Keyboard操控Winform(1)-移動控制項焦點中提到使用鍵盤的相關設計方式,不過使用SendKey的Send方法時,還是要注意所需要設定的按碼鍵,因為基本上,每一個按鍵由一或多個字元表示。若要指定單一鍵盤字元,直接使用字元本身即可。

例如,若要表示字母 A,就傳遞字串「A」至這個方法,若要表示一個以上的字元,則附加每一個額外的字元至先前的字元,像是要表示字母 A、D、A、M 及 S,請將參數指定為「ADAMS」。

另外,亞當斯覺得要特別注意的是,若要指定當按下如 ENTER 或 TAB 鍵及表示動作而非字元的按鍵時,請使用下表中的按鍵對照表:

按鍵 按鍵碼
退格鍵 {BACKSPACE}、{BS} 或 {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL 或 DELETE DEL 或 DELETE
向下鍵 {DOWN}
END {END}
ENTER {ENTER}or ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS 或 INSERT INS 或 INSERT
向左鍵 {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC} (保留供日後使用)
向右鍵 {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
向上鍵 {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}
數字鍵台加號 {ADD}
數字鍵台減號 {SUBTRACT}
數字鍵台乘號 {MULTIPLY}
數字鍵台除號 {DIVIDE}


若要指定 SHIFT、CTRL 和 ALT 鍵任意組合的按鍵,請在按鍵碼之前使用一或多個下列的程式碼:

按鍵 按鍵碼
SHIFT +
CTRL ^
ALT %


若要指定當按下其他數個按鍵時,應該按住的 SHIFT、CTRL 和 ALT 的任意組合,請將那些按鍵的程式碼置於括號中。例如,若要指定在按 A 和 D 時按住 SHIFT 鍵,請使用「+(AD)」,若要指定在按 A 時按住 SHIFT 鍵,然後按 D 但不按住 SHIFT 鍵,請使用「+AD」;若要指定重覆的按鍵,請使用格式 {key number},必須在按鍵和數目之間放置空格,例如,{LEFT 5} 表示按向左鍵 5 次;{A 10} 表示按 A 鍵 10 次。

2008年4月26日 星期六

使用鍵盤Keyboard操控Winform(1)-移動控制項焦點

開發Winform程式時, 可以將表單設計為使用鍵盤的Enter,上,下箭頭鍵移動表單上控制項的輸入焦點,根據亞當斯的觀察,這種操作方式在很多大型主機上,如AS400等系統中都是這樣的操作模式,所以其實很多使用者都已經習慣這樣的操作模式了,然而Winform也有提供這樣的設計功能,只是幾乎很少被提到! 剛好上課時有同學提出這個問題,亞當斯就在這邊紀錄一下設計方式給各位參考。假設有一個表單畫面如下:

KeyboardInput01

用鍵盤移動控制項焦點的設計方式有以下兩個重點步驟:

1.設定Form的KeyPreview 屬性,指出表單是否在事件傳送至具有焦點的控制項之前,要接收按鍵事件,當設定這個屬性為 true,表單將接收所有 KeyPress、KeyDown 和 KeyUp 事件。
KeyboardInput02

2.在From的KeyDown事件中,使用e.KeyCode判斷按下鍵盤的哪一個按鍵,如果按下的是:Enter或是上、下鍵的話,就移動表單中的控制項焦點,程式碼如下:

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown   
  Select Case e.KeyCode
    Case Keys.Enter, Keys.Down
      SendKeys.Send("{TAB}")
    Case Keys.Up
      SendKeys.Send("+{TAB}")
  End Select
End Sub

下列檔案為此篇文章的範例程式,有興趣的朋友可自行下載:


2008年4月25日 星期五

Windows Form 中事件(Event)的順序

開發表單程式時,對事件順序的認知其實蠻重要的,亞當斯以前開發Winform專案時有時候為了控制某些邏輯的先後順序,傷透了腦筋,因為都必須要控管出現的順序或是運作方式等,不過透過Winform event的搭配控管就可以節省不少需要自己去控管的部分了。

微軟MSND中也提到:對於需要輪流處理 Windows Form 應用程式中每個事件的開發人員來說,事件的引發順序就十分重要。當某個狀況呼叫嚴密的事件處理,如重新繪製表單的部分時,有必要了解事件在執行階段時的明確引發順序。以下列出亞當斯整理MSDN後的Windows Form 中事件的順序,以方便日後上課或是設計專案時參考。

Form 和 Control 有關啟動與關閉的事件順序為可分為兩大類,當 Windows Form 應用程式啟動時,會以下列順序引發主要表單的啟動事件:

  • Control.HandleCreated
  • Control.BindingContextChanged
  • Form.Load
  • Control.VisibleChanged
  • Form.Activated
  • Form.Shown

當應用程式關閉時,會以下列順序引發主要表單的關閉事件:

  • Form.Closing
  • Form.FormClosing
  • Form.Closed
  • Form.FormClosed
  • Form.Deactivate

焦點和驗證事件:當透過使用鍵盤按鍵 (TAB、SHIFT+TAB 等)、呼叫 Select 或 SelectNextControl 方法,或是將 ActiveControl 屬性設定成目前的表單等作法,變更焦點時,Control 類別的焦點事件就會以下列順序發生:

  • Enter
  • GotFocus
  • Leave
  • Validating
  • Validated
  • LostFocus

當使用滑鼠或呼叫 Focus 方法來變更焦點時,Control 類別的焦點事件會以下列順序發生:

  • Enter
  • GotFocus
  • LostFocus
  • Leave
  • Validating
  • Validated

2008年4月24日 星期四

ListView 控制項的設計要素(2)-設計Group與套用View檢視模式

ListView 群組功能可建立邏輯上與 ListView 項目相關的視覺化群組,主要功能為協助使用者尋找所尋找的項目,方法是將項目分隔成有用的分類,若要使用群組功能,則是將一或多個 ListViewGroup 物件加入至 ListView 控制項的 Groups 集合。
設計步驟為:

1.先設定ListView 的Groups 屬性,加入想要分類的群組,這邊亞當斯加入兩個Group,並且設定Header和Name:

ListView06 2.修改ListItemView的Group屬性,指定為隸屬的群組。
ListView07

接著透過ComboBox控制項來動態控制ListView 的檢視功能( View屬性),View 屬性設定為各項目用大圖示或小圖示顯示,或用垂直清單來顯示的各項項目。最豐富的選項是詳細資料檢視,不只允許檢視項目,更有為各項項目指定的任何子項目。各項項目都顯示在格線中,作垂直列示,各項項目的子項目則顯示在資料行中,附有資料行行首。Details檢視是對使用者顯示出資料庫資訊的完美方式。

在表單中先撰寫以下程式,先使用System.Enum.GetNames(GetType(View))載入所有的View,在使用System.Enum.Parse(GetType(View), comboBox1.Text)取出指定給ListView控制項即可,將ListView的所有View先在入ComboBox控制項以便動態設定ListView:

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
comboBox1.DataSource = System.Enum.GetNames(GetType(View))
End Sub
Private Sub comboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBox1.SelectedIndexChanged
listView1.View = CType(System.Enum.Parse(GetType(View), comboBox1.Text), View)
End Sub


接著就可以在程式執行過程中,隨時去變化ListView的View模式了,以下為亞當斯所測試的每一個不同的結果樣式。

ListView08ListView09ListView12 ListView11 ListView10

2008年4月23日 星期三

NotifyIcon 與contextMenuStrip的搭配應用

Windows Form NotifyIcon 控制項通常用來為在背景中執行的處理序 (Process) 顯示圖示,而且大部分時間不會顯示使用者介面。MSN程式或是防毒軟體即為範例之一,讓一般的User可在工作列的狀態告知區按一下圖示(Icon)來存取。每個 NotifyIcon 控制項都會在狀態區顯示一個圖示。假設想要執行三個背景處理序,每個都需要獨立的顯示圖示,那麼就必須將三個 NotifyIcon 控制項加入表單分別設定才行。

亞當斯接下來簡單說明一下NotifyIcon 搭配contextMenuStrip的設計方式:

  1. 先在表單中加入一個contextMenuStrip控制項,並且設定幾個ToolStripMenuItem,例如:開始、停止、離開等。NotifyIcon01
  2. 拖拉一個NotifyIcon控制項到畫面中,設定ContextMenuStrip(取得或設定與 NotifyIcon 關聯的快速鍵功能表)為ContextMenuStrip1,並設定BalloonTipText、BalloonTipIcon 和 BalloonTipTitle 來指定汽球提示的文字、圖示和標題。
  3. NotifyIcon 主要屬性是 Icon 和 Visible,因此設定Icon 為一個影像檔,並設定Visible為true。NotifyIcon02
  4. 最後可以呼叫 ShowBalloonTip 方法來指定要顯示提示的時間範圍,為 NotifyIcon 顯示提示。程式碼為:
    NotifyIcon1.ShowBalloonTip(3000)
  5. 應用程式執行後的結果,就會在右下角的出現Icon,對著Icon按滑鼠右鍵,會彈出contextMenuStrip所設定的ToolStripMenuItem。另外按下表單中按鈕之後,Icon處就會彈出提示視窗,然後出現三秒鐘。
    05-ContextMenuStrip Work 04-ShowBallonTip

2008年4月22日 星期二

PictureBox的設計應用-載入衛星雲圖

Windows Form PictureBox 控制項是用來顯示點陣圖、GIF、JPEG、中繼檔 (Metafile) 或圖示格式的圖形。顯示的圖片是由可在執行階段或設計階段設定的 Image 屬性所決定的。要載入圖形有以下幾種常見方式:

  1. 直接設定Image屬性為本機資源下某個影像檔的路徑
  2. 設定 ImageLocation 屬性,然後使用 Load 方法同步載入影像或是使用 LoadAsync 方法非同步載入影像
  3. 設定Image屬性為專案資源檔(Resource.resx)檔中的影像

另外一個最重要的屬性就是:SizeMode 屬性,這屬性可以控制影像和控制項間的搭配。

接下來亞當斯使用以上第二種方式來載入圖形,而這個圖形:衛星雲圖,則是根據現在的時間,實際去偵測現在天氣的概況,而呈現完成的圖示。那麼從哪邊取得衛星雲圖呢?答案就是:中央氣象局全球資訊網。

其實程式很簡單,在Winform畫面上,先拖拉一個Button和PictureBox 控制項,然後在Button的Click事件中加入以下程式碼即可,首先將現在的日期時間傳入到中央氣象局全球資訊網的一個位置圖,接著設定PictureBox 的ImageLocation 屬性:
DemoPictureBox 將Winform執行起來,按下按鈕就可以看到衛星雲圖呈現在我們的表單中了,呵呵~真是一個蠻酷的功能。
PictureBox02

2008年4月21日 星期一

ListView 控制項的設計要素(1)-完整設計模式

Windows Form ListView 控制項顯示具有圖示的項目清單,可以使用清單檢視來建立如 Windows 檔案總管右窗格的使用者介面。ListView 主要設定的屬性有下列幾個:Columns 、Items、View和Group等等。透過這幾個屬性可以設計一個常用的介面讓一般User使用。

首先,如果要在ListView 中顯示圖示,當然可以先準備ImageList控制項將想要呈現的圖片先設定好,然後先來設定ListView的Column屬性,Columns 屬性允許存取 ListView.ColumnHeaderCollection,它儲存將控制項的 View 屬性設定為 Details 時所顯示的資料行行首。這邊亞當斯先設定三個欄位以呈現:雜誌名稱、單價、出刊日的檢視樣式。

ListView01

如果想要在ListView中的每個項目都有圖片可以呈現的話,可以設定ImageList控制項中的Images屬性,將圖示先封裝到這個控制項中,然後指定給ListView的LargeImageList屬性或是SmallImageList屬性即可。
ListView02

ListView 控制項的主要屬性是 Items,其中包含控制項顯示的項目,主要功能是取得包含控制項中所有項目的集合,使用這個屬性傳回的 ListView.ListViewItemCollection,可以新增項目、移除項目、和取得項目的計數,這邊亞當斯就把要準備呈現的幾筆項目資料逐一設定,分別為:地理雜誌、科學和創意情報。設定時,可以先加入一個ListViewItem,然後設定Text和ImageKey這兩個比較主要的屬性,就可以將比較完整的項目呈現出來。

ListView03 基本上,整個設定完ListView 的感覺就如同下圖所示。還可以搭配很多其他的屬性變化啦,譬如說View的模式啦,Group群組模式啦...等等的,各位有興趣的話,可以多參考MSDN中的說明囉!
ListView04 另一方面,當然也可以動態使用程式碼來加入其中一個ListViewItem,程式碼如下:
ListView05

2008年4月20日 星期日

修正安裝 Moss 2007 SDK後 Workflow 的 Code Snippet 無法使用的技巧

想要使用VS 2005開發Moss的Workflow,可以安裝SharePoint Server 2007 SDK: Software Development Kit,並且使用其所提供的專案樣板來設計。當建立流程專案之後,在專案的DeploymentFiles\FeatureFiles資料夾中會預設包含以後要部署為Feature的兩份文件,打開feature.xml來看,還有提供透過Code Snippet快速設定Feature範本的步驟ㄝ,看起來功能真的不錯!!FixingWorkflowSnippet01

但是當Adams依照步驟,真的想要使用Code Snippet時,卻發現feature.xml和workflow.xml這兩個檔案所提供的Code Snippet預設都無法Work,如下圖所示,阿咧~只有幾段簡單的鳥程式可以用?? 難道又被「呼ㄌㄨㄥ」了~大哥別鬧了,Orz(微軟阿,你總是那麼容易的欺騙倫家的感情~喵~~嗚~~~~>_<~~~)
FixingWorkflowSnippet02

根據亞當斯的研究,其實安裝完 Moss 2007 SDK後在C:\Program Files\Microsoft Visual Studio 8\Xml\1033\Snippets\SharePoint Server Workflow資料夾下會有5個Snippet可以用,分別是:

  • elementfile.snippet
  • feature.snippet
  • modificationform.snippet
  • taskform.snippet
  • workflowtemp.snippet

因此亞當斯判斷應該是安裝的過程與VS 2005整合時有小Bug,所以導致無法在VS 2005中正常使用,所以解決技巧就是只要打開VS 2005的程式碼片段管理員(快速鍵為:Ctrl + K + B),語言先選擇XML,再點選「加入」,路徑直接指到C:\Program Files\Microsoft Visual Studio 8\Xml\1033\Snippets\SharePoint Server Workflow,將這個Code Snippet加入即可。FixingWorkflowSnippet05

這樣一來,就可以輕鬆的享用Workflow Code Snippet 所帶來的便利囉!
多說無益,馬上來試試看, 亞當斯試著在featuer.xml使用區段程式碼,發現真的可以挑選程式區段唷!FixingWorkflowSnippet06

透過Moss Workflow Code Snippet 產生出來的程式Feature設定如下,淡綠色的地方就是可以自訂修改的地方,其他部分則不需要修改,果然是好用的Code Snippet,像是Workflow.xml也就比照辦理囉。來人阿~有事快奏~無事退朝!^^
FixingWorkflowSnippet07

2008年4月19日 星期六

Moss事件接收器(4)-Debug Event Handler

當事件接收器(Event Handler)的組件(*.dll)部署到GAC並且註冊到MOSS網站後,使用者在執行的過程當中可能多多少少會發生錯誤,然而MOSS網站上針對Event Handler所產生的錯誤訊息幾乎都是:無法預測的錯誤。說實在的,在MOSS的網站上看到這個訊息的時候都會很傻眼,因為根本不知道到底是哪錯了,大人~真是冤忘啊!!

所以如果想要知道是否為Event Handler設計有誤,最好的方式就是使用VS.NET來Debug偵錯。要Debug Event Handler Assembly最主要的步驟就是加入IIS所執行的Process:w3wp.exe,就可以了,以下亞當斯來做個簡單示範:

1.先打開VS.NET中設計 Event Handler組件的專案,並且針對要執行Debug的程式設定中斷點。
EventHandlerDebug01

2.打開瀏覽器,瀏覽MOSS網站,例如:http ://center.beauty.corp,此時會產生w3wp.exe。接著切換到VS.NET執行偵錯-->附加至處理序-->將w3wp.exe附加。
EventHandlerDebug02

3.瀏覽Moss網站並且打開文件庫,刻意去觸發Event Handler所控管的事件(這邊亞當斯要測試的是:刪除事件)。
EventHandlerDebug03

4.當觸發Event Handler中的事件時,這時候就會進入中斷點,以便執行偵錯了,呵呵~真有成就感。
EventHandlerDebug04

2008年4月18日 星期五

VSTS 2008設計Unit Test單元測試(3)-測試方法(TestMethod)的例外處理

在測試專案中,實作Method的單元測試時會用到TestMethodAttribute,簡單來說,測試方法必須放置在測試類別中,並且以 TestMethodAttribute 標示,如此才能生效。

當測試的過程當中,假設想要刻意忽略某一種例外造成測試失敗時,就可以使用ExpectedExceptionAttribute來設定Exception物件。這個屬性可用來測試是否程式執行過程當中會丟出這個Exception例外狀況,假設有擲回預期的例外狀況,則測試方法為"成功",反之,如果丟回的例外不是預期的Exception物件,則測試將會失敗。

1.首先挑選要建立的單元測試,如下圖所示。

UnitTestFixed01

2.修改原本類別中的方法,加入判斷式,假設滿足某個條件時,要丟出我們想要監控的Exception例外狀況,程式碼如下。
UnitTestFixed02 

3.確認一下有設定TestMethodAttribute的測試方法,預設透過VSTS 2008所自動產生的測試方法,只會有設定[TestMethod()],所以並不會針對任何其他條件有所限制。

UnitTestFixed03 
4.將這個測試方法加入到測試編輯器中,並且加入核取的項目中,勾選想要測試的方法後,按下執行測試。
UnitTestFixed04 
5.此時測試結果會因為擷取到ApplicationException而回報測試失敗,點選結果可以看到測試的詳細資訊:UnitTestFixed05

6.接著回到測試方法中,加入ExpectedExceptionAttribute來設定ApplicationException物件。
UnitTestFixed06

7.假設測試程式執行過程當中會丟出這個ApplicationException例外狀況,則測試方法為"成功"。
UnitTestFixed07

2008年4月15日 星期二

Cat#-貴婦MiMi初登場

Microsoft 的.NET世界中有支援數十種語言,VB、C#、C++、J#等等不勝枚舉,這邊亞當斯要介紹的是Cat#

什麼?Cat#??=(^.^)=。哈哈,你沒看錯,我要介紹的就是Cat#,所謂的Cat#整體架構跟C#其實差不多,最大的差別,也就是最特別的地方在於:Cat#是只有貓(Cat)才打得出來的語言,也只有貓(Cat)才會Compile並且解譯的語言。例如:使用Cat#程式設計網頁的話,第一行就是宣告成:<%@=(^.^)= Language="Cat#" %>

首先,先來介紹一下會寫Cat#的高手,也就是這篇文章的女主角:MiMi

  • 名字:MiMi (迷迷,外號又叫:妹妹)
  • 性別:女
  • 血統:俄羅斯藍貓
  • 老爸:當然就是亞當斯(Adams)我啦!
  • 實際年齡:剛滿一歲
  • 程式經歷:八個月(因為從三個月起,就喜歡在爸爸NB上踩來踩去寫程式了,Orz)
  • 興趣:躺在老爸的NoteBook上,當貴婦喝下午茶
  • 個性:調皮搗蛋、喜歡裝可愛

MimiCool

那麼,到底MiMi都是如何寫Cat#的呢?我們來看看MiMi平常寫Cat#的情形。

首先MiMi喜歡自己組電腦來用,所以先跟爸爸借一些零件來組一台電腦,哇,零件這麼多,先裝CPU再加RAM,組了好久終於組好了,真是累了MiMi貴婦了(臭爸爸都只顧著看電視,也不幫忙真是氣死人家了),呼~先鬆一口氣休息一下。MiMiComputerMiMiComputerComplete

接著,打開爸爸的NB,設定好連上剛剛裝好的PC,接著MiMi就可以開始寫程式了,我踏踏踏,我寫寫寫,這叫做快快樂樂寫Cat#啦,喵~,寫了這麼久不知道寫多少了,回頭看一下螢幕,恩~連結資料庫的功能還沒寫好,再繼續寫~喵~。
MiMiCoding

2008年4月14日 星期一

Moss事件接收器(3)-使用Visual Studio 2005 Extensions V1.1設計部署Event Handler

使用Visual Studio 2005 Extensions 1.1所建立的專案中,可以加入一個叫做「事件接收器」的新項目,這個新項目主要是針對事件接收器(Event Handler)所設計的,透過這個項目可以讓VS.NET自動產生程式碼以及快速的部署到MOSS中,接下來亞當斯就來介紹一下設計步驟。

1.首先,建立一個空專案,然後在新增項目的地方,選擇新增「事件接收器」。
EventHandlerByVse02

2.當加入「事件接收器」之後,VS.NET先問要準備把這個事件接收器套用在哪一個MOSS的清單類型中,這邊亞當斯挑選要套用到文件庫:「Document Library」(當然還有很多其它的清單類型可以挑選,不過亞當斯大部分都是使用文件庫當測試的啦)。
EventHandlerByVse03

3.加入「事件接收器」項目的專案中,會針對所挑選的清單類型產生對應的接收器,例如對應到文件庫的有兩個:ItemEventReceiver和ListEventReceiver,所繼承的類別分別為:SPItemEventReceiver以及SPListEventReceiver。另外更Cool的是,連Feature的檔案設定(ItemEventReceiver.xml、ListEventReceiver.xml)都幫你自動設定好了,光是這一點就非常值得讚嘆,不禁要說一下,水啦!!
EventHandlerByVse04

4.再來當然是修改程式控管事件接收器中的不同事件,有關這一部份的設計程式碼,請參考另一篇文章:Moss事件處理器(1)-如何建立部署,亞當斯就不在這邊重覆介紹囉。

5.最後設定專案屬性中的偵錯,設定好瀏覽器起使URL後,就可以直接使用專案的部署模式,將事件接收器部署到目標MOSS網站中了,既方便又快速。
EventHandlerByVse07

2008年4月13日 星期日

使用Visual Studio 2005 Extensions 1.1 設計 Moss WebPart(網頁組件)

前幾篇文章(Windows SharePoint Services 3.0 工具:Visual Studio 2005 Extensions 1.1 中文版)有提到有關Visual Studio 2005 Extensions 1.1中文版的介紹,事實上安裝完之後沒有玩一下真的會手癢。

所以亞當斯這邊便建立一個使用VB的WebPart專案來設計一個MOSS用的網頁組件(使用VB的原因是因為之前的版本都只支援C#,所以當然要寫點不一樣的),專案範本選擇的是VB中的-網頁組件。

WssWebPart01

使用專案範本的好處,是可以直接新增一個WebPart的項目,就不用自己又要繼承,又要改寫不同的方法了,以下的範例程式是直接新增一個網頁組件的項目,預設類別會自動繼承System.Web.UI.WebControls.WebParts.WebPart,並且在CreateChildControls的方法中加入一些ASP.NET的控制項,讓WebPart可以包含多個控制項。

WssWebPart03

事實上,以上這段程式將會在MOSS網站中的網頁上顯示以下結果:
WssWebPart07

然而其實亞當斯一直覺得,使用Visual Studio 2005 Extensions的樣板來開發WebPart最大的好處在於他的「部署」方式,既簡單又便利。那麼這個設定部署的超重要技巧為:當設計好WebPart之後,如果要部署到MOSS網站中,可以先設定專案屬性中的「偵錯屬性」,並設定瀏覽起使URL為想要部署的MOSS網站之網址,例如:http: //center.beauty.corp。
WssWebPart04

接下來只需要對著專案按下滑鼠右鍵,選擇「部署」,VS.NET就會自動將WebPart專案先封裝成方案,接著將方案註冊到MOSS網站中,並且也會封裝為Feature模組自動註冊到網站集合中。最後啟動Feature讓網站可以直接在網頁中加入網頁組件來使用。最後假設亞當斯要在MOSS中加入這個WebPart,那個在加入的頁面中,就會出現下面的新增網頁組件視窗,接著只要挑選後,按下新增就大功告成囉! WssWebPart05WssWebPart06