程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 用Visual C#做WinForm組件

用Visual C#做WinForm組件

編輯:關於C#

我們知道.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 ;
   }
  }
 }
}

至此,我們已經完成了一個新的組件的構建過程。下面我們將編譯源程序文件,生產組件.

五. 編譯組件:

到目前為止,我們所做的工作和正常的應用程序的內部編寫一個類沒有什麼區別,所不同的是下面的編譯過程,我們編譯的結果是創建一個庫,而不是一個應用程序。具體的編譯命令如下:

csc /r:system.windows.forms.dll /t:library control.cs

編譯完成後,將得到組件control.dll

六. 創建一個簡單的客戶應用程序:

使用自定義的組件和使用.Net FrameWork SDK中提供的組件沒有任何區別,都是按照以下步驟來進行的:

(1).導入組件的名稱空間,在應用程序中,就是導入MyControls。具體如下:

using MyControls ;

(2).在程序中定義由此名稱空間封裝的組件:在程序中,使用了三個新的組件。具體如下:

protected LabeledTextBox name , address , zip ;

(3).設定這些組件的屬性,在程序中可以看到是如何設定組件的二個自定義的屬性的。下面語句就是介紹如何在程序中定義組件的新屬性。

name = new LabeledTextBox ( ) ;
name.Location = new System.Drawing.Point ( 5 , 5 ) ;
name.LabelText = "姓名:" ;

可見和定義其他屬性沒有什麼區別。

(4).把組件加入到窗體中。

下面就是按照以上步驟所得到的源程序代碼( sample.cs )和此代碼生成的執行文件的運行界面:

sample.cs源程序如下:
using System.Windows.Forms ;
using MyControls ;//導入組件的名稱空間
using System ;
public class Form1 : Form
{
//定義新構建的組件
protected LabeledTextBox name , address , zip ;
protected Button show ;
public Form1 ( )
{
InitializeComponent ( ) ;
}
public static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
public void InitializeComponent ( )
{
//創建新的組件,此組件中就封裝了標簽和文本框
name = new LabeledTextBox ( ) ;
address= new LabeledTextBox ( ) ;
zip = new LabeledTextBox ( ) ;
show= new Button ( ) ;
//設定新組件的屬性值,可以看看如何設定Text屬性和LabelText屬性
name.Location = new System.Drawing.Point ( 5 , 5 ) ;
name.LabelText = "姓名:" ;
address.Location = new System.Drawing.Point ( 5 , 35 ) ;
address.LabelText = "住址:" ;
zip.Location = new System.Drawing.Point ( 5 , 70 ) ;
zip.LabelText = "郵編:" ;
show.Location = new System.Drawing.Point ( 5 , 100 ) ;
show.Text = "顯示組件屬性值" ;
show.Size = new System.Drawing.Size (100, 25) ;
show.Click += new System.EventHandler ( show_Click ) ;
this.Text = "顯示自建組件的LabelText屬性和Text屬性值!" ;
this.Controls.Add ( name ) ;
this.Controls.Add ( address ) ;
this.Controls.Add ( zip ) ;
this.Controls.Add ( show ) ;
}
protected void show_Click ( object sender , EventArgs e )
{
string message = name.LabelText + " " + name.Text ;
message+="\n" + address.LabelText + " " + address.Text ;
message+="\n" + zip.LabelText + " " + zip.Text ;
MessageBox.Show ( message ,"組件的LabelText屬性和Text屬性值如下:") ;
}
}

經過一下編譯命令:

csc /r:control.dll sample.cs

產生的執行文件的運行界面如下:

七. 總結:

面向組件編程是以後程序設計的一個重要的方向,通過以上介紹,我們可以了解如何用Visual C#進行簡單的組件編程。在用Visual C#編寫組件程序的過程中,也可以看出,比起其他語言來說,用Visual C#編寫組件在編寫和分發的時候,程序員相對輕松了許多,不需要考慮很多問題了,而這些問題在用其他程序設計語言的時候卻是一定要考慮的。為什麼?因為Visual C#已經在底層把這些問題給處理好了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved