10常用控件和类的使用

常用控件和类的使用


 

Visual Studio.Net(简称VS.Net)使用控件(组件)设计Windows应用程序。将VS.Net工具箱窗口中的控件放到窗体中,使用属性窗口改变控件属性,或在程序中用语句修改控件属性,设计应用程序界面,为控件增加事件函数,完成指定的功能。本章所有例题都是使用VS.Net完成。

 

3.1      控件通用属性

 

大部分控件,例如Label、Button、TextBox等,都是Control类的派生类。Control类定义了这些派生类控件通用的一组属性和方法,以下是Control类的一些常用属性:

 

l  Name:控件的名称,区别控件类不同对象的唯一标志。例如用语句Button button1=new Button()建立一个Button类对象,那么这个Button类对象Name属性的值为button1。

 

l  Location:表示控件对象在窗体中的位置。本属性是一个结构,结构中有两个变量,x和y,分别代表控件对象左上角顶点的x和y坐标,该坐标系以窗体左上角为原点,x轴向右为正方向,y轴向下为正方向,以像素为单位。修改Location,可以移动控件的位置,例如:button1.Location=new Point(100,200)语句移动按钮button1到新位置。

 

l  Left和Top:这两个属性等效于Location 属性的Location.x和Location.y。修改Left和Top,可以移动控件的位置,例如:button1.Left=100语句水平移动按钮button1。

 

l  Size:本属性是一个结构,结构中有两个变量,Width和Height分别代表控件对象的宽和高,例如可用语句button1.Size.Width=100修改Button控件对象button1的宽。

 

l  BackColor:控件背景颜色。

 

l  Enabled:布尔变量,为true表示控件可以使用,为false表示不可用,控件变为灰色。

 

l  Visible:布尔变量,为true控件正常显示,为false控件不可见。

 

l  Modifier:定义控件的访问权限,可以是private、public、protected等。默认值为private。

 

l  Cursor:鼠标移到控件上方时,鼠标显示的形状。默认值为Default,表示使用默认鼠标形状,即为箭头形状。

 

3.2      Form类

 

Form类是.Net系统中定义的窗体类(WinForm),属于System.Windows.Forms命名空间。Form类对象具有Windows应用程序窗口的最基本功能。它可以是对话框、单文档或多文档应用程序窗口的基类。Form类对象还是一个容器,在Form窗体中可以放置其它控件,例如菜单控件、工具条控件等等,还可以放置子窗体。Form类常用属性、方法和事件如下:

 

l  属性AutoScroll:布尔变量,表示窗口用户区是否在需要时自动添加滚动条。

 

l  属性FormBorderStyle:窗体边界风格,如有无边界、单线边界、3D效果、可否调整等。

 

l  属性Text:字符串类型,窗体标题栏中显示的标题。

 

l  属性AcceptButton:记录一个按钮对象的Name属性值,用户键入回车时,等效单击这个按钮对象。

 

l  属性CancelButton:记录一个按钮对象的Name属性值,用户键ESC键时,等效单击这个按钮对象。以上两个属性多用于对话框,例如打开文件对话框,用户键入回车,相当于单击确定按钮。

 

l  属性MaxiMizeBox:窗体标题栏右侧最大化按钮是否可用,设置为false,按钮不可用。

 

l  属性MiniMizeBox:窗体标题栏右侧最小化按钮是否可用,设置为false,按钮不可用。如果属性MaxiMizeBox和MiniMizeBox都设置为false,将只有关闭按钮。在不希望用户改变窗体大小时,例如对话框,将两者都设置为false。

 

l  方法Close():窗体关闭,释放所有资源。如窗体为主窗体,执行此方法,程序结束。

 

l  方法Hide():隐藏窗体,但不破坏窗体,也不释放资源,可用方法Show()重新打开。

 

l  方法Show():重新显示窗体。

 

l  事件Load:在窗体显示之前发生,可以在其事件处理函数中做一些初始化的工作。

 

3.3      标签(Label)控件

 

标签控件用来显示一行文本信息,但文本信息不能编辑,常用来输出标题、显示处理结果和标记窗体上的对象。标签一般不用于触发事件。Label控件常用属性如下:

 

l  Text:要显示的字符串

 

l  AutoSize:控件大小是否随显示字符串长度自动调整,默认值为false,不调整。

 

l  ForeColor:控件Label显示的字符颜色。

 

l  Font:字符串所使用的字体,包括所使用的字体名、字体的大小、字体的风格等,具体修改方法见下边的例子。

 

例子e3_3:本例在窗口中显示一行文本,该例虽然简单,但包括了用VS.Net建立C# Windows应用程序的基本步骤。具体实现步骤如下:

 

(1)用2.4.2节的方法建立一个新项目,生成一个空白窗体(Form1),见图2.4.2A。可以用属性窗口(图2.4.2B中图)修改窗体的属性,例如修改Form1的属性Text,可以修改窗体的标题。用鼠标拖动窗体边界上的小正方形,可以修改窗体打开时的初始大小。

 

(2)双击工具箱窗口(图2.4.2B左图)中"Windows窗体"类型下的Label控件,在窗体Form1中放置一个Label控件。该控件用来显示一行文本。可以用鼠标拖动控件Label到窗体的任意位置,并可拖动Label边界改变控件的大小。

 

(3)                         选中Label控件,在属性窗口中找到属性text,把它的属性值由“Label1”修改为“我的第一个程序”。接着在属性窗口中选中Font属性,单击Font属性右侧标题为"…"的按钮,打开"字体"对话框,在对话框中可以修改Label控件显示字符串的字体名称和字号等。也可以单击Font属性左边的+号,出现子属性,可编辑这些子属性,编辑完成后,单击Font属性左边的-号,隐藏Font的子属性。修改ForeColor属性可以修改Label控件显示字符的颜色。这是在设计阶段修改属性。

 

(4)编译,运行,可以看到窗口中按指定字体大小和颜色显示:我的第一个程序。运行效果如右图。

 

(5)保存项目。生成一个可执行程序需要多个文件,这些文件组成一个项目。一般把一个项目存到一个子目录中。单击"文件"|"全部保存"菜单项,保存所有文件。

 

(6)   关掉VS.Net,再启动。用菜单"文件"|"打开项目"菜单项打开刚才关闭的项目文件(扩展名为sln)。应能看到刚才关闭的设计界面。必须打开项目文件,才能完成编译工作。

 

3.4      按钮(Button)控件

 

用户单击按钮,触发单击按钮事件,自动调用单击按钮事件处理函数,完成指定的工作。Button控件常用属性和事件如下:

 

l  属性Text:按钮的标题。

 

l  事件Click:用户单击按钮触发的事件,一般称作按钮单击事件。

 

例子e3_4:本例说明如何用程序修改控件属性,使用控件方法,如何增加事件处理函数。本例在窗口中显示一行文字,增加2个按钮,单击标题为“红色“的按钮,把显示的文本颜色改为红色,单击标题为“黑色“的按钮,把显示的文本颜色改为黑色。实现步骤如下:

 

(1) 继续例子e3_3,放三个Button控件到窗体,修改它们的属性Text,使标题分别为红色、黑色、退出。设计好的界面如右图。

 

(2)选中标题为“红色“的按钮,打开事件窗口(见图2.4.2B右图),显示该控件所能响应的所有事件,其中左侧为事件名称,右侧为该事件的事件处理函数名称,如果右侧为空白,表示还没有为该事件指定事件处理函数。选中Click事件,双击其右侧空白处,自动增加单击(Click)标题为“红色“的按钮的事件处理函数,在函数中增加使标签显示字符颜色变为红色的代码,增加代码后的完整事件处理函数如下:

 

private void button1_Click(object sender, System.EventArgs e)

 

{   label1.ForeColor=Color.Red;//此行语句为程序员增加的代码,其余是自动增加的代码

 

}//注意label1是控件的名字(label的Name属性),用它来区分不同的控件。

 

(3)单击(Click)标题为“黑色“的按钮的事件处理函数如下:

 

private void button2_Click(object sender, System.EventArgs e)

 

{   label1.ForeColor=Color.Black;}//运行阶段修改属性

 

(4)单击(Click)标题为“退出“的按钮的事件处理函数如下:

 

private void button3_Click(object sender, System.EventArgs e)

 

{   Close();}//调用窗体Form1类的方法Close()

 

Close()为窗体Form1类的方法,作用是关闭窗体。由于关闭了主窗体,程序也就结束了。注意,引用主窗体的方法和属性时可不用指定对象名,换句话讲,如不指定属性或方法所属的对象名,默认为主窗体的属性或方法。而使用其它组件的属性及方法要指明所属组件对象,例如label1.ForeColor=Color.Red;

 

(5)编译,运行,单击标题为“红色“的按钮,窗体显示中文字符颜色变为红色,单击标题为“黑色“的按钮,窗体显示中文字符颜色变为黑色,单击标题为“退出“的按钮,结束程序。

 

3.5      事件处理函数的参数

 

事件处理函数一般有两个参数,第一个参数(object sender)为产生该事件对象的属性Name的值。例如例子e3_4中,单击标题为“红色“的按钮,第一个参数sender的值为button1。如希望例子e3_4中标题为“红色“的按钮和标题为“黑色“的按钮使用同一个单击按钮事件处理函数,首先为单击(Click)标题为“红色“的按钮的事件增加事件处理函数如下:

 

private void button1_Click(object sender,System.EventArgs e)

 

{   if(sender==button1)//判断是否是button1按钮产生的事件

 

label1.ForeColor=Color.Red;

 

else

 

label1.ForeColor=Color.Black;

 

}

 

然后选中标题为“黑色“的按钮,打开事件窗体(见图2.4.2B右图),选中Click事件,从其右侧下拉列表中选择标题为“红色“按钮的事件处理函数:button1_Click,这样两个按钮就使用相同的单击事件处理函数了。

 

事件处理函数第二个参数(System.EventArgs e)代表事件的一些附加信息,事件不同,所代表的信息也不相同,例如在后边的例子中可以看到,按下鼠标的事件处理函数中,e.X和e.Y分别为发生事件时鼠标位置的x坐标和y坐标,e.Button表示用户单击了鼠标哪个键,如为MouseButtons.Left,表示单击了鼠标左键。

 

3.6   文本框(TextBox)控件

 

TextBox控件,也叫文本框,用户可以在该控件中输入文本数据。TextBox控件常用属性和事件如下:

 

l  属性Text:记录用户在文本框中键入的字符串

 

l  属性MaxLength:单行文本框最大输入字符数。

 

l  属性ReadOnly:布尔变量,为true,不能在文本框中输入或编辑数据,但可用代码修改。

 

l  属性PasswordChar:如输入一个字符,用户在文本框中输入的所有字符都显示这个字符。一般用来输入密码。如为空,则正常显示输入的字符串。

 

l  属性MultiLine:布尔变量,为true,多行文本框,为false,单行文本框。

 

l  属性ScrollBars:MultiLine=true时有效,表示TextBox控件是否有滚动条,有4种选择:=0,无滚动条,=1,有水平滚动条,=2,有垂直滚动条,=3,有水平和垂直滚动条。

 

l  属性SelLength:可选中文本框中的部分或全部字符,本属性为所选择的文本的字符数。

 

l  属性SelStart:所选中文本的开始位置。

 

l  属性SelText:所选中的文本

 

l  属性AcceptsReturn:MultiLine=true时有效,布尔变量,为true,键入回车键,执行换行操作;为false,键入回车键,相当于单击窗体中的默认按钮。

 

l  事件TextChanged:在文本框中输入或编辑了数据,文本内容发生变化时发出的事件。

 

例子e3_6:本例要求用户在编辑框中输入两个乘数,单击按钮把相乘的结果在编辑框中显示出来。

 

(1)建立一个新的项目。放四个Label控件到窗体,Text属性分别为:被乘数、乘数、积、*、=。

 

(2)放三个textBox控件到窗体,属性Name为:textBox1、textBox2、textBox3,属性Text都为空,分别用来输入被乘数、乘数,显示积。

 

(3)放三个Button控件到窗体,Text属性分别为:求积、清空、退出。设计的界面如上图。

 

(4)标题为“求积“的按钮的单击事件处理函数如下:

 

private void button1_Click(object sender, System.EventArgs e)

 

{   float ss,ee;

 

    ss=Convert.ToSingle(textBox1.Text);

 

    ee=Convert.ToSingle(textBox2.Text);

 

    textBox3.Text=Convert.ToString(ss*ee);

 

}

 

(5)标题为“清空“的按钮的单击事件处理函数如下:

 

private void button2_Click(object sender,System.EventArgs e)

 

{   textBox1.Text="";

 

    textBox2.Text="";

 

    textBox3.Text="";

 

}

 

(6)标题为退出的按钮的单击事件处理函数如下:

 

private void button3_Click(object sender, System.EventArgs e)

 

{   Close();}

 

(7)   编译,运行,在文本框textBox1,textBox2分别输入被乘数2和乘数3,单击标题为“求积“的按钮,textBox3中显示6,单击标题为“清空“的按钮,三个文本框被清空,单击标题为“退出“的按钮,结束程序。

 

3.7      Convert类

 

Convert类中提供了一些静态方法,用来把一种类型数据转换为另一种类型数据。例如,Convert.ToSingle(textBox1.Text)把字符串textBox1.Text转换为单浮点数。Convert.ToString(3.14)把单浮点数3.14转换为字符串。其它转换函数还有:ToInt16(string)、ToInt32(string)、ToByte(char)、ToChar(Byte)、ToChar(int16)、ToDecimal(string)、ToDouble(string)、ToSByte(string)、ToUInt16(string)等。

 

3.8      单选按钮(RadioButton)和GroupBox控件

 

RadioButton是单选按钮控件,多个RadioButton控件可以为一组,这一组内的RadioButton控件只能有一个被选中。GroupBox控件是一个容器类控件,在其内部可放值其它控件,表示其内部的所有控件为一组,其属性Text可用来表示此组控件的标题。一般把RadioButton控件放到GroupBox控件中,表示这些RadioButton控件是一组。有一些特性是互斥的,例如性别,选择这类特性可用RadioButton和GroupBox控件。

 

GroupBox控件常用属性属性只有一个,属性Text,指定GroupBox控件顶部的标题。

 

RadioButton控件常用属性和事件如下:

 

l  属性Text:单选按钮控件旁边的标题。

 

l  属性Checked:布尔变量,为true表示按钮被选中,为false表示不被选中。

 

l  事件CheckedChanged:单选按钮有被选中和不被选中两种状态,该事件是单选按钮状态改变时产生的事件。

 

l  事件Click:单击单选按钮控件时产生的事件。

 

例子e3_8:该例用RadioButton控件修改Label控件字符串的字体为:宋体、黑体、楷体。具体实现步骤如下:

 

(1)  建立一个新的项目。

 

(2)  放Label控件到窗体,属性Text="不同的字体",字体为宋体。

 

(3)  放GroupBox控件到窗体,其属性Text="选择字体"。

 

(4)  放三个RadioButton控件到GroupBox中,属性Text分别为:宋体、黑体、楷体。标题为"宋体"的RadioButton控件的属性Checked=true。设计好的界面如右图。

 

(5)  为三个RadioButton控件的CheckedChanged事件增加事件处理函数如下:

 

private void radioButton1_CheckedChanged(object sender, System.EventArgs e)

 

{   if(radioButton1.Checked)

 

label1.Font=new Font("宋体",label1.Font.Size);

 

}//label1显示的字体变为宋体,字体大小不变

 

private void radioButton2_CheckedChanged(object sender, System.EventArgs e)

 

{   if(radioButton2.Checked)

 

label1.Font=new Font("黑体",label1.Font.Size);

 

}

 

private void radioButton3_CheckedChanged(object sender, System.EventArgs e)

 

{   if(radioButton3.Checked)

 

label1.Font=new Font("楷体_GB2312",label1.Font.Size);

 

}

 

(6)  编译,运行,单击RadioGroup1中的三个RadioButton按钮,可以改变字体。注意三个按钮只能选一个,既只能选一种字体。考虑一下,是否可用Click事件。

 

3.9      Font类

 

Font类有两个构造函数:第一个是new Font(字体名称,字号),例如,label1.Font=new Font("黑体",9),用法还可参考例子e3_8。第二个是new Font(字体名称,字号,字体风格),其中第三个参数是枚举类型,具体定义如下:

 

enum FontStyle{

 

Regular     =0,//正常字体

 

Bold        =1,//黑体

 

Italic      =2,//斜体

 

BoldItalic  =3,//黑斜体

 

Underline   =4,//下划线,5=黑体下划线,6=斜体下划线,7=黑斜体下划线

 

Strikeout   =8}//删除线,9=黑体删除线,10=斜体删除线,依此类推。

 

修改标签控件字体为斜体的代码如下:

 

label1.Font=new Font("黑体",9,label1.Font.Style|FontStyle.Italic);

 

或者:label1.Font=new Font("黑体",9,label1.Font.Style|(FontStyle)2);

 

修改标签控件字体不为斜体的代码如下::

 

label1.Font=new Font("黑体",9,label1.Font.Style&~FontStyle.Italic);

 

或者:label1.Font=new Font("黑体",9,label1.Font.Style&(FontStyle)(~2));

 

修改其它字体风格的代码类似,请读者自己实现。用法还可参考例子e3_11。

 

3.10  多选框(CheckBox)控件

 

CheckBox是多选框控件,可将多个CheckBox控件放到GroupBox控件内形成一组,这一组内的CheckBox控件可以多选,不选或都选。可用来选择一些可共存的特性,例如一个人的爱好。CheckBox控件常用属性和事件如下:

 

l  属性Text:多选框控件旁边的标题。

 

l  属性Checked:布尔变量,为true表示多选框被选中,为false不被选中。

 

l  事件Click:单击多选框控件时产生的事件。

 

l  事件CheckedChanged:多选框控件有被选中和不被选中两种状态,该事件是多选框状态改变时产生的事件。

 

例子e3_10A:分别用2个CheckBox控件来选择是否爱好音乐和是否爱好文学,用鼠标单击CheckBox控件,改变爱好选择,用Label控件显示所选择的爱好。实现步骤如下:

 

(1)  建立新项目。放Label控件到窗体,属性Text=“你的爱好是:”。

 

(2)  放GroupBox控件到窗体,属性Text=“爱好”。放两个CheckBox控件到GroupBox中,属性Text分别为:音乐、文学。设计界面如下图。

 

(3)  标题为"音乐"的多选框控件checkBox1的CheckedChanged事件处理函数如下:

 

private void checkBox1_CheckedChanged(object sender, System.EventArgs e)

 

{   String text1="你的爱好是:";

 

if(checkBox1.Checked)

 

text1=text1+checkBox1.Text;

 

if(checkBox2.Checked)

 

text1+=checkBox2.Text;

 

label1.Text=text1;

 

}

 

(4)  将标题为"文学"的多选框控件的CheckedChanged事件处理函数,设置为标题为"音乐"的多选框控件的CheckedChanged事件处理函数,具体步骤见3.5节。

 

(5)  编译,运行。标题为"音乐"的多选框控件被选中,标签控件将显示"你的爱好是:音乐",再选中标题为"文学"的多选框控件,标签控件将显示"你的爱好是:音乐文学",…。

 

例子e3_10B:该例同上例,但按标题为"音乐"和"文学"的多选框控件被选中的顺序在标签中显示爱好,实现步骤如下:

 

(1)建立新项目。

 

(2)为Form1类增加私有变量String s="你的爱好是:"。定义位置见2.4.2节。

 

(3)放Label控件、GroupBox控件、两个CheckBox到窗体,属性设置及设计界面同上例。

 

(4)标题为"音乐"的多选框控件CheckBox1的CheckedChanged事件处理函数如下:

 

private void checkBox1_CheckedChanged(object sender,System.EventArgs e)

 

{   int n=s.IndexOf("音乐");//s中有字符串"音乐"吗?n=-1表示没有

 

if(n==-1)//n=-1表示上次没选"音乐"多选框,此次选中,应增加"音乐"

 

s+="音乐";

 

else//否则,表示上次已选"音乐"多选框,此次不选中,应删除"音乐"

 

s=s.Remove(n,2);

 

label1.Text=s;

 

}

 

(5)标题为"文学"的多选框控件CheckBox2的CheckedChanged事件处理函数如下:

 

private void checkBox2_CheckedChanged(object sender,System.EventArgs e)

 

{   int n=s.IndexOf("文学");//s中有字符串"文学"吗?=-1表示没有

 

if(n==-1)//=-1,表示上次没选"文学"多选框,此次选中,应增加"文学"

 

s+="文学";

 

else//否则,表示上次已选"文学"多选框,此次不选中,应删除"文学"

 

s=s.Remove(n,2);

 

label1.Text=s;

 

}

 

(6)  编译,运行。选中"音乐"多选框,标签显示"你的爱好是:音乐";再选中"文学"多选框,标签显示"你的爱好是:音乐文学";不选中"音乐"多选框,标签显示"你的爱好是:文学";再选中"音乐"多选框,标签显示"你的爱好是:文学音乐"。

 

3.11  列表选择控件(ListBox)

 

列表选择控件列出所有供用户选择的选项,用户可从选项中选择一个或多个选项。列表选择控件的常用属性、事件和方法如下:

 

l  属性Items:存储ListBox中的列表内容,是ArrayList类对象,可以认为是字符串数组。

 

l  属性SelectedIndex:所选条目的索引号,第一个条目索引号为0。如允许同时选择多个条目,该属性返回任意一个选择条目的索引号。如一个也没选,该值为-1。

 

l  属性SelectedIndices:返回所有被选条目的索引号集合,是一个整型数组。

 

l  属性SelectedItem:返回所选条目的内容,即列表中选中的字符串。如允许同时选择多个条目,该属性返回所选索引号最小的条目。如一个也没选,该值为空。

 

l  属性SelectedItems:返回所有被选条目的内容,是一个字符串数组。

 

l  属性SelectionMode:确定可选的条目数,以及选择多个条目的方法。属性值可以是:none(可以不选或选一个)、one(必须而且只能选一个)、MultiSimple(允许同时选择多个条目)或MultiExtended(允许用组合键同时选择多个条目)。

 

l  属性Sorted:表示条目是否以字母顺序排序,默认值为false,不允许。

 

l  方法GetSelected():参数是索引号,如该索引号条目被选中,返回值为true。

 

l  事件SelectedIndexChanged:当所选索引号(即选项)被改变时产生的事件。

 

例子e3_11:根据列表框的选择,为字符串加下划线、删除线、变斜体、变粗体。具体步骤如下:

 

(1)  建立一个新项目。放Label控件到窗体,其属性Text=“字体风格”。

 

(2)  放置ListBox控件到窗体中,属性Name=listBox1。选中ListBox控件,在属性窗口中,单击Items属性右侧标题为"…"的按钮,打开"字符串集合编辑器"对话框,在其中输入四项:粗体、斜体、下划线、删除线,注意每一项要换行。如上图。

 

(3)  设置列表选择控件ListBox1属性SelectionMode为MultiExtended,允许多选。

 

(4)  为列表选择控件的事件SelectedIndexChenged增加事件处理函数如下:

 

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)

 

{   int Style=0,k=1;//Style=0正常字体,1=黑体,2=斜体,3=黑斜体等,参见3.9节

 

    for(int i=0;i<listBox1.Items.Count;i++)//此例Count=4,为什么?

 

    {if(listBox1.GetSelected(i))//例如此例GetSelected(0)=true表示粗体被选中

 

        Style=Style|k;//增加指定风格

 

     else

 

        Style=Style&(~k);//取消指定风格

 

     k=k*2;

 

    }

 

    FontStyle m=new FontStyle();

 

    m=(FontStyle)Style;

 

    label1.Font=new Font(label1.Font.Name,label1.Font.Size,m);}

 

(5)  编译,运行,选择一项或按下Ctrl键选择多个选项,看一下效果。运行效果如上图。

 

3.12  下拉列表组合框(ComboBox)控件

 

控件ComboBox中有一个文本框,可以在文本框输入字符,其右侧有一个向下的箭头,单击此箭头可以打开一个列表框,可以从列表框选择希望输入的内容。ComboBox控件的常用属性、事件和方法如下:

 

l  属性DropDownStyle:确定下拉列表组合框类型。为Simple表示文本框可编辑,列表部分永远可见。为DropDown是默认值,表示文本框可编辑,必须单击箭头才能看到列表部分。为DropDownList表示文本框不可编辑,必须单击箭头才能看到列表部分。

 

l  属性Items:存储控件的下拉列表内容,是ArrayList类对象,可以认为是字符串数组。

 

l  属性MaxDropDownItems:下拉列表能显示的最大条目数(1—100),如果实际条目数大于此数,将出现滚动条。

 

l  属性Sorted:表示下拉列表框中条目是否以字母顺序排序,默认值为false,不允许。

 

l  属性SelectedItem:所选下拉列表条目的内容,即下拉列表中选中的字符串。如一个也没选,该值为空。其实,属性Text也是所选择的条目的内容。

 

l  属性SelectedIndex:所选下拉列表条目的索引号,列表条目索引号从0开始。如果编辑框未从列表中选择条目,该值为-1。

 

l  事件SelectedIndexChanged:被选索引号改变时发生的事件。

 

例子e3_12:使用ComboBox控件来选择显示字符使用的字体名。本例提供方法使控件ComboBox的下拉列表中显示Windows操作系统中所有可用字体名称。运行效果如右图。实现步骤如下:

 

(1)   建立新项目。放Label控件到窗体,其属性Text=“选择不同字体”。

 

(2)   放ComboBox控件到窗体中,属性Name=comboBox1,属性DropDownStyle=DropDownList,不能在编辑框中输入字体名,只能从下拉列表中选取。

 

(3)   为窗体Form1的事件Load增加事件处理函数如下:

 

private void Form1_Load(object sender, System.EventArgs e)

 

{//Families是类FontFamily的一个静态属性,得到操作系统中所使用的所有字体名

 

FontFamily[] families=FontFamily.Families;//静态属性没有类的对象也可使用

 

foreach (FontFamily family in families)

 

comboBox1.Items.Add(family.Name);//注意Add方法的使用

 

}

 

(4)   为控件comboBox1的事件SelectedIndexChenged增加事件处理函数如下:

 

private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)

 

{label1.Font=new Font(comboBox1.Text,label1.Font.Size);}

 

(5)编译,运行,在ComboBox控件的下拉列表中选择字体名,标签显示的字体变为所选的字体。可以看到操作系统中所有可用字体名称已经在ComboBox控件的下拉列表中。

 

3.13  ToolTip控件

 

在一些Windows应用程序中,例如Word程序,当鼠标在工具条的按钮上停留一段时间后,会在旁边出现提示,ToolTip就是实现此功能的控件。可以用ToolTip控件为任何控件增加提示,本节介绍该控件的使用方法。

 

例子e3_13:为Button控件增加提示。

 

(1)      建立一个新项目。放Button控件到窗体,Name属性为Button1。

 

(2)      把ToolTip控件放到窗体中,属性Name=toolTip1。

 

(3)      在Form1的构造函数中,增加语句如下:

 

toolTip1.SetToolTip(button1,"这是按钮");//参数1是要显示提示的控件,参数2是提示

 

(4)      编译,运行,当鼠标在Button上停留一段时间后,会在旁边出现提示:这是按钮。

 

3.14  超级链接(LinkLable)控件

 

控件LinkLable是控件Label的派生类,和控件Label不同的是该控件显示的字符有下划线,当鼠标指向这个带有下划线的字符时,鼠标形状变为手形,单击带有下划线的字符,产生LinkLable控件的LinkClicked事件,在这个事件的事件处理函数中,可以打开文件或网页。超级链接控件常用的属性、方法和事件如下:

 

l  属性LinkColor:用户未单击过的超级链接字符的颜色,默认为蓝色。

 

l  属性VisitedLinkColor:用户已单击过的超级链接字符的颜色。

 

l  属性LinkVisited:如果已单击过该超级链接,则为true,否则为false。

 

l  属性LinkArea: 是一个结构,变量LinkArea.Start表示LinkLable控件显示的字符串开始加下划线的位置,LinkArea.Length表示字符串中加下划线字符的个数。

 

l  事件LinkClicked:单击控件LinkLable事件。

 

例子e3_14:用LinkLabel控件超级链接到微软网站。

 

(1)   建立一个新项目。放LinkLabel控件到窗体,属性Text=“介绍微软的操作系统”。

 

(2)   修改LinkLabel控件属性LinkArea.Length=2,LinkArea.Start=2。也可在构造函数用语句修改:linkLabel1.LinkArea=new LinkArea(2,2);

 

(3)   为LinkLabel控件的事件LinkClicked增加事件处理函数:

 

private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)

 

{   linkLabel1.LinkVisited=true;

 

System.Diagnostics.Process.Start("http://www.micosoft.com.cn");

 

}

 

(4)   运行,效果如右图,注意只有字符微软带下划线。单击微软,打开浏览器访问微软主页。

 

(5)   如果要打开一个窗口,列出C盘根目录下的文件及文件夹,修改LinkLabel控件事件LinkClicked事件处理函数如下:

 

linkLabel1.LinkVisited=true;

 

System.Diagnostics.Process.Start("C:/");

 

(6)   如果要打开指定程序,例如打开记事本程序,修改LinkClicked事件处理函数如下:

 

linkLabel1.LinkVisited=true;

 

System.Diagnostics.Process.Start("notepad");

 

3.15  定时(Timer)控件

 

定时控件(Timer)也叫定时器或计时器控件,控件按一定时间间隔周期性地自动触发Tick事件。在程序运行时,定时控件是不可见的。定时控件常用的属性、方法和事件如下:

 

l  属性Interval:周期性地自动触发事件Tick的时间间隔,单位为毫秒。

 

l  属性Enabled:为true,启动定时器。调用方法Start()也可启动定时器。

 

l  方法Start()和Stop():启动和停止定时器。设置属性Enabled=false也可停止定时器。

 

l  事件Tick:每间隔属性Interval指定的时间,产生事件Tick。

 

例子e3_15:用标签控件显示当前日期和时间。

 

(1)      建立一个新项目。放Timer组件到窗体,Name属性为timer1。

 

(2)      放Label控件到窗体,Name属性为label1。

 

(3)      为窗体Form1的事件Load增加事件处理函数如下:

 

private void Form1_Load(object sender, System.EventArgs e)

 

{     this.timer1.Interval=100;

 

this.timer1.Enabled=true;

 

label1.Text=DateTime.Now.ToString();

 

}

 

(4)  为Timer1的Tick事件增加事件处理函数如下:

 

private void timer1_Tick(object sender, System.EventArgs e)

 

{   label1.Text=DateTime.Now.ToString();

 

}

 

(5)  编译,运行,标签控件位置显示日期和时间。运行效果如上图。

 

3.16  DateTime类

 

DateTime类中提供了一些静态方法,可以用来得到日期、星期和时间,下面是一些常用的方法。

 

l  得到日期和时间,并转换为字符串。

 

String s=DateTime.Now.ToString();//或DateTime.Today.ToString()

 

l  得到年、月、日期、得到小时、分和秒

 

int y=DateTime.Now.Year;//得到年

 

int m=DateTime.Now.Month;//得到月

 

int d=DateTime.Now.Day;//得到日期

 

String s=DateTime.Now.DayOfWeek.ToString();//英文表示的星期

 

int h=DateTime.Now.Hour;//得到小时

 

int m=DateTime.Now.Minute;//得到分

 

int s=DateTime.Now.Second;//得到秒

 

l  定义一个DateTime类对象,表示1999年1月13日3时57分32.11秒

 

System.DateTime moment=new System.DateTime(1999,1,13,3,57,32,11);

 

l  时间的加法和减法(减法请读者自己完成)

 

System.DateTime dTime=new System.DateTime(1980,8,5);//1980年8月5日

 

//定义时间间隔:17天4小时2分1秒

 

System.TimeSpan tSpan=new System.TimeSpan(17,4,2,1);

 

System.DateTime result=dTime+tSpan;//结果是:1980年8月22日4:2:1 AM.

 

3.17  菜单

 

Windows应用程序一般都有菜单,通过选择菜单的不同菜单项,完成指定的功能。使用菜单控件menuStrip可以为窗体增加一个菜单。菜单一般包括若干顶级菜单项,例如"文件"、"编辑"、"帮助"等。单击顶级菜单项,可以出现弹出菜单,弹出菜单中包含若干菜单项,例如单击"文件"顶级菜单项,其弹出菜单一般包括"打开…"、"保存…"、"另存为…"等菜单项,用鼠标单击菜单项,可以执行菜单项命令。有的菜单项还包括子菜单。

 

所有菜单项都可以有快捷键,即菜单项中带有下划线的英文字符,当按住ALT键后,再按顶级菜单项的快捷键字符,可以打开该顶级菜单项的弹出菜单。弹出菜单出现后,按菜单项的快捷键字符,可以执行菜单项命令。增加快捷键的方法是在菜单项的标题中,在要设定为快捷键的英文字符前边增加一个字符&,例如,菜单项的标题为:打开文件(&0),菜单项的显示效果为:打开文件(0)。菜单项还可以有加速键,一般在菜单项标题的后面显示,例如,"打开…"菜单项的加速键一般是Ctrl+O,不打开菜单,按住Ctrl键后,再按O键,也可以执行打开文件命令。设定加速键的方法是修改菜单项的ShortCutKeys属性。

 

在VS2005集成环境中,放菜单控件menuStrip到窗体中,将自动添加如下语句:

 

private System.Windows.Forms.MenuStrip menuStrip1;

 

this.menuStrip1 = new System.Windows.Forms.MenuStrip();

 

this. MainMenuStrip = this.menuStrip1;         //指定主窗口的菜单是menuStrip1。

 

可以建立多个MenuStrip类对象,可用第三条语句使主窗口使用不同的菜单。菜单中的菜单项是ToolStripMenuItem类对象,其常用的属性和事件如下:

 

l  属性Checked:布尔变量,为true,表示菜单项被选中,其后有标记:∨。

 

l  属性ShortCutKeys:指定的加速键,可从属性窗口该属性后的下拉列表中选择。

 

l  属性ShowShortCutKeys:布尔变量,true(默认值),表示显示加速键,false,不显示。

 

l  属性Text:菜单项标题。如为字符-,为分隔线。可按前述办法增加快捷键。

 

l  事件Click:单击菜单项事件。

 

【例3.12】本例在窗体中建立菜单,菜单包括一个顶级菜单项"颜色",其弹出菜单包括两个菜单项"红色"、"黑色",单击标题为"红色"的菜单项,把窗体中显示的字符变为红色,单击标题为"黑色"的菜单项,把窗体中显示的字符变为黑色。实现步骤如下:

 

(1)    建立新项目。放Label控件到窗体。双击工具箱中的MenuStrip控件,为窗体中增加菜单,在VS2005集成环境左下角出现一菜单图标,在主窗体Form1的左上角有一方框,其中有文字:请在此处输入,在此方框中输入菜单项标题。在方框内输入字符"颜色",在其下部方框内输入字符"红色"为一菜单项,在"红色"菜单项下输入字符"黑色"为另一菜单项,再输入"退出"菜单项。如希望在选中某一菜单项后出现下一级子菜单,可在菜单项右侧方框中输入子菜单项名。如果菜单项属性Text的值为"-",则菜单项为分隔符。可以用鼠标拖动菜单项移动菜单项的位置。使用VS2005设计菜单的界面如图3.12。

 

(2)    标题为"红色"的菜单项的单击(Click)事件处理函数如下:

 

private void 红色ToolStripMenuItem_Click(object sender,EventArgs e)

 

{    label1.ForeColor=Color.Red;   }      //改变字体颜色为红色

 

(3)    标题为"黑色"的菜单项的单击(Click)事件处理函数如下:

 

private void 黑色ToolStripMenuItem_Click(object sender,EventArgs e)

 

{    label1.ForeColor=Color.Black; }      //改变字体颜色为黑色

 

(4)    标题为"退出"的菜单项的单击(Click)事件处理函数如下:

 

private void 退出ToolStripMenuItem_Click(object sender,EventArgs e)        图 3.11

 

{    Close();                      }      //退出程序

 

(5)    编译运行,单击标题为"红色"或"黑色"菜单项,能改变标签字符串颜色。效果如图3.11。

 

 

 

                            图 3.12

 

3.18  工具条

 

Windows应用程序一般都有一个工具条,工具条上的按钮一般为菜单的某一菜单项的快捷按钮,单击工具条按钮相当于单击相应菜单项,完成单击菜单项同样的功能。使用工具条ToolStrip控件可以为该窗体增加工具条。在工具条中可以放置Button、Label、TextBox、ComboBox、ProGressBar等控件,例如编写字处理程序时,在工具条中增加ComboBox控件,从ComboBox控件下拉列表中选择字号、字体。一般工具条按钮上都有一个图标,提示用户该按钮的使用功能。控件ToolStrip常用的属性如下:

 

l  属性Items:单击属性窗口中该属性后边标题为"…"的按钮,打开"项集合编辑器"对话框如图3.13。从图中ComboBox控件的下拉列表中可以选择Button、Label、TextBox、ComboBox、ProGressBar等控件,单击"添加(A)"按钮,可以为工具条添加所选控件。选中左侧列表框中显示的已添加到工具条中的控件,可以在右侧属性列表中修改其属性。通过令属性Image值为一个图形文件,指定按钮的图标。

 

l  属性Dock:选择工具条位置。

 

 

 

图 3.13

 

【例3.13】放置工具条,并为其增加两个按钮,分别单击两个按钮使窗体显示的字符变红、变黑。具体步骤如下:

 

(1)    建立新项目。放Label和ToolStrip控件到窗体。单击ToolStrip控件右上角标题为一箭头的按钮,将打开一窗体,单击"插入标准项",自动增加工具条按钮如图3.14。单击"编辑项…",打开"项集合编辑器"对话框(图3.13),可以增加自己的工具条按钮。

 

 

 

图 3.14

 

(2)    工具条中的按钮都是独立的控件,选中工具条中的按钮,属性窗体将显示该控件的属性和事件。可为按钮增加事件处理函数。

 

3.19  状态栏(StatusBar)控件

 

Windows应用程序的状态栏一般用来显示一些信息,如时间、鼠标位置等。使用状态栏控件StatusStrip为窗体增加状态栏。在状态栏中可以放置SplitButton、StatusLabel、DropDownButton、ProGressBar等控件。单击属性窗口中状态栏控件属性Items后边标题为"…"的按钮,打开"项集合编辑器"对话框如图3.15。从图中ComboBox控件的下拉列表中可以选择放到状态栏中的控件,单击"添加"按钮,可以为状态栏添加控件。选中左侧列表框中显示的已添加到状态栏中的控件,可以在右侧属性列表中修改其属性。为使状态栏长度保持一定,可修改属性AutoSize=false,修改属性Size为指定值。StatusLabel用来在状态栏显示字符,只要修改其Text属性即可修改显示的字符。

 

 

 

                                    图 3.15

 

【例3.14】为窗体增加状态栏,在状态栏内显示时间和鼠标位置。

 

(1)    建立新项目。放StatusStrip控件到窗体,单击属性窗口中状态栏控件属性Items后边标题为"…"的按钮,打开"项集合编辑器"对话框如图3.15,从图中ComboBox控件的下拉列表中选择StatusLabel,单击"添加"按钮,为状态栏添加两个StatusLabel控件。修改属性AutoSize=false,修改属性Size.With=130,属性Text为空。

 

(2)    放Timer组件到窗体,Name=timer1,属性Interval=1000,Enabled=true。

 

(3)    为timer1的Tick事件增加事件处理函数如下:

 

private void timer1_Tick(object sender, EventArgs e)

 

{    toolStripStatusLabel1.Text = DateTime.Now.ToString();        }//第一栏显示时间

 

(4)    第二栏显示鼠标位置,为Form1的MouseMove事件增加事件处理函数如下:

 

private void Form1_MouseMove(object sender, MouseEventArgs e)

 

{toolStripStatusLabel2.Text="X:"+e.X.ToString()+",Y:"+e.Y.ToString();  }

 

(5)    编译运行,在第1栏中可以看到当前时间,在窗口用户区移动鼠标,在第2栏中可以看到鼠标的位置不断变化。

 

3.20  鼠标事件

 

从类System.Windows.Forms.Control派生的控件都有鼠标事件,控件的Click事件本质上也是鼠标事件。一些窗体控件还有单独的鼠标事件,窗体控件包括以下鼠标事件:

 

l  MouseDown:如果鼠标位于控件区域内,按下鼠标按键时产生该事件。

 

l  MouseUp:如果鼠标位于控件区域内,抬起鼠标按键时产生该事件。

 

l  MouseMove:如果鼠标在控件区域内移动,产生该事件。

 

l  MouseEnter:鼠标进入控件区域内,产生该事件。

 

l  MouseLeave:鼠标离开控件区域内,产生该事件。

 

鼠标事件处理函数一般有两个参数,第一个参数(object sender)是产生该事件对象的属性Name的值,例如,为Form1的MouseDown事件增加事件函数,单击Form1,第一个参数sender是Form1对象的引用。(System.Windows.Forms.MouseEventArgs e)是事件处理函数第二个参数,代表事件的一些信息,事件不同,所代表的信息也不相同,鼠标按下事件处理函数中,e.X为发生事件时鼠标位置的x坐标,e.Y为发生事件时鼠标位置的y坐标,e.Button为MouseButtons.Left,表示单击了鼠标左键,为Right和Middle则分别表示单击了右键和中间键。e.Clicks为鼠标单击的次数,如果为1次,为单击,大于1次,则为双击。

 

例子e3_20:在窗体中的指定区域,双击鼠标左键,用Label控件显示双击鼠标的位置。指定区域的左上角坐标为(20,20),宽为200,高为200。

 

(1)   建立一个新项目。放Label控件到窗体。属性Name=label1。

 

(2)   Panel控件可以将窗体分为多个区域。放Panel控件到窗体,属性Location.X=20,Location.Y=20,属性Width=200,Height=200。

 

(3)   为Panel的MouseDown事件增加事件函数如下:

 

private void p1_MouseDown(object sender,System.Windows.Forms.MouseEventArgs e)

 

{   if(e.Button==MouseButtons.Left&&e.Clicks>1)//如果是双击左键

 

label1.Text="X:"+e.X.ToString()+",Y:"+e.Y.ToString();

 

}

 

(4)   编译,运行,分别在控件Panel所在区域内和区域外双击鼠标左键,看一下效果。分别在控件Panel所在区域内和区域外双击鼠标右键,看一下效果。

 

3.21  快捷菜单(ContextMenu)

 

使用过Word程序的人都知道,在Word程序窗口的不同位置单击右键,会出现不同弹出菜单,这个弹出菜单叫快捷菜单。这节介绍如何为应用程序增加快捷菜单。快捷菜单和主菜单的属性、事件和方法基本一致,只是快捷菜单没有顶级菜单项,因此这里就过多介绍了。

 

例子e3_21:本例在窗口中显示一行字符串,加入两个按钮,单击按钮button1把字符串变为红色,单击按钮button2把字符串变为黑色。为两个按钮建立快捷菜单,快捷菜单中有2个菜单项,分别单击这两个菜单项把字符串变为红色或黑色。为窗体建立快捷菜单,菜单中仅有1个标题为"退出"的菜单项,单击"退出"菜单项,退出程序。具体实现步骤如下:

 

(1)  建立一个新项目。放Label控件到窗体。

 

(2)  放2个Button控件到窗体,标题(属性Text)分别为"红色"、"黑色"。

 

(3)  标题为"红色"的按钮的单击事件处理函数如下:

 

private void button1_Click(object sender, System.EventArgs e)

 

{   label1.ForeColor=Color.Red;}

 

(4)  标题为"黑色"的按钮的单击事件处理函数如下:

 

private void button2_Click(object sender, System.EventArgs e)

 

{   label1.ForeColor=Color.Black;}

 

(5)  放2个ContextMenuStrip控件到窗体,属性Name为contextMenuStrip1,contextMenuStrip2。

 

(6)  选中ContextMenuStrip1控件,用菜单编辑器增加标题为"红色"和"黑色"的两个菜单项,它们的单击事件处理函数分别是单击标题为"红色"按钮和"黑色"按钮的事件处理函数。

 

(7)  选中ContextMenuStrip2控件,用菜单编辑器增加标题为"退出"的菜单项,并为其增加单击事件处理函数,在事件处理函数中增加语句:Close();

 

(8)  将标题为"红色"和"黑色"的按钮属性ContextMenuStrip指定为contextMenu1。主窗体Form1的属性ContextMenuStrip指定为contextMenu2。

 

(9)  编译,运行,右击标题为"红色"的按钮,快捷菜单contextMenu1打开,分别单击快捷菜单中标题为"红色"或"黑色"的菜单项,将使窗体中显示的字符串颜色变为红色或黑色。右击标题为"黑色"的按钮,快捷菜单contextMenu1再次打开,分别单击快捷菜单中标题为"红色"或"黑色"的菜单项,将使窗体中显示的字符串颜色变为红色或黑色。右击窗体,快捷菜单contextMenu2打开,单击快捷菜单中标题为"退出"的菜单项,将退出应用程序。运行效果如上图。

 

3.22  综合例子:计算器

 

【例3.17】本例创建一个能进行加、减、乘、除的简单计算器,具体步骤如下:

 

(1)    建立一个新项目。设置主窗体Form1属性MaxiMizeBox=false,属性MiniMizeBox=false。属性FormBorderStyle=FixedDialog,使窗口不能修改大小。

 

(2)    放textBox控件到窗体,属性Text="0",属性ReadOnly=true。RightToLeft=yes。

 

(3)    增加10个Button控件,前9个按钮属性Name分别为:Button1-Button9,最后一个为Button0,属性Text分别为:1、2、3、4、5、6、7、8、9、0。

 

(4)    增加7个Button控件,属性Name分别为:btn_dot、btn_equ、btn_add、btn_sub、btn_mul、btn_div、btn_C,属性Text分别为:.、=、+、-、*、/、C。设计界面如图3.17。

 

(5)    按钮控件Button0单击事件处理函数如下:

 

private void button0_Click(object sender,EventArgs e)

 

{    Button b1=(Button)sender;

 

     if(textBox1.Text!="0")               //如果前边已输入非零数字,例如:12  

 

          textBox1.Text+= b1.Text;         //此次如键入0,应为:120

 

     else          //如果已输入的数字为零,显示的数字应为:0,而不应为:00

 

          textBox1.Text= b1.Text;

 

}                       //请读者自己考虑,该事件处理函数是否能正确处理键入数字1到9

 

(6)    按钮Button1-Button9的单击事件处理函数都设定为按钮Button0的单击事件处理函数。

 

(7)    为标题为"."按钮增加事件处理函数如下:

 

private void btn_dot_Click(object sender, EventArgs e)

 

{    int n=textBox1.Text.IndexOf(".");

 

if(n==-1)          //如果没有小数点,增加小数点,否则不增加

 

textBox1.Text=textBox1.Text+".";

 

}

 

(8)    编译,运行,单击标题为"0"到"9"以及"."的按钮,在控件textBox1中可以看到输入的数字,也可以输入小数。

 

(9)    先实现加法。为Form1类增加一个变量double sum = 0,记录部分和。

 

(10) 输入了第一个加数,然后输入任一运算符(+、-、*、\或=),在输入第二个加数前,应先清除编辑框中显示的第一个加数。为实现此功能,为Form1类增加一个布尔变量blnClear,初始值为false,表示输入数字或小数点前不清除编辑框中显示,输入运算符(+、-、*、\或=)后,blnClear=true,表示如果再输入数字或小数点,先清除编辑框中的显示的前一个加数。修改前边程序,输入数字或小数点前,要判断变量blnClear,如为true,清除编辑框中显示的内容后,再显示新输入的数字或小数点,同时修改blnClear=false。为此修改Button0单击事件处理函数如下:

 

private void button0_Click(object sender,EventArgs e)

 

{    if(blnClear)              //如为真,输入下一个加数前,应先清除textBox1显示内容

 

     {    textBox1.Text="0";    //阴影部分为新增语句

 

          blnClear=false;

 

     }

 

     Button b1=(Button)sender;

 

     if(textBox1.Text!="0")

 

          textBox1.Text+= b1.Text;

 

     else

 

          textBox1.Text= b1.Text;

 

}

 

(11) 修改btn_dot_Click方法如下:                                    图3.17

 

private void btn_dot_Click(object sender, EventArgs e)

 

{    if(blnClear)                //如为真,输入下一个加数前,应先清除textBox1显示内容

 

     {    textBox1.Text="0";     //阴影部分为新增语句

 

          blnClear=false;

 

     }

 

int n=textBox1.Text.IndexOf(".");

 

if(n==-1)//如果没有小数点,增加小数点,防止多次输入小数点

 

textBox1.Text=textBox1.Text+".";

 

}

 

(12) 如果要计算1+2-3,先单击标题为"1"的按钮(简称按钮1),编辑框中显示1,再单击按钮+,执行运算sum=sum+1(注意此时sum=0),显示sum到编辑框中(实际显示不变),记住此次输入的运算符,这里为+号。单击按钮2,编辑框中显示2,再单击按钮-,按记录的运算符(这里是+)计算sum=sum+2,显示sum到编辑框中,记住此次输入的运算符,这里为-号,依此类推。为实现此功能,必须定义一个字符串变量strOper,记录输入的运算符,初始值为"+",保证输入第一个运算符后,执行运算sum=sum+第一个加数,由于初始sum=0,也就是sum=第一个加数。标题为"+"的按钮的单击事件处理函数如下:

 

private void btn_add_Click(object sender, EventArgs e)

 

{    double dbSecond=Convert.ToDouble(textBox1.Text);

 

     if(!blnClear)      //如果未输入第二个操作数,不运算,例如连续键入+、-、*、\或=

 

         switch(strOper)      //按上次记录的运算符号运算

 

         {    case "+":

 

              sum+=dbSecond;

 

               break;          //在此语句后边增加其他运算符-、*、\的处理代码

 

         }

 

     if(sender==btn_add)      //记录此次键入的运算符

 

          strOper="+";         //在此语句后边可增加运算符-、*、\、=的处理代码

 

     textBox1.Text=Convert.ToString(sum);           //显示部分和

 

     blnClear=true;           //设置标记使键入另1个加数前,要先清除显示的前个加数

 

}

 

(13) 等号(=)处理语句和+号处理基本一致,修改标题为"+"按钮的事件函数如下:

 

private void btn_add_Click(object sender, EventArgs e)

 

{    double dbSecond=Convert.ToDouble(textBox1.Text);

 

     if(!blnClear)               //如果未输入第二个操作数,不运算

 

         switch(strOper)        //按记录的运算符号运算

 

         {    case "+":

 

                   sum+=dbSecond;

 

                    break;        //在此语句后边增加其他运算符-、*、\的处理代码

 

         }

 

     if(sender==btn_add)

 

          strOper="+";

 

     if(sender==btn_equ)         //为=号处理增加的语句

 

         strOper="=";

 

     textBox1.Text=Convert.ToString(sum);

 

     blnClear=true;

 

}

 

将标题为"="的按钮的单击事件处理函数设定为标题为"+"的按钮的单击处理事件函数。

 

(14) 为标题为"C"按钮增加事件处理函数如下:

 

private void btn_C_Click(object sender, EventArgs e)

 

{    textBox1.Text="0";

 

     sum=0;

 

     blnClear=false;

 

     strOper="+";

 

}

 

(15) 请读者自己补上减法,乘法,除法运算的语句。

 

转载于:https://www.cnblogs.com/Aha-Best/p/10931638.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值