我們知道.NET的開發平台提了一個名稱空間System.Windows.Forms,在此名稱空間中提供了許多開發Windows Form的類和對象,這些類和對象不僅內容十分豐富,而且還具有十分強大的拓展性,可以利用這些類和對象,簡單而迅速的開發出自己需要的組件來。本文就將介紹如何利用.Net 開發平台原有的類和對象寫一個自己的WinForm組件,如何編譯自己的組件,且如何在一個客戶程序中使用它。
一. 程序設計和運行的基本環境:
(1).視窗2000服務器版
(2)..Net FrameWork SDK Beta 2 版
二. 本文中開發的組件功能介紹:
(1).本文中開發的組件是一個自定義的組件,它是由二個組件合並而成的,一個是標簽組件( Lable ),另外一個是文本框組件( TextBox )。
(2).自定義組件中定義了了二個新的屬性,一個屬性是Text,這個屬性是通過派生原有的文本框中的Text屬性而得到的;另外一個屬性是LabelText,它是通過繼承了原有的標簽的Text屬性而得到的。
(3).組件的用途。
在程序設計中,很多時候是要定義一個標簽,標簽顯示要輸入的文本內容。然後再定義一個文本框,填入信息。使用了本組件後,只要定義一個此組件,然後對組件屬性設定不同的值就可以了。這樣就簡化了程序設計過程。這一點將在後面的組件應用中得到體現。
三. 開發組件中的難點和重點:
(1).如何設定自定義組件的內容:
本組件是由標簽組件和文本框組件組成的,首先要定義此組件的組成結構。具體的程序設計如下:
//LabledTextBox組件是繼承了 UserControl組件的 public class LabeledTextBox : UserControl { //定義本組件的組成結構 private Label myLabel ; private TextBox myTextBox ; …… }
(2).如何派生文本框中的Text屬性,而生成自己的新的屬性:
由於是派生文本框的Text屬性,所以在程序中用到了關鍵字"override"。並且通過關鍵字"set"設定屬性,"get"關鍵字來讀取組件的屬性值。具體程序設計如下:
//組件中的Text屬性,是從文本框的Text的屬性派生而來 public override string Text { get { return myTextBox.Text ; } set { myTextBox.Text = value ; } }
(3).如何創建一個新的屬性LabelText,並且此屬性值是通過繼承現有的標簽的"Text"屬性而得到的。具體的程序設計如下:
//創建一個新的屬性LabelText,並且此屬性的值是通過繼承此組件中的標簽的Text屬性值 public string LabelText { get { return myLabel.Text ; } set { myLabel.Text = value ; } }四. 自定義組件的源程序代碼( control.cs ):
control.cs源代碼如下: using System.Windows.Forms ; //定義封裝此組件的名稱空間 namespace MyControls { //LabledTextBox組件是繼承了 UserControl組件的 public class LabeledTextBox : UserControl { //定義本組件的組成結構 private Label myLabel ; private TextBox myTextBox ; public LabeledTextBox ( ) { InitializeComponent ( ) ; } public void InitializeComponent ( ) { //定義一個標簽 myLabel = new Label ( ) ; myLabel.Location = new System.Drawing.Point ( 0 , 0 ) ; myLabel.Size = new System.Drawing.Size ( 100 , 20 ) ; //定義一個文本框 myTextBox = new TextBox ( ) ; myTextBox.Location = new System.Drawing.Point ( 105 , 0 ) ; myTextBox.Size =new System.Drawing.Size ( 100 , 20 ) ; //同樣要設定所希望的組件大小 this.Size =new System.Drawing.Size ( 205 , 20 ) ; //加入組件 this.Controls.Add ( myLabel ) ; this.Controls.Add ( myTextBox ) ; } //組件中的Text屬性,是從文本框的Text的屬性派生而來 public override string Text { get { return myTextBox.Text ; } set { myTextBox.Text = value ; } } //創建一個新的屬性LabelText,並且此屬性的值是通過繼承此組件中的標簽的 Text屬性值 public string LabelText { get { return myLabel.Text ; } set { myLabel.Text = value ; } } } }
至此,我們已經完成了一個新的組件的構建過程。下面我們將編譯源程序文件,生產組件.