我們知道.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 ;
}
}
}
}至此,我們已經完成了一個新的組件的構建過程。下面我們將編譯源程序文件,生產組件.