C#編程入門三部曲

來源:互聯網
上載者:User
編程 C#是微軟.NET架構的主力開發語言,它功能廣泛而強大,Web開發人員應該毫不猶豫地
擁抱它。本文就通過一個攝氏溫度與華氏溫度間相互轉換的例子對C#
的GUI編程進行介紹,旨在帶領你快速步入C#之強大與神奇的編程世界。
準備條件
要理解本文所舉常式,首先要對C#和物件導向的編程有一個基本的瞭解。關於 C#的基本
知識,請參閱 C#入門
這篇文章。要編譯並運行舉例的應用程式,就需 下載
.NET Framework SDK,它當前的一個版本是Beta 1。
作為程式開發人員,我們都知道建立一個典型的基於 windows 的應用程式應該包含以下這
些基本步驟:建立一個適當的表單;向表單中增加控制項;最後增加響應使用者事件的代碼

C#和 .NET 架構出現後,完成這些步驟所需要的工具都可以在System.WinForms 名子空
間中找到。
 
第一步 建立一個表單
這非常簡單,只需要建立一個從 System.WinForms.Form 類中衍生出來的類,並對適當
的屬性進行初始化就可以。在我們的例子中,類定義是這樣開始的:
public class TempConverter : System.WinForms.Form {
  .
  .
  .
}
以下是我們希望的主視窗(表單)視圖:
我們希望表單具備如下特徵:
- 視窗大小為 180乘 90象素
- 不給使用者改變視窗大小的能力
- 標題列中顯示的標題是 +C -> +F / +F -> +C
- 初始狀態下表單顯示在螢幕的中心
- 不想要協助按鈕(應用程式太簡單,不需要協助按鈕)
- 不給使用者提供將應用程式最大化的能力
(因為在給定的視窗尺寸內,一切都是可視的,因此不需要最大化)
將表單初始化成給定的規格涉及到對 TempConverter 對象的某些屬性進行設定。有些屬
性有改變值的方法,而其它屬性則要通過更新適當的執行個體變數來直接修改。下面是有關
代碼。如果想要得到關於WinForms
類的屬性和方法的更多資訊,那麼 .NET Framework SDK 所提供的文檔可以算是一個很
好的參考資料。
this.SetSize(180,90);
this.BorderStyle = FormBorderStyle.FixedDialog;
this.Text = " +C -> +F /  +F -> +C ";
this.StartPosition = FormStartPosition.CenterScreen;
this.HelpButton = false;
this.MaximizeBox = false;
現在把這些代碼放在一起進行編譯和運行,看看錶單運行後是什麼樣子。這裡要使用類
定義,建立一個構造器(其中要包含以上的代碼來初始化主視窗的外觀),並且要建立
一個主方法來建立類的一個例示。以下是完成這一工作的代碼:
public class TempConverter : System.WinForms.Form {
       public TempConverter() {
        this.SetSize(180,90);
             this.BorderStyle = FormBorderStyle.FixedDialog;
             this.Text =" +C -> +F /  +F -> +C ";
             this.StartPosition = FormStartPosition.CenterScreen;
             this.HelpButton = false;
             this.MaximizeBox = false;
       }
       public static void Main() {
             Application.Run( new TempConverter() );
       }
}
以上只有 Main() 方法所在行是新的代碼。
    Application.Run(new TempConverter());
上面這一行的意思是用新表單來啟動應用程式。
假設源檔案叫做TempConverter.cs,那麼執行以下的命令編譯代碼:
     csc /r:System.dll  /r:Microsoft.Win32.Interop.dll /r:System.WinForms.dl
l TempConverter.cs
這裡不再詳細講解編譯命令,因為當Visual Studio .NET可用時,就不必要發出命令列
的編譯命令了。

第二步 向表單中增加控制項
接著的一步是向表單中增加控制項。我們為每個控制項建立一個執行個體變數,對這些新執行個體變
量進行初始化,最後把每個控制項都放在表單中。這裡是增加了控制項之後表單的樣子,以
及更新過的代碼:
public class TempConverter : System.WinForms.Form {
    Label   lTempFah = new Label();
    Label   lTempCel = new Label();
    TextBox tTempFah = new TextBox();
    TextBox tTempCel = new TextBox();
    Button  bnCtoF = new Button();
    Button  bnFtoC = new Button();
    public TempConverter() {
       this.SetSize(180,90);
       this.BorderStyle = FormBorderStyle.FixedDialog;
       this.Text =" +C -> +F /  +F -> +C ";
       this.StartPosition = FormStartPosition.CenterScreen;
       this.HelpButton = false;
       this.MaximizeBox = false;
       tTempCel.TabIndex = 0;
       tTempCel.SetSize(50,25);
       tTempCel.SetLocation(13,5);
       lTempCel.TabStop = false;
       lTempCel.Text = "+C ";
       lTempCel.SetSize(25, 25);
       lTempCel.SetLocation(65,5);
       tTempFah.TabIndex = 1;
       tTempFah.SetSize(50,25);
       tTempFah.SetLocation(90,5);
       lTempFah.TabStop = false;
       lTempFah.Text = "+F ";
       lTempFah.SetSize(25,25);
       lTempFah.SetLocation(142,5);
       bnCtoF.TabIndex = 2;
       bnCtoF.Text = "+C to +F ";
       bnCtoF.SetSize(70,25);
       bnCtoF.SetLocation(13,35);
       bnFtoC.TabIndex = 3;
       bnFtoC.Text = "+F to  +C ";
       bnFtoC.SetSize(70,25);
       bnFtoC.SetLocation(90,35);
       this.Controls.Add(tTempCel);
       this.Controls.Add(lTempCel);
       this.Controls.Add(tTempFah);
       this.Controls.Add(lTempFah);
       this.Controls.Add(bnCtoF);
       this.Controls.Add(bnFtoC);
}
以上代碼首先建立兩個標籤、兩個文字框和兩個按鈕,然後對每個控制項進行初始化並將
其加入表單中。具體的含義如下:
- SetSize() 初始化控制項的尺寸
- SetLocation() 初始化表單中控制項的位置
- 設定控制項的TabStop 屬性為false表示這個控制項從不被聚焦
- 設定TabIndex 為 X 表示當敲擊TAB鍵x次後聚焦此控制項
- 控制項的text 屬性工作表示顯示在其上的文字資訊
- this.Controls.Add() 表示在表單上放置一個控制項,要快速地添加每個控制項,可以這
麼書寫:this.Controls = new
Control[] { tTempCel, lTempCel, tTempFar?.}

第三步 增加響應使用者事件代碼
還有最後一步就可以大功告成了,就是增加一個方法來捕捉按鈕點擊事件。這裡就是指
從攝氏到華氏的按鈕點擊代碼:
private void bnCtoF_Click(Object sender, EventArgs e) {
    double dTempCel = 0;
    double dTempFah = 0;
    try { dTempCel = tTempCel.Text.ToDouble(); }
    catch(Exception) {
       tTempCel.Clear();
       tTempFah.Clear();
       return;
    }
    dTempFah = 1.8*dTempCel+32;
    tTempFah.Text = dTempFah.ToString();
    tTempFah.Focus();
    tTempFah.SelectionStart = 0;
    tTempFah.SelectionLength = 0;
    tTempCel.Focus();
    tTempCel.SelectionStart = 0;
    tTempCel.SelectionLength = 0;
}
第四行到第八行(也就是try 區中的一切)取回Celsius(攝氏)文字框中的數值。如果
它是一個雙位元組數,就將其儲存在dTempCel中,否則就清除兩個文字框並退出。接著,
用儲存在dTempCel
中的值,我們用第9 行中的公式將相同的溫度儲存在Fahrenheit中。將這個新的數值在
Fahrenheit(華氏)文字框中顯示, 然後將游標放在每個文字框中,以便將指標設定
到開頭。(如果不將指標設定到開頭,我們就會看到一個長長的數位結尾,要看開頭
就必須滾動滑鼠)。
以下是Fahrenheit按鈕的代碼,它將完成同樣的任務,只不過是相反的處理:
private void bnFtoC_Click(Object sender, EventArgs e) {
    double dTempCel = 0;
    double dTempFah = 0;
    try { dTempFah = tTempFah.Text.ToDouble(); }
    catch(Exception) {
       tTempCel.Clear();
       tTempFah.Clear();
       return;
    }
    dTempCel = (dTempFah-32)/1.8;
    tTempCel.Text = dTempCel.ToString();
    tTempCel.Focus();
    tTempCel.SelectionStart = 0;
    tTempCel.SelectionLength = 0;
    tTempFah.Focus();
    tTempFah.SelectionStart = 0;
    tTempFah.SelectionLength = 0;
}
接著,我們需要將適當的點擊事件捕捉方法與按鈕的 Click事件聯絡起來。要完成這一
步,我們將以下兩行放在類的構造器中:
bnCtoF.Click += new EventHandler(this.bnCtoF_Click);
bnFtoC.Click += new EventHandler(this.bnFtoC_Click);

最後,請看完整的代碼:
using System;
using System.WinForms;
public class TempConverter : System.WinForms.Form {
    Label   lTempFah = new Label();
    Label   lTempCel = new Label();
    TextBox tTempFah = new TextBox();
    TextBox tTempCel = new TextBox();
    Button  bnCtoF = new Button();
    Button  bnFtoC = new Button();
    public TempConverter() {
       this.SetSize(180,90);
       this.BorderStyle = FormBorderStyle.FixedDialog;
       this.Text = " +C -> +F /  +F -> +C ";
       this.StartPosition = FormStartPosition.CenterScreen;
       this.HelpButton = false;
       this.MaximizeBox = false;
       tTempCel.TabIndex = 0;
       tTempCel.SetSize(50,25);
       tTempCel.SetLocation(13,5);
       lTempCel.TabStop = false;
       lTempCel.Text = "C";
       lTempCel.SetSize(25, 25);
       lTempCel.SetLocation(65,5);
       tTempFah.TabIndex = 1;
       tTempFah.SetSize(50,25);
       tTempFah.SetLocation(90,5);
       lTempFah.TabStop = false;
       lTempFah.Text = "F";
       lTempFah.SetSize(25,25);
       lTempFah.SetLocation(142,5);
       bnCtoF.TabIndex = 2;
       bnCtoF.Text = "C to F";
       bnCtoF.SetSize(70,25);
       bnCtoF.SetLocation(13,35);
       bnCtoF.Click += new EventHandler(this.bnCtoF_Click);
       bnFtoC.TabIndex = 3;
       bnFtoC.Text = "F to C";
       bnFtoC.SetSize(70,25);
       bnFtoC.SetLocation(90,35);
       bnFtoC.Click += new EventHandler(this.bnFtoC_Click);
       this.Controls.Add(tTempCel);
       this.Controls.Add(lTempCel);
       this.Controls.Add(tTempFah);
       this.Controls.Add(lTempFah);
       this.Controls.Add(bnCtoF);
       this.Controls.Add(bnFtoC);
       //= new Control [] { tTempCel, lTempCel, tTempFah, lTempFah, bnCtoF,
bnFtoC };
    }
    public static void Main() {
       Application.Run( new TempConverter() );
    }
    private void bnCtoF_Click(Object sender, EventArgs e) {
       double dTempCel = 0;
       double dTempFah = 0;
       try { dTempCel = tTempCel.Text.ToDouble(); }
       catch(Exception) {
          tTempCel.Clear();
          tTempFah.Clear();
          return;
       }
       dTempFah = 1.8*dTempCel+32;
       tTempFah.Text = dTempFah.ToString();
       tTempFah.Focus();
       tTempFah.SelectionStart = 0;
       tTempFah.SelectionLength = 0;
       tTempCel.Focus();
       tTempCel.SelectionStart = 0;
       tTempCel.SelectionLength = 0;
    }
    private void bnFtoC_Click(Object sender, EventArgs e) {
       double dTempCel = 0;
       double dTempFah = 0;
       try { dTempFah = tTempFah.Text.ToDouble(); }
       catch(Exception) {
          tTempCel.Clear();
          tTempFah.Clear();
          return;
       }
       dTempCel = (dTempFah-32)/1.8;
       tTempCel.Text = dTempCel.ToString();
       tTempCel.Focus();
       tTempCel.SelectionStart = 0;
       tTempCel.SelectionLength = 0;
       tTempFah.Focus();
       tTempFah.SelectionStart = 0;
       tTempFah.SelectionLength = 0;
    }
}
結 語
到此為止,你看到了如何用C#進行編程的一個完整過程。這個例子雖然很簡單,但是麻
雀雖小,五髒俱全,理解其中的原理後,就可以大顯身手,充分發揮C#的強大功能了。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.