逐步解說:使用 C# 從 Windows Forms 控制項繼承
您可以使用 C# 透過繼承建立功能強大的自訂控制項。 您可以透過繼承建立控制項,不僅保留標準 Windows Forms 控制項的所有固有功能,同時也納入自訂功能。 在本逐步解說中,您將會建立簡單的繼承控制項,名為 ValueButton
。 此按鈕會繼承標準 Windows Forms Button 控制項的功能,且會公開名為 ButtonValue
的自訂屬性。
建立專案
當您建立新的專案時,您會指定其名稱以設定根命名空間、組件名稱和專案名稱,並且確定預設元件將會在正確的命名空間中。
若要建立 ValueButtonLib 控制項程式庫和 ValueButton 控制項
在 Visual Studio 中建立新的 Windows Forms 控制項程式庫專案,並將其命名為 ValueButtonLib。
專案名稱,
ValueButtonLib
,預設也會指派給根命名空間。 根命名空間是用來限定組件中的元件名稱。 例如,如果兩個組件提供元件,名為ValueButton
,您可以使用ValueButtonLib.ValueButton
指定您的ValueButton
元件。 如需詳細資訊,請參閱命名空間。在 [方案總管] 中,以滑鼠右鍵按一下 [UserControl1.cs],然後從捷徑功能表選擇 [重新命名]。 將檔案名稱變更為 ValueButton.cs。 當系統詢問您是否要重新命名程式碼元素 '
UserControl1
' 的所有參考時,按一下 [是]按鈕。在 [方案總管] 中,以滑鼠右鍵按一下 [ValueButton.cs],然後選取 [檢視程式碼]。
找出
class
陳述式行public partial class ValueButton
,並將此控制項所繼承的類型從 UserControl 變更為 Button。 這可讓繼承的控制項繼承 Button 控制項的所有功能。在 [方案總管] 中,開啟 [ValueButton.cs] 節點以顯示設計工具產生的程式碼檔案,ValueButton.Designer.cs。 在 [程式碼編輯器] 中開啟此檔案。
找出
InitializeComponent
方法,並移除指派 AutoScaleMode 屬性的那一行。 此屬性不存在於 Button 控制項中。從 [檔案] 功能表選擇 [全部儲存] 以儲存專案。
將屬性新增至繼承的控制項
繼承 Windows Forms 控制項的可能用法之一是建立外觀及操作與標準的 Windows Forms 控制項相同的控制項,但是公開自訂屬性。 在本節中,您會將名為 ButtonValue
的屬性新增至您的控制項。
若要新增 Value 屬性
在 [方案總管] 中,以滑鼠右鍵按一下 [ValueButton.cs],然後從捷徑功能表按一下 [檢視程式碼]。
尋找
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
關鍵字設定私用變數的值。從 [檔案] 功能表選擇 [全部儲存] 以儲存專案。
測試控制項
控制項不是獨立專案;它們必須裝載在容器中。 若要測試您的控制項,您必須提供測試專案讓控制項在其中執行。 您也必須藉由建置 (編譯) 控制項,讓控制項可供測試專案存取。 在本節中,您將會建置您的控制項,並且在 Windows Form 中進行測試。
若要建置您的控制項
在 [建置] 功能表上,按一下 [建置方案]。 建置應該會成功,沒有編譯器錯誤或警告。
若要建立測試專案
在 [檔案] 功能表上,指向 [新增],然後選取 [新增專案],以開啟 [加入新的專案]對話方塊。
選取 [Visual C#] 節點下方的 [Windows] 節點,然後按一下 [Windows Forms 應用程式]。
在 [名稱] 方塊中,輸入 Test。
在 [方案總管] 中,以滑鼠右鍵按一下測試專案的 [參考] 節點,然後從捷徑功能表選取 [加入參考],以顯示 [加入參考] 對話方塊。
按一下標籤為 [專案] 的索引標籤。 您的 ValueButtonLib 專案會列在 [專案名稱] 底下。 按兩下專案以將參考新增至測試專案。
在 [方案總管] 中,以滑鼠右鍵按一下 [測試],然後選取 [建置]。
若要將控制項新增至表單
在 [方案總管] 中,以滑鼠右鍵按一下 [Form1.cs],然後從捷徑功能表選擇 [檢視表設計工具]。
在 [工具箱] 中,選取 [ValueButtonLib 元件]。 按兩下 [ValueButton]。
[ValueButton] 隨即出現在表單上。
以滑鼠右鍵按一下 [ValueButton],然後從捷徑功能表選取 [屬性]。
在 [屬性] 視窗中,檢查此控制項的屬性。 請注意,它們與標準按鈕所公開的屬性相同,不同之處是有一個額外屬性 ButtonValue。
將 ButtonValue 屬性設定為 5。
在 [工具箱] 的 [所有 Windows Forms] 索引標籤上,按兩下 [標籤] 以將 Label 控制項新增至您的表單。
重新將標籤放置在表單的中央。
按兩下
valueButton1
。在 [程式碼編輯器] 中開啟至
valueButton1_Click
事件。插入下列程式碼行。
label1.Text = valueButton1.ButtonValue.ToString();
在 [方案總管] 中,以滑鼠右鍵按一下 [測試],然後從捷徑功能表選擇 [設定為啟始專案]。
從 [偵錯] 功能表中,選取 [開始偵錯]。
Form1
隨即出現。按一下
valueButton1
。數字 '5' 會顯示在
label1
中,示範繼承的控制項之ButtonValue
屬性已透過valueButton1_Click
方法傳遞至label1
。 因此,ValueButton
控制項會繼承標準 Windows Forms 按鈕的所有功能,但是會公開額外的自訂屬性。