逐步解說:使用 C# 從 Windows Forms 控制項繼承

您可以使用 C# 透過繼承建立功能強大的自訂控制項。 您可以透過繼承建立控制項,不僅保留標準 Windows Forms 控制項的所有固有功能,同時也納入自訂功能。 在本逐步解說中,您將會建立簡單的繼承控制項,名為 ValueButton。 此按鈕會繼承標準 Windows Forms Button 控制項的功能,且會公開名為 ButtonValue 的自訂屬性。

建立專案

當您建立新的專案時,您會指定其名稱以設定根命名空間、組件名稱和專案名稱,並且確定預設元件將會在正確的命名空間中。

若要建立 ValueButtonLib 控制項程式庫和 ValueButton 控制項

  1. 在 Visual Studio 中建立新的 Windows Forms 控制項程式庫專案,並將其命名為 ValueButtonLib

    專案名稱,ValueButtonLib,預設也會指派給根命名空間。 根命名空間是用來限定組件中的元件名稱。 例如,如果兩個組件提供元件,名為 ValueButton,您可以使用 ValueButtonLib.ValueButton 指定您的 ValueButton 元件。 如需詳細資訊,請參閱命名空間

  2. 在 [方案總管] 中,以滑鼠右鍵按一下 [UserControl1.cs],然後從捷徑功能表選擇 [重新命名]。 將檔案名稱變更為 ValueButton.cs。 當系統詢問您是否要重新命名程式碼元素 'UserControl1' 的所有參考時,按一下 [是]按鈕。

  3. 在 [方案總管] 中,以滑鼠右鍵按一下 [ValueButton.cs],然後選取 [檢視程式碼]

  4. 找出 class 陳述式行 public partial class ValueButton,並將此控制項所繼承的類型從 UserControl 變更為 Button。 這可讓繼承的控制項繼承 Button 控制項的所有功能。

  5. 在 [方案總管] 中,開啟 [ValueButton.cs] 節點以顯示設計工具產生的程式碼檔案,ValueButton.Designer.cs。 在 [程式碼編輯器] 中開啟此檔案。

  6. 找出 InitializeComponent 方法,並移除指派 AutoScaleMode 屬性的那一行。 此屬性不存在於 Button 控制項中。

  7. 從 [檔案] 功能表選擇 [全部儲存] 以儲存專案。

    注意

    視覺化設計工具再也無法使用。 由於 Button 控制項會執行自己的繪製,您將無法在設計工具中修改其外觀。 其視覺表示法將會與其繼承之類別的視覺表示法完全相同 (也就是 Button),除非在程式碼中另有修改。 您仍然可以將元件 (其中沒有任何 UI 元素) 新增至設計介面。

將屬性新增至繼承的控制項

繼承 Windows Forms 控制項的可能用法之一是建立外觀及操作與標準的 Windows Forms 控制項相同的控制項,但是公開自訂屬性。 在本節中,您會將名為 ButtonValue 的屬性新增至您的控制項。

若要新增 Value 屬性

  1. 在 [方案總管] 中,以滑鼠右鍵按一下 [ValueButton.cs],然後從捷徑功能表按一下 [檢視程式碼]

  2. 尋找 class 陳述式。 緊接在 { 後面,輸入下列程式碼:

    // Creates the private variable that will store the value of your
    // property.
    private int varValue;
    // Declares the property.
    public int ButtonValue
    {
       // Sets the method for retrieving the value of your property.
       get
       {
          return varValue;
       }
       // Sets the method for setting the value of your property.
       set
       {
          varValue = value;
       }
    }
    

    此程式碼會設定方法,系統會使用該方法來儲存和擷取 ButtonValue 屬性。 get 陳述式會將傳回值設為儲存在私用變數 varValue 的值,而 set 陳述式會使用 value 關鍵字設定私用變數的值。

  3. 從 [檔案] 功能表選擇 [全部儲存] 以儲存專案。

測試控制項

控制項不是獨立專案;它們必須裝載在容器中。 若要測試您的控制項,您必須提供測試專案讓控制項在其中執行。 您也必須藉由建置 (編譯) 控制項,讓控制項可供測試專案存取。 在本節中,您將會建置您的控制項,並且在 Windows Form 中進行測試。

若要建置您的控制項

在 [建置] 功能表上,按一下 [建置方案]。 建置應該會成功,沒有編譯器錯誤或警告。

若要建立測試專案

  1. 在 [檔案] 功能表上,指向 [新增],然後選取 [新增專案],以開啟 [加入新的專案]對話方塊。

  2. 選取 [Visual C#] 節點下方的 [Windows] 節點,然後按一下 [Windows Forms 應用程式]

  3. 在 [名稱] 方塊中,輸入 Test

  4. 在 [方案總管] 中,以滑鼠右鍵按一下測試專案的 [參考] 節點,然後從捷徑功能表選取 [加入參考],以顯示 [加入參考] 對話方塊。

  5. 按一下標籤為 [專案] 的索引標籤。 您的 ValueButtonLib 專案會列在 [專案名稱] 底下。 按兩下專案以將參考新增至測試專案。

  6. 在 [方案總管] 中,以滑鼠右鍵按一下 [測試],然後選取 [建置]

若要將控制項新增至表單

  1. 在 [方案總管] 中,以滑鼠右鍵按一下 [Form1.cs],然後從捷徑功能表選擇 [檢視表設計工具]

  2. 在 [工具箱] 中,選取 [ValueButtonLib 元件]。 按兩下 [ValueButton]

    [ValueButton] 隨即出現在表單上。

  3. 以滑鼠右鍵按一下 [ValueButton],然後從捷徑功能表選取 [屬性]

  4. 在 [屬性] 視窗中,檢查此控制項的屬性。 請注意,它們與標準按鈕所公開的屬性相同,不同之處是有一個額外屬性 ButtonValue。

  5. ButtonValue 屬性設定為 5

  6. 在 [工具箱] 的 [所有 Windows Forms] 索引標籤上,按兩下 [標籤] 以將 Label 控制項新增至您的表單。

  7. 重新將標籤放置在表單的中央。

  8. 按兩下 valueButton1

    在 [程式碼編輯器] 中開啟至 valueButton1_Click 事件。

  9. 插入下列程式碼行。

    label1.Text = valueButton1.ButtonValue.ToString();
    
  10. 在 [方案總管] 中,以滑鼠右鍵按一下 [測試],然後從捷徑功能表選擇 [設定為啟始專案]

  11. 從 [偵錯] 功能表中,選取 [開始偵錯]

    Form1 隨即出現。

  12. 按一下 valueButton1

    數字 '5' 會顯示在 label1 中,示範繼承的控制項之 ButtonValue 屬性已透過 valueButton1_Click 方法傳遞至 label1。 因此,ValueButton 控制項會繼承標準 Windows Forms 按鈕的所有功能,但是會公開額外的自訂屬性。

另請參閱