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

實例介紹C# GUI開發

編輯:關於C#

在本文裡,通過編輯一個小小的可以將溫度從攝氏轉換到華氏的程序,我們將親身體會到C# GUI開發過程。閱讀本文最基本的要求是您要具有C#及面向對象程序設計的基本知識。本文的寫作宗旨是介紹C#,如果您希望編譯或是運行本文所列舉的程序,則需要有.NET Framework SDK的支持。

創建一個視窗應用程序主要包括以下的基本步驟:創建適合的表單,在表單上添加control,最後添加代碼。完成上述過程所需用到的C# 以及 .NET framework我們可以在System.WinForms namespace中找到。

第一步,創建表單。

我們以 class System.WinForms 為起源,創建一個class,然後初始化屬性。本文舉例中,Class的定義起始如下

public class TempConverter : System.WinForms.Form {
.
.
.
}

下面是我們想要的主窗口式樣

大小為180*90像素

不能隨意修改視窗大小。

標題顯示為 °C->°F / °F->°C

表單出現在屏幕中央

我們不需要"幫助"鍵(我們編制的應用程序過於簡便,以至不需要此類幫助)

我們不需要讓用戶有擴大該程序視窗范圍的權限(因為在給定尺寸裡,什麼都清晰可見)

通過設定TempConverter對象的屬性值初始化表單。屬性值的設定有兩種方法:

一、使用方法設定屬性值

二、通過屬性變量直接設定。

以下代碼。如果您想知道更多的有關於WinForms class的屬性和方法的知識,則可以參閱.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;

通過上述步驟,我們可以把所有的代碼連接在一起,這樣我們就能很方便的編輯、運行程序觀看表單的外觀。為此,我們要用到class 定義,要創建一個構造器(該構造器包含了上面所提到的代碼並會初始化主視窗的外觀),然後還需要建立一個main方法。具體建立步驟如下:

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.dll 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,以便當點擊Tab鍵 時,可以顯示focus並未被設置
· 設置TabIndex =X表示在點擊TAB鍵x次後,focus會被設置在確定的控件上。
· text屬性即是控件顯現出來的文本。
· Controls.Add()將 控件添加到了表單上(快捷添加控件的方法是:.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;
}

第三行至第八行的指令將會試著將數值收集到Celsius文本框裡。如果是double數值那麼我們將會把數值存於dTempCel單元中,否則我們將清除兩個文本框的內容的同時退出。下一步,利用dTempCel中的值,使用第九行的公式來存儲華氏溫度,結果顯示在華氏文本框中。

重復相同的步驟來完成華氏button的代碼:

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;
}

最後一步則是將其結合起來。具體步驟參照如下:

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);
file://= 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;
}
}

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