建立 Windows Forms 工具箱控制項
Visual Studio 擴充性工具 (VSSDK) 中包含的 Windows Forms 工具箱控件項目範本,可讓您建立 安裝延伸模組時自動新增的 [工具箱 ] 控件。 本逐步解說說明如何使用範本建立可散發給其他使用者的簡單計數器控制項。
建立工具箱控制項
Windows Forms 工具箱控制項範本會建立未定義的使用者控制項,並提供將控制項加入 [工具箱] 的所有必要功能。
使用 Windows Forms 工具箱控制項建立延伸模組
建立名為
MyWinFormsControl
的 VSIX 應用程式專案。 您可以在 [新增專案] 對話方塊中搜尋「vsix」來尋找 VSIX 專案範本。當專案開啟時,新增名為
Counter
的 Windows Forms 工具箱控制項項目範本。 在 [方案總管] 中,以滑鼠右鍵按一下專案節點,並選取 [新增]>[新增項目]。 在 [加入新項目] 對話方塊中,移至 [Visual C#]>[擴充性],然後選取 [Windows Forms 工具箱控制項]這會新增一個使用者控制項,一個
ProvideToolboxControlAttribute
RegistrationAttribute 將控制項放在 [工具箱] 中,以及 VSIX 資訊清單中一個用於部署的 Microsoft.VisualStudio.ToolboxControl 資產項目。
建置控制項的使用者介面
Counter
控制項需要兩個子控制項:Label 以顯示目前計數,以及 Button 以將計數重設為 0。 不需要其他子控制項,因為呼叫端會以程式設計的方式遞增計數器。
建置使用者介面
在 [方案總管] 中按兩下 Counter.cs 以在設計工具中開啟它。
當您新增 Windows Forms 工具箱控制項項目範本時,請移除預設隨附的 [按一下這裡 !] 按鈕。
從 [工具箱] 中,將一個
Label
控制項及其下方的Button
控制項拖曳到設計介面。將整體使用者控制項的大小調整為 150, 50 像素,並將按鈕控制項的大小調整為 50, 20 像素。
在 [屬性] 視窗中,為設計介面上的控制項設定下列值。
控制 屬性 值 Label1
Text "" Button1
名稱 btnReset Button1
Text Reset
為使用者控制項編碼
Counter
控制項會公開遞增計數器的方法,計數器每次遞增時要引發的事件,[重設] 按鈕,儲存目前計數的三個屬性,顯示文字,以及要顯示或隱藏 [重設] 按鈕。 ProvideToolboxControl
屬性會決定 [工具箱] 顯示 Counter
控制項的位置。
為使用者控制項編碼
按兩下表單,在程式碼視窗中開啟其載入事件處理常式。
在事件處理常式方法上方,於控制項類別中建立一個儲存計數器值整數,以及一個儲存顯示文字的字串,如下列範例所示。
int currentValue; string displayText;
建立下列公用屬性宣告。
public int Value { get { return currentValue; } } public string Message { get { return displayText; } set { displayText = value; } } public bool ShowReset { get { return btnReset.Visible; } set { btnReset.Visible = value; } }
呼叫端可以存取這些屬性,以取得和設定計數器的顯示文字,以及顯示或隱藏 [重設] 按鈕。 呼叫端可以取得唯讀
Value
屬性的目前值,但無法直接設定值。將下列程式代碼放在控制項的
Load
事件中。private void Counter_Load(object sender, EventArgs e) { currentValue = 0; label1.Text = Message + Value; }
在 Load 事件中設定 Label 文字可讓目標屬性在套用其值之前載入。 在建構函式中設定 Label 文字會導致空白 Label。
建立下列公用方法以遞增計數器。
public void Increment() { currentValue++; label1.Text = displayText + Value; Incremented(this, EventArgs.Empty); }
將
Incremented
事件的宣告新增至控制項類別。public event EventHandler Incremented;
呼叫端可以將處理常式新增至此事件,以回應計數器值的變更。
返回設計檢視,然後按兩下 [重設] 按鈕以產生
btnReset_Click
事件處理常式。 然後,填入該處理常式,如下列範例所示:private void btnReset_Click(object sender, EventArgs e) { currentValue = 0; label1.Text = displayText + Value; }
在類別定義正上方的
ProvideToolboxControl
屬性宣告中,將第一個參數的值從"MyWinFormsControl.Counter"
變更為"General"
。 這會設定主控 [工具箱] 控制項的項目群組名稱。下列範例會顯示
ProvideToolboxControl
屬性和調整過的類別定義。[ProvideToolboxControl("General", false)] public partial class Counter : UserControl
測試控制項
若要測試 [工具箱] 控制項,請先在開發環境中測試,再於編譯的應用程式中測試。
測試控制項
按 F5 以開始偵錯。
此命令會建置專案,並開啟已安裝控制項的第二個 Visual Studio 實驗執行個體。
在 Visual Studio 的實驗執行個體中,建立一個 [Windows Forms 應用程式] 專案。
在 [方案總管] 中,按兩下 Form1.cs 在設計工具中開啟它 (如果尚未開啟)。
在 [工具箱] 中,
Counter
控制項應該會顯示在 [一般] 區段中。將
Counter
控制項拖曳至表單,然後選取它。Value
、Message
和ShowReset
屬性及其繼承自 UserControl 的屬性將會顯示在 [屬性] 視窗中。將
Message
屬性設為Count:
。將 Button 控制項拖曳至表單,然後將按鈕的名稱和文字屬性設定為
Test
。按兩下按鈕在程式碼檢視中開啟 Form1.cs,然後建立 click 處理常式。
在 click 處理常式中,呼叫
counter1.Increment()
。在建構函式的函式中,在對
InitializeComponent
的呼叫後面輸入counter1``.``Incremented +=
,然後按兩次 Tab 鍵。Visual Studio 會為
counter1.Incremented
事件產生表單層級處理常式。醒目提示事件處理常式中的
Throw
陳述式,輸入mbox
,然後按兩次 Tab 鍵,從 mbox 程式碼片段產生一個訊息方塊。在下一行中,新增下列
if
/else
區塊以設定 [重設] 按鈕的可見性。if (counter1.Value < 5) counter1.ShowReset = false; else counter1.ShowReset = true;
請按 F5。
隨即開啟表單。
Counter
控制項會顯示下列文字。Count: 0
選取 [測試]。
計數器遞增,而 Visual Studio 會顯示訊息方塊。
關閉訊息方塊。
[重設] 按鈕隨即消失。
選取 [測試],每次都關閉訊息方塊,直到計數器到達 5 為止。
會重新出現 [重設] 按鈕。
選取 [重設]。
計數器重設為 0。
下一步
當您建置 [工具箱] 控制項時,Visual Studio 會在專案的 \bin\debug\ 資料夾中建立名為 ProjectName.vsix 的檔案。 您可以將 .vsix 檔案上傳到網路或網站以部署控制項。 當使用者開啟 .vsix 檔案時,控制項就會在使用者電腦上安裝及新增至 Visual Studio 的 [工具箱] 中。 或者,您可以將 .vsix 檔案上傳至 Visual Studio Marketplace,讓使用者可以在 [工具]>[延伸模組和更新] 對話方塊中瀏覽來尋找它。