1、Windows窗体应用程序设计 8.1 窗体设计8.2 常用的控件设计8.3 多文档窗体8.4 窗体设计的事件机制窗体设计 窗体(Form)是一个窗口或对话框,是存放各种控件(包括标签、文本框、命令按钮等)的容器,可用来向用户显示信息。8.1.1 创建Windows窗体应用程序的过程 添加一个窗体的操作步骤是:选择“项目”|“添加Windows窗体”菜单命令,在出现的“添加新项”对话框中,选中“Windows窗体”,输入相应的名称(这里为Form2.cs),单击“添加”按钮。一个Windows应用程序可以包含多个窗体。窗体类型在C#中,窗体分为如下两种类型:(1)普通窗体,也称为单文档窗体(S
2、DI),前面所有创建的窗体均为普通窗体。普通窗体又分为如下两种:模式窗体。这类窗体在屏幕上显示后用户必须响应,只有在它关闭后才能操作其他窗体或程序。无模式窗体。这类窗体在屏幕上显示后用户可以不必响应,可以随意切换到其他窗体或程序进行操作。通常情况下,当建立新的窗体时,都默认设置为无模式窗体。(2)MDI父窗体,即多文档窗体,其中可以放置普通子窗体。窗体的常用属性 1.布局属性 2.窗口样式属性 3.外观样式属性 4.行为属性8.1.4 窗体的常用事件8.1.5 窗体的常用方法1.Form1窗体:(1)设计界面(2)事件过程:Form1.cs文件:/引用部分using System;using
3、System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace Proj8_1public partial class Form1:Form/从Form类继承Form1窗体 public Form1()/Form1类构造函数 InitializeComponent();/调用初始化方法,其代码在Form1.Designer.cs文件中 private void b
4、utton1_Click(object sender,EventArgs e)Form myform=new Form1_1();/定义Form1_1类对象 myform.ShowDialog();/以模式窗体方式调用 private void button2_Click(object sender,EventArgs e)Form myform=new Form1_2();/定义Form1_2类对象 myform.Show();/以无模式窗体方式调用 Form1.Designer.cs 文件:namespace Proj8_1 partial class Form1 /必需的设计器变量。/p
5、rivate System.ComponentModel.IContainer components=null;/清理所有正在使用的资源。/如果应释放托管资源,为true;/否则为false。protected override void Dispose(bool disposing)/重写基类Dispose()方法 if(disposing&(components!=null)components.Dispose();base.Dispose(disposing);/调用基类的Dispose()方法#region Windows 窗体设计器生成的代码 /设计器支持所需的方法-不要 /使用代码
6、编辑器修改此方法的内容。/private void InitializeComponent()/初始化方法 this.button1=new System.Windows.Forms.button();this.button2=new System.Windows.Forms.button();this.SuspendLayout();/button1 this.button1.Font=new System.Drawing.Font(宋体,9F,System.Drawing.FontStyle.Bold,System.Drawing.GraphicsUnit.Point,(byte)(134
7、);this.button1.Location=new System.Drawing.Point(28,21);this.button1.Name=button1;this.button1.Size=new System.Drawing.Size(117,33);this.button1.TabIndex=0;this.button1.Text=调用模式窗体;this.button1.UseVisualStyleBackColor=true;this.button1.Click+=new System.EventHandler(this.button1_Click);/button2 this
8、.button2.Font=new System.Drawing.Font(宋体,9F,System.Drawing.FontStyle.Bold,System.Drawing.GraphicsUnit.Point,(byte)(134);this.button2.Location=new System.Drawing.Point(28,69);this.button2.Name=button2;this.button2.Size=new System.Drawing.Size(117,33);this.button2.TabIndex=1;this.button2.Text=调用无模式窗体;
9、this.button2.UseVisualStyleBackColor=true;this.button2.Click+=new System.EventHandler(this.button2_Click);/Form1 this.AutoScaleDimensions=new System.Drawing.SizeF(6F,12F);this.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;this.ClientSize=new System.Drawing.Size(169,128);this.Controls.Add(thi
10、s.button2);this.Controls.Add(this.button1);this.Name=Form1;this.StartPosition=System.Windows.Forms.FormStartPosition.CenterScreen;this.Text=Form1;this.ResumeLayout(false);#endregion private System.Windows.Forms.button button1;/私有字段 private System.Windows.Forms.button button2;/私有字段 2.Form1_1窗体:(1)设计界
11、面(2)事件过程:无3.Form1_1窗体:(1)设计界面(2)事件过程:无Program.cs文件:using System;using System.Collections.Generic;using System.Windows.Forms;namespace Proj8_1 static class Program /应用程序的主入口点。/STAThread static void Main()Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application
12、.Run(new Form1();/启动窗体为Form1 按F5键或单击工具栏中的按钮运行本项目。上机调试运行结果。窗体上各事件的引发顺序当一个窗体启动时,执行事件过程的次序如下:(1)本窗体上的Load事件过程。(2)本窗体上的Activated事件过程。(3)本窗体上的其他Form级事件过程。(4)本窗体上包含对象的相应事件过程。一个窗体被卸载时,执行事件过程的次序如下:(1)本窗体上的Closing事件过程。(2)本窗体上的FormClosing事件过程。(3)本窗体上的Closed事件过程。(4)本窗体上的FormClosed事件过程。焦点与Tab键次序焦点(Focus)是指当前处于活
13、动状态的窗体或控件。要将焦点移到当前窗体中的textBox1文本框,可以使用以下命令:textBox1.Focus();控件概述 控件是包含在窗体上的对象,是构成用户界面的基本元素,也是C#可视化编程的重要工具。工具箱中包含了建立应用程序的各种控件,根据控件的不同用途分为若干个选项卡,可根据用途单击相应的选项卡,将其展开,选择需要的控件。常用的控件设计大多数控件共有的基本属性如下:1)Name属性2)Text属性3)尺寸大小(Size)和位置(Location)属性4)字体属性(Font)5)颜色属性(BackColor和ForeColor)6)Cursor属性7)可见(Visible)和有效
14、(Enabled)属性富文本框控件提供类似Microsoft Word能够输入、显示或处理具有格式的文本。【例8.2】设计一个窗体,说明富文本框的使用方法。Form2窗体:(1)设计界面(2)事件过程:private void Form2_Load(object sender,EventArgs e)richtextBox1.LoadFile(H:C#2005ch8file.RTF,RichtextBoxStreamType.RichText);H:C#2005ch8file.RTF,将本窗体设计为启动窗体,运行本项目,在富文本框RichtextBox1中显示H:C#2005ch8file.r
15、tf文件的内容。分组框控件面板控件复选框控件 属于选择类控件,用来设置需要或不需要某一选项功能。在运行时,如果用户用鼠标单击复选框左边的方框,方框中就会出现一个“”符号,表示已选取这个功能了。复选框的功能是独立的,如果在同一窗体上有多个复选框,用户可根据需要选取一个或几个。主要属性:Checked:获取或设置一个布尔值,该值指示是否已选中控件。如果为True,则指示选中状态;否则为False(默认值)。主要事件:Click【例8.3】设计一个窗体,说明复选框的应用。Form3窗体:(1)设计界面(2)事件过程:private void button1_Click(object sender,E
16、ventArgs e)if(checkBox1.Checked&checkBox3.Checked&!checkBox2.Checked&!checkBox4.Checked)MessageBox.Show(您答对了,真的很棒!,信息提示,MessageBoxButtons.OK);else MessageBox.Show(您答错了,继续努力吧!,信息提示,MessageBoxButtons.OK);运行界面单选按钮控件单选按钮是多选一,只能从多个选项中选择一个,各选项间的关系是互斥的。单选按钮使用时经常用多个控件构成一个组,同一时刻只能选择同一组中的一个单选按钮,因此,经常将单选按钮放在一个
17、分组框中构成一个选项组。设计一个窗体,说明单选按钮的使用方法。Form4窗体:(1)设计界面(2)事件过程:private void button1_Click(object sender,EventArgs e)if(radiobutton3.Checked)MessageBox.Show(您选对了,这是微软公司开发的操作系统,信息提示,MessageBoxButtons.OK);else if(radiobutton1.Checked|radiobutton4.Checked)MessageBox.Show(您选错了,这是程序设计语言,信息提示,MessageBoxButtons.OK);
18、else MessageBox.Show(您选错了,这是数据库管理系统,信息提示,MessageBoxButtons.OK);运行界面图片框控件 用于在窗体的特殊位置上放置图形信息,也可以在其上放置多个控件,因此它可作为其他控件的容器。主要属性:Image获取或设置图片框中显示的图像。在运行时再使用Image.FromFile函数加载图像。设计一个窗体,以选择命令按钮方式显示春、夏、秋、冬4个季节的图片。Form5窗体:(1)设计界面(2)事件过程:private void button1_Click(object sender,EventArgs e)pictureBox1.Image=Im
19、age.FromFile(H:C#2005ch8spring.jpg);private void button2_Click(object sender,EventArgs e)pictureBox1.Image=Image.FromFile(H:C#2005ch8summer.jpg);private void button3_Click(object sender,EventArgs e)pictureBox1.Image=Image.FromFile(H:C#2005ch8fall.jpg);private void button4_Click(object sender,EventAr
20、gs e)pictureBox1.Image=Image.FromFile(H:C#2005ch8winter.jpg);组合框控件从一个列表中一次只能选取或输入一个选项,其主要特点是具有带向下箭头的方框。在程序运行时,按下此按钮就会下拉出一个列表框供用户选择项目。另外,还可以在组合框上方的框中输入数据。组合框的属性组合框的属性说明说明DropDownStyle获取或设置指定组合框样式的值。可取以下值之一:获取或设置指定组合框样式的值。可取以下值之一:DropDown(默认值):文本部分可编辑。用户必须单击箭头按钮(默认值):文本部分可编辑。用户必须单击箭头按钮来显示列表部分。来显示列表部分。
21、DropDownList:用户不能直接编辑文本部分。用户必须单击箭头:用户不能直接编辑文本部分。用户必须单击箭头按钮来显示列表部分。按钮来显示列表部分。Simple:文本部分可编辑。列表部分总可见。:文本部分可编辑。列表部分总可见。各种样式的组合框如图各种样式的组合框如图8.19所示。所示。DropDownWidth获取或设置组合框下拉部分的宽度(以像素为单位)。获取或设置组合框下拉部分的宽度(以像素为单位)。DropDownHeight获取或设置组合框下拉部分的高度(以像素为单位)。获取或设置组合框下拉部分的高度(以像素为单位)。Items表示该组合框中所包含项的集合。表示该组合框中所包含项
22、的集合。SelectedItem获取或设置当前组合框中选定项的索引。获取或设置当前组合框中选定项的索引。SelectedText获取或设置当前组合框中选定项的文本。获取或设置当前组合框中选定项的文本。Sorted指示是否对组合框中的项进行排序。指示是否对组合框中的项进行排序。DropDownStyle=Simple DropDownStyle=DropDown DropDownStyle=DropDownList组合框的Items属性是最重要的属性,它是存放组合框中所有项的集合,对组合框的操作实际上就是对该属性即项集合的操作。Items的属性的属性说明说明Count组合框的项集合中项个数。组合
23、框的项集合中项个数。Items的方法的方法说明说明Add向向ComboBox项集合中添加一个项。项集合中添加一个项。AddRange向向ComboBox项集合中添加一个项的数组。项集合中添加一个项的数组。Clear移除移除ComboBox项集合中的所有项。项集合中的所有项。Contains确定指定项是否在确定指定项是否在ComboBox项集合中。项集合中。Equqls判断是否等于当前对象。判断是否等于当前对象。GetType获取当前实例的获取当前实例的Type。Insert将一个项插入到将一个项插入到ComboBox项集合中指定的索引处。项集合中指定的索引处。IndexOf检索指定的项在检索指
24、定的项在ComboBox项集合中的索引。项集合中的索引。Remove从从ComboBox项集合中移除指定的项。项集合中移除指定的项。RemoveAt移除移除ComboBox项集合中指定索引处的项项集合中指定索引处的项组合框的事件组合框的事件组合框的事件说明说明Click在单击控件时发生。在单击控件时发生。TextChanged在在Text属性值更改时发生。属性值更改时发生。SelectedIndexChanged在在SelectedIndex属性值改变时发生。属性值改变时发生。KeyPress在控件有焦点的情况下按下键时发生。在控件有焦点的情况下按下键时发生。设计一个窗体,通过一个文本框向合框
25、中添加项。Form6窗体:(1)设计界面(2)事件过程:private void button1_Click(object sender,EventArgs e)if(textBox1.Text!=)if(!comboBox1.Items.Contains(textBox1.Text)comboBox1.Items.Add(textBox1.Text);/不添加重复项 运行界面列表框控件是一个为用户提供选择的列表,用户可从列表框列出的一组选项中用鼠标选取一个或多个所需的选项。如果有较多的选择项,超出规定的区域而不能一次全部显示时,C#会自动加上滚动条。与组合框类似。列表框的属性列表框的属性说明
26、说明MultiColumn获取或设置列表框控件是否支持多列。设置为获取或设置列表框控件是否支持多列。设置为True,则支持多列,则支持多列,设置为设置为False(默认值),则不支持多列(默认值),则不支持多列SelectedIndex获取或设置列表框控件中当前选定项从获取或设置列表框控件中当前选定项从0开始的索引。开始的索引。SelectedIndices获取一个集合,它包含所有当前选定项的从获取一个集合,它包含所有当前选定项的从0开始的索引。开始的索引。SelectedItem获取或设置列表框控件中当前选定项。获取或设置列表框控件中当前选定项。SelectedItems获取一个集合,它包含
27、所有当前选定项。获取一个集合,它包含所有当前选定项。Items获取列表控件项的集合。获取列表控件项的集合。SelectionMode获取或设置列表框控件的选择模式。可选以下值之一:获取或设置列表框控件的选择模式。可选以下值之一:one:表示只能选择一项。:表示只能选择一项。none:表示无法选择。:表示无法选择。MultiSimple:表示可以选择多项。:表示可以选择多项。MultiExtended:表示可以选择多项。并且按下:表示可以选择多项。并且按下Shift键的同时单键的同时单击鼠标或者同时按下击鼠标或者同时按下Shift键和箭头键,会将选定内容从前一选定项键和箭头键,会将选定内容从前一
28、选定项扩展到当前项,按下扩展到当前项,按下Ctrl键的同时单击鼠标将选择或撤销选择列表键的同时单击鼠标将选择或撤销选择列表中的某项。中的某项。Text当前选取的选项文本。当前选取的选项文本。设计一个窗体,其功能是在两个列表框中移动数据项。Form7窗体:(1)设计界面(2)事件过程:private void Form7_Load(object sender,EventArgs e)listBox1.Items.Add(清华大学);listBox1.Items.Add(北京大学);listBox1.Items.Add(浙江大学);listBox1.Items.Add(南京大学);listBox1
29、.Items.Add(武汉大学);listBox1.Items.Add(中国科技大学);listBox1.Items.Add(中国人民大学);listBox1.Items.Add(华中科技大学);listBox1.Items.Add(复旦大学);enbutton();/调用enbutton()方法private void enbutton()/自定义方法 if(listBox1.Items.Count=0)/当左列表框为空时右移命令按钮不可用 button1.Enabled=false;button2.Enabled=false;else/当左列表框不为空时右移命令按钮可用 button1.E
30、nabled=true;button2.Enabled=true;if(listBox2.Items.Count=0)/当右列表框为空时左移命令按钮不可用 button3.Enabled=false;button4.Enabled=false;else/当右列表框不为空时左移命令按钮可用 button3.Enabled=true;button4.Enabled=true;private void button1_Click(object sender,EventArgs e)if(listBox1.SelectedIndex=0)/将左列表框中选中项移到右列表框中 listBox2.Items
31、.Add(listBox1.SelectedItem);listBox1.Items.RemoveAt(listBox1.SelectedIndex);enbutton();/调用enbutton()方法private void button2_Click(object sender,EventArgs e)foreach(object item in listBox1.Items)/将左列表框中所有项移到右列表框中 listBox2.Items.Add(item);listBox1.Items.Clear();enbutton();/调用enbutton()方法private void bu
32、tton3_Click(object sender,EventArgs e)if(listBox2.SelectedIndex=0)/将右列表框中选中项移到左列表框中 listBox1.Items.Add(listBox2.SelectedItem);listBox2.Items.RemoveAt(listBox2.SelectedIndex);enbutton();/调用enbutton()方法private void button4_Click(object sender,EventArgs e)foreach(object item in listBox2.Items)/将右列表框中所有
33、项移到左列表框中 listBox1.Items.Add(item);listBox2.Items.Clear();enbutton();/调用enbutton()方法运行界面带复选框的列表框控件 用来显示一系列列表项的,不过每个列表项前面都有一个复选项。这样,是否选中了某个列表项就可以很清楚地表现出来。定时器控件 特点是每隔一定的时间间隔就会自动运行一次定时器事件。所谓时间间隔,指的是定时器事件两次调用之间的时间间隔,一般以毫秒(ms)为基本单位。定时器的属性定时器的属性说明说明Enabled设置是否起用定时器控件。若设置为设置是否起用定时器控件。若设置为True(默认值),表(默认值),表示
34、启动定时器开始计时;否则,表示暂停定时器的使用。示启动定时器开始计时;否则,表示暂停定时器的使用。Interval设置两个定时器事件之间的时间间隔。设置时以毫秒为单设置两个定时器事件之间的时间间隔。设置时以毫秒为单位,设置的范围是位,设置的范围是065535ms。定时器的方法定时器的方法说明说明Start启动定时器,也可以将启动定时器,也可以将Enabled属性设置为属性设置为True来启动定来启动定时器。时器。Stop停止定时器,也可以将停止定时器,也可以将Enabled属性设置为属性设置为False来停止定来停止定时器。时器。设计一个窗体说明定时器的使用方法。Form9窗体:(1)设计界面
35、(2)事件过程:private void Form9_Load(object sender,EventArgs e)textBox1.Text=DateTime.Now.ToString(h:mm:ss);timer1.Enabled=true;/启到定时器timer1 timer1.Interval=100;private void timer1_Tick(object sender,EventArgs e)textBox1.Text=DateTime.Now.ToString(h:mm:ss);运行界面滚动条控件 滚动条的结构为两端各有一个滚动箭头,两个滚动箭头中间是滚动条部分,在滚动条上
36、有一个能够移动的小方块,叫做滚动框。水平滚动条和垂直滚动条滚动条的属性滚动条的属性说明说明Maximum表示滚动条的最大值。表示滚动条的最大值。Minimum表示滚动条的最小值。表示滚动条的最小值。Value表示目前滚动条所在位置对应的值。表示目前滚动条所在位置对应的值。LargeChange设置滚动条的最大变动值。设置滚动条的最大变动值。SmallChange设置滚动条的最小变动值。设置滚动条的最小变动值。滚动条的事件滚动条的事件说明说明Scroll当用鼠标压住滚动条上的滑块进行移动时,滑块被重新定位当用鼠标压住滚动条上的滑块进行移动时,滑块被重新定位时发生。时发生。Change当改变当改变
37、Value属性值时发生。属性值时发生。设计一个窗体说明滚动条的使用方法。Form10窗体:(1)设计界面(2)事件过程:private void Form10_Load(object sender,EventArgs e)hScrollBar1.Maximum=100;hScrollBar1.Minimum=0;hScrollBar1.SmallChange=2;hScrollBar1.LargeChange=5;vScrollBar1.Maximum=100;vScrollBar1.Minimum=0;vScrollBar1.SmallChange=2;vScrollBar1.LargeCh
38、ange=5;hScrollBar1.Value=0;vScrollBar1.Value=0;textBox1.Text=0;private void hScrollBar1_Scroll(object sender,ScrollEventArgs e)textBox1.Text=hScrollBar1.Value.ToString(d);/将hScrollBar1.Value整数将实际宽度转换成字符串在textBox1中显示 vScrollBar1.Value=hScrollBar1.Value;private void vScrollBar1_Scroll(object sender,Sc
39、rollEventArgs e)textBox1.Text=vScrollBar1.Value.ToString(d);hScrollBar1.Value=vScrollBar1.Value;private void button1_Click(object sender,EventArgs e)if(Convert.ToInt16(textBox1.Text)=0&Convert.ToInt16(textBox1.Text)=100)hScrollBar1.Value=Convert.ToInt16(textBox1.Text);vScrollBar1.Value=Convert.ToInt
40、16(textBox1.Text);运行界面月历控件日期/时间控件超链接标签控件 多文档窗体 多文档界面应用程序由一个应用程序(MDI父窗体)中包含多个文档(MDI子窗体)组成,父窗体作为子窗体的容器,子窗体显示各自文档,它们具有不同的功能。处于活动状态的子窗体的最大数目是1,子窗体本身不能成为父窗体,而且不能将其移动到父窗体的区域之外。多文档界面应用程序有如下特性:(1)所有子窗体均显示在MDI窗体的工作区内,用户可改变、移动子窗体的大小,但被限制在MDI窗体中。(2)当最小化子窗体时,它的图标将显示在MDI窗体上而不是在任务栏中。(3)当最大化子窗体时,它的标题与MDI窗体的标题一起显示在
41、MDI窗体的标题栏上。(4)MDI窗体和子窗体都可以有各自的菜单,当子窗体加载时覆盖MDI窗体的菜单。MDI父窗体属性父窗体属性说明说明ActiveMdiChild表示当前活动的表示当前活动的MDI子窗口,如没有子窗口则返回子窗口,如没有子窗口则返回NULLIsMdiContainer指示窗体是否为指示窗体是否为MDI父窗体,值为父窗体,值为True时表示是父窗体,值时表示是父窗体,值为为False时表示是普通窗体时表示是普通窗体MdiChildren以窗体数组形式返回所有以窗体数组形式返回所有MDI子窗体子窗体MDI父窗体的方法 一般只使用父窗体的LayoutMdi方法,其使用格式为:MDI
42、父窗体名.LayoutMdi(value)其功能是在MDI父窗体中排列MDI子窗体,参数value决定排列方式,有以下4种取值:LayoutMdi.ArrangeIcons:所有MDI子窗体以图标形式排列在MDI父窗体中。LayoutMdi.TileHorizontal:所有MDI子窗体均垂直平铺在MDI父窗体中。LayoutMdi.TileVertical:所有MDI子窗体均水平平铺在MDI父窗体中。LayoutMdi.Cascade:所有MDI子窗体均层叠在MDI父窗体中。MDI子窗体属性子窗体属性说明说明IsMdiChild指示窗体是否为指示窗体是否为MDI子窗体,值为子窗体,值为Tru
43、e时表示是子窗时表示是子窗体,值为体,值为False时表示是一般窗体时表示是一般窗体MdiParent用来指定该子窗体的用来指定该子窗体的MDI父窗体父窗体【例8.13】设计一个Windows应用程序,说明多文档窗体的使用方法。Form1窗体,将其IsMdiContainer属性设为True:设计界面事件过程:private void button1_Click(object sender,EventArgs e)Form2 child=new Form2();child.MdiParent=this;child.Show();n+;child.Text=第+n+个子窗体;private vo
44、id button2_Click(object sender,EventArgs e)this.LayoutMdi(System.Windows.Forms.MdiLayout.ArrangeIcons);private void button3_Click(object sender,EventArgs e)this.LayoutMdi(System.Windows.Forms.MdiLayout.Cascade);private void button4_Click(object sender,EventArgs e)this.LayoutMdi(System.Windows.Forms.
45、MdiLayout.TileVertical);private void button5_Click(object sender,EventArgs e)this.LayoutMdi(System.Windows.Forms.MdiLayout.TileHorizontal);运行界面窗体设计的事件机制什么是事件处理程序事件处理程序是代码中的过程,用于确定事件(如用户单击按钮或消息队列收到消息)发生时要执行的操作。事件处理程序是绑定到事件的方法。当引发事件时,将执行收到该事件的一个或多个事件处理程序。每个事件处理程序提供两个参数。例如,窗体中一个命令按钮button1的Click事件的事件处理
46、程序如下:其中,第一个参数sender提供对引发事件的对象的引用,第二个参数e传递特定于要处理的事件的对象。通过引用对象的属性(有时引用其方法)可获得一些信息,如鼠标事件中鼠标的位置或拖放事件中传输的数据。创建事件处理程序有以下两种方法:(1)在Windows窗体中创建事件处理程序。(2)在运行时为Windows窗体创建事件处理程序。private void button1_Click(object sender,System.EventArgs e)/输入相应的代码在Windows窗体中创建事件处理程序在Windows窗体设计器上创建事件处理程序的过程如下:(1)单击要为其创建事件处理程序的
47、窗体或控件。(2)在属性窗口中单击“事件”按钮。(3)在可用事件的列表中,单击要为其创建事件处理程序的事件。(4)在事件名称右侧的框中,键入处理程序的名称,然后按Enter键。如图8.40所示是为button1命令按钮选择button1_Click事件处理程序,这样C#系统会在对应窗体的.Designer.cs文件中自动添加以下语句:this.button1.Click+=new System.EventHandler(this.button1_Click);该语句的功能是订阅事件(参见第6章),即接收器使用加法赋值运算符(+=)将该委托System.EventHandler(this.but
48、ton1_Click)添加到源对象button1的事件中。(5)将适当的代码添加到该事件处理程序中。在运行时为Windows窗体创建事件处理程序在运行时创建事件处理程序的过程如下:(1)在代码编辑器中打开要向其添加事件处理程序的窗体。(2)对于要处理的事件,将带有其方法签名的方法添加到窗体上。例如,如果要处理命令按钮button1的Click事件,则需创建如下的一个方法:private void button1_Click(object sender,System.EventArgs e)/输入相应的代码(3)将适合应用程序的代码添加到事件处理程序中。(4)确定要创建事件处理程序的窗体或控件。
49、(5)打开对应窗体的.Designer.cs文件,添加指定事件处理程序的代码处理事件。例如,以下代码指定事件处理程序button1_Click处理命令按钮控件的Click事件:button1.Click+=new System.EventHandler(button1_Click);将多个事件连接到Windows窗体中的单个事件处理程序 在应用程序设计中,可能需要将单个事件处理程序用于多个事件或让多个事件执行同一过程,这样便于简化代码。在C#中将多个事件连接到单个事件处理程序的过程如下:(1)选择要将事件处理程序连接到的控件。(2)在“属性”窗口中,单击“事件”按钮。(3)单击要处理的事件的名
50、称。(4)在事件名称旁边的值区域中,单击下拉按钮显示现有事件处理程序列表,这些事件处理程序会与要处理的事件的方法签名相匹配。(5)从该列表中选择适当的事件处理程序。代码将添加到该窗体中,以便将该事件绑定到现有事件处理程序。【例8.14】设计一个Windows应用程序,用于模拟简单计算器的功能。Form1窗体,将其IsMdiContainer属性设为True:设计界面private void Form1_Load(object sender,EventArgs e)textBox1.Text=;label1.Text=;private void buttond_Click(object send