荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: DotNET
标  题: [转载] C#编程入门三部曲
发信站: 荔园晨风BBS站 (Mon Jan 14 09:34:49 2002), 转信

【 以下文字转载自 Program 讨论区 】
【 原文由 cyclong 所发表 】
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.
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表示这个控件从不被聚焦


- 设置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#的强大
功能了。










--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.36]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.52.239]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店