建立 Windows Forms 工具箱控制件

Visual Studio 擴充性工具 (VSSDK) 中包含的 Windows Forms 工具箱控件項目範本,可讓您建立 工具箱 控件,此控件會在安裝延伸模組時自動新增。 本逐步解說示範如何使用範本來建立簡單的計數器控件,以散發給其他使用者。

建立工具箱控制件

Windows Forms 工具箱控制項範本會建立未定義的使用者控件,並提供將控件新增至 工具箱所需的所有功能。

使用 Windows Forms 工具箱控制項建立延伸模組

  1. 建立名為 MyWinFormsControl的 VSIX 專案。 您可以在 [新增專案] 對話框中,搜尋 “vsix” 來尋找 VSIX 專案範本。

  2. 當專案開啟時,新增一個名為 的 Counter 項目範本。 在 [方案總管]中,以滑鼠右鍵點擊專案節點,然後選取 [新增>新項目]。 在 [新增專案] 對話框中,移至 [Visual C#>擴充性],然後選取 [Windows Forms 工具箱控件]

  3. 這會新增使用者控制項 ProvideToolboxControlAttributeRegistrationAttribute,將該控制項放入 [工具箱],並在 VSIX 清單中新增用於部署的 Microsoft.VisualStudio.ToolboxControl 資產項目。

建置控件的使用者介面

Counter 控件需要兩個子控件:Label 以顯示目前的計數,以及將計數重設為 0 的 Button。 不需要其他子控件,因為呼叫端會以程序設計方式遞增計數器。

建置使用者介面

  1. 在 [方案總管]中,按兩下 Counter.cs,在設計工具中開啟它。

  2. 移除 點擊此處 按鈕,此按鈕是當您新增 Windows Forms 工具箱控制項專案範本時,預設會包含的 按鈕。

  3. 從 [工具箱]中,將 Label 控件拖曳到設計介面上,並在其下方放置 Button 控件。

  4. 將整體使用者控件的大小調整為 150、50 像素,並將按鈕控件的大小調整為 50、20 圖元。

  5. 在 [屬性] 視窗中,為設計介面上的控件設定下列值。

    控制 財產 價值
    Label1 文字 ""
    Button1 名稱 btnReset
    Button1 文字 重置

撰寫使用者控制件的程式代碼

Counter 控件會公開方法來遞增計數器、每當計數器遞增時引發的事件、Reset 按鈕,以及三個屬性來儲存目前的計數、顯示文字,以及是否要顯示或隱藏 Reset 按鈕。 ProvideToolboxControl 屬性會決定 工具箱中Counter 控件會出現的位置。

撰寫使用者控制件的程式碼

  1. 按兩下表單,以在程式碼視窗中開啟其載入事件處理程式式。

  2. 在事件處理程式方法上方,在控件類別中建立整數來儲存計數器值,以及儲存顯示文字的字串,如下列範例所示。

    int currentValue;
    string displayText;
    
  3. 建立下列公用屬性宣告。

    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 屬性的目前值,但無法直接設定值。

  4. 將下列程式代碼放在控件的 Load 事件中。

    private void Counter_Load(object sender, EventArgs e)
    {
        currentValue = 0;
        label1.Text = Message + Value;
    }
    
    

    在 事件中設定 Load 文字,可讓目標屬性在套用值之前載入。 在建構函式中設定 標籤 文字會導致 標籤成為空白。

  5. 建立下列公用方法以遞增計數器。

    public void Increment()
    {
        currentValue++;
        label1.Text = displayText + Value;
        Incremented(this, EventArgs.Empty);
    }
    
    
  6. 將 Incremented 事件的宣告新增至控件類別。

    public event EventHandler Incremented;
    

    呼叫端可以將處理程式新增至此事件,以回應計數器值的變更。

  7. 返回設計檢視,然後按兩下 [重設] 按鈕,以產生 btnReset_Click 事件處理程式。 然後,按照下列範例所示進行填寫。

    private void btnReset_Click(object sender, EventArgs e)
    {
        currentValue = 0;
        label1.Text = displayText + Value;
    }
    
    
  8. 在類別定義正上方,在 ProvideToolboxControl 屬性宣告中,將第一個參數的值從 "MyWinFormsControl.Counter" 變更為 "General"。 這會設定在 [工具箱]中裝載控件的項目群組的名稱。

    下列範例顯示 ProvideToolboxControl 屬性和調整后的類別定義。

    [ProvideToolboxControl("General", false)]
    public partial class Counter : UserControl
    

測試控制件

若要測試 工具箱 控件,請先在開發環境中進行測試,然後在已編譯的應用程式中進行測試。

測試控制件

  1. 按 F5,開始偵錯。

    此命令會建置專案,並開啟已安裝 控件的第二個Visual Studio實驗實例。

  2. 在Visual Studio的實驗實例中,建立 Windows Forms 應用程式 專案。

  3. 在 [方案總管]中,按兩下 Form1.cs,如果尚未開啟,請在設計工具中開啟它。

  4. 在 [工具箱]中,Counter 控件應該顯示在 [一般] 區段中。

  5. 將 Counter 控制項拖曳至窗體,然後選取它。 Value、Message和 ShowReset 屬性會顯示在 的屬性 視窗中,並且會與繼承自 UserControl的屬性一起顯示。

  6. 將 Message 屬性設定為 Count:。

  7. 將 Button 控制件拖曳至表單,然後將按鈕的名稱和文字屬性設定為 Test。

  8. 雙擊按鈕,以程式碼視圖開啟 Form1.cs,然後建立一個點擊處理程序。

  9. 在 click 處理程式中,呼叫 counter1.Increment()。

  10. 在建構函式中,在呼叫 InitializeComponent之後,輸入 counter1``.``Incremented +=,然後按 Tab 兩次。

    Visual Studio 會產生 counter1.Incremented 事件的表單級別的處理程式。

  11. 在事件處理程式中反白 Throw 語句,然後輸入 mbox,再按兩次 Tab,以從 mbox 代碼片段生成訊息框。

  12. 在下一行中,新增下列 if/else 區塊,以設定 [重設 ] 按鈕 可見度。

    if (counter1.Value < 5) counter1.ShowReset = false;
    else counter1.ShowReset = true;
    
  13. 按 F5。

    表單隨即開啟。 Counter 控件會顯示下列文字。

    計數:0

  14. 選取 [測試]。

    計數器遞增,Visual Studio 會顯示消息框。

  15. 關閉消息框。

    [重設按鈕] 消失。

  16. 選取 測試,並在計數器達到 5 前每次關閉消息框。

    重設按鈕 重新出現。

  17. 選取 重設。

    計數器會重設為 0。

後續步驟

當您建置 工具箱 控件時,Visual Studio 會在專案的 \bin\debug\ 資料夾中建立名為 ProjectName.vsix 的檔案。 您可以將 .vsix 檔案上傳至網路或網站,以部署控件。 當使用者開啟 .vsix 檔案時,控件會安裝並新增至用戶電腦上的 Visual Studio [工具箱]。 或者,您可以將 .vsix 檔案上傳至 Visual Studio Marketplace ,讓使用者可以在 [Tools>延伸模組和更新] 對話框中瀏覽來尋找它。