1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C#,程序设计实用教程,*,第,9,章,Windows,应用程序设计基础,C#,是一种可视化的程序设计语言。,Windows,窗体和控件是开发,C#,应用程序的基础,窗体和控件在,C#,程序设计中扮演着重要的角色。在,C#,中,每个,Windows,窗体和控件都是对象,都是类的实例。,窗体是可视化程序设计的基础界面,是其他对象的载体和容器。,控件是添加到窗体对象上的对象,每个控件都有自己的属性、方法和事件以完成特定的功能。,Windows,应用程序设计还体现了另外一种思维,即对事件的处理。,2,2026/
2、1/12 周一,C#,程序设计实用教程,本章将介绍建立,Windows,应用程序、使用,Windows Forms,常用控件、菜单和多文档界面设计等。,同时向大家展示用,Windows,窗体来编写程序的特点以及技巧。,3,2026/1/12 周一,C#,程序设计实用教程,9.1 Windows,应用程序的结构,VS.NET,集成开发环境是基于,.NET Framework,构建的,该框架提供了一个有条理的、面向对象的、可扩展的类集,它使用户得以开发丰富的,Windows,应用程序。,通过,Windows,“窗体设计器”进行设计窗体,用户就可以创建,Windows,应用程序和客户机,/,服务器应
3、用程序。用户可对窗体设定某些特性并在其上添加控件,然后编写代码以增加控件和窗体的功能。,4,2026/1/12 周一,C#,程序设计实用教程,9.1 Windows,应用程序的结构,VS.NET,提供了很多工具可以使应用程序的开发快捷、可靠。这些工具包括:,Windows,窗体可视化设计器。,识别代码编辑器。,集成的编译和调试。,项目管理工具。,5,2026/1/12 周一,C#,程序设计实用教程,9.1 Windows,应用程序的结构,典型的,Windows,应用程序通常包括窗体(,Forms,)、控件(,Controls,)和相应的事件(,Events,)。,下面通过,C#,设计实现一个简
4、单的计算器,要求能够实现基本的加、减、乘、除功能,并以这个“计算器”为例,来了解和掌握,Windows,应用程序的一般开发过程。,6,2026/1/12 周一,C#,程序设计实用教程,9.1.1,计算器窗体,Windows,窗体就是创立,Windows,应用程序的框架。,在,VS.NET,中创建,Windows,应用程序的第一步就是建立这个框架。操作步骤如下:,(,1,),运行,VS.NET,,在,【,起始页,】,上单击,【,新建项目,】,按钮,打开“新建项目”对话框,如图,9-1,所示。在“项目类型”列表框中指定项目的类型为“,Viusal C#,”,在“模板”列表框中选择“,Windows
5、应用程序”模板,在“名称”文本框中输入,Calculator,,在“位置”下拉列表中选定保存项目的位置。,7,2026/1/12 周一,C#,程序设计实用教程,9.1.1,计算器窗体,(,2,),单击“确定”按钮后就进入,VS.NET,的主界面,如图,9-2,所示。,8,从图,9-2,可以看出,当选择“,Windows,应用程序”作为应用程序的模板后,系统会自动为用户生成一个空白窗体,一般名为,Form1,。,该窗体就是应用程序运行时显示给用户的操作界面,下一步就是向窗体中添加各种控件。,2026/1/12 周一,C#,程序设计实用教程,9.1.2,计算器控件,控件表示用户和程序之间的图形化
6、连接,。控件可以提供或处理数据、接受用户输入、对事件做出响应或执行连接用户和应用程序的其他功能。,因为控件本质上是具有图形接口的组件,所以它能通过组件所提供的功能并与用户交互。,窗体中的控件有很多,“工具箱”中的“,Windows,窗体”里包含了所有,Windows,的标准控件,用户还可以根据需要自己定义控件。通过在“属性”窗口中改变控件的属性可以改变的外观和特性。,9,2026/1/12 周一,C#,程序设计实用教程,9.1.2,计算器控件,本例中需要用到如下所列的控件:,(,1,)按钮:,16,个。,10,个数字按钮分别用于表示,09,;,4,个运算符按钮表示“,+,”、“,-,”、“,*
7、1,个“计算”按钮用于实施计算操作;,1,个“清空”按钮用于清除上次计算结果。,(,2,)标签:,1,个。,用于标示计算结果所在的文本框。,(,3,)文本框:,1,个。,用于显示计算结果。,10,2026/1/12 周一,C#,程序设计实用教程,9.1.2,计算器控件,具体添加控件步骤如下:,首先向窗体中添加按钮(,Button,)。,具体操作为:,在工具箱中单击,Button,,然后移动鼠标指针到窗体中的预定位置,按下左键拖动鼠标,划出一个方框,释放鼠标左键后,一个按钮就被添加到刚才方框的位置了。调整好大小和位置后单击选中该按钮,在“属性”窗口中可以看到该控件名为,Butto
8、n1,,将该按钮的,Text,属性设置为“,1,”。,继续在窗体中添加其余,15,个按钮,并分别设置好它们的属性。,11,2026/1/12 周一,C#,程序设计实用教程,9.1.2,计算器控件,界面设计已经完成了,接下来的事情就是为各个控件添加相应的事件代码了。,12,按照同样的方法在窗体中添加一个标签(,Label,),设置其,Text,属性为“结果”,再添加一个文本框(,TextBox,),并设置其,Text,属性为空。,最后,一个简单的计算器的界面就完成了,如图,9-3,所示。,2026/1/12 周一,C#,程序设计实用教程,9.1.3,计算器事件,在,C#,中,基于,Windows
9、应用程序设计方法是事件驱动的。,事件驱动不是由程序的顺序来控制的,而是由事件的发生来控制的。事件驱动程序设计是围绕着消息的产生与处理而展开的,消息就是关于发生的事件的信息。,Windows,程序员的工作就是对所开发的应用程序所要发出或者接收的消息进行排序和管理。事件驱动程序方法提供了许多便利,对于那些需要大范围用户干预的应用程序来说,更是很有用处。,13,2026/1/12 周一,C#,程序设计实用教程,9.1.3,计算器事件,在“窗体设计器”中看到的是窗体及其中的控件,而要为控件添加事件处理程序就必须先切换到代码编辑器状态。,切换到代码编辑器有以下几种方法:,(,1,)双击窗体或者某控件。
10、2,)在解决方案资源管理器中右键单击,Form1.cs,,从快捷菜单中选择“查看代码”命令。如果选择“视图设计器”则可以回到“窗体设计器”中。,(,3,)当第一次切换到代码编辑器之后,在窗体标题“,Form1.cs,设计,”的左边会自动出现一个新的标题:,Form1.cs,,单击该标题就可以切换到代码编辑器。反之,如果单击“,Form1.cs,设计,”则会切换到“窗体设计器”。,14,2026/1/12 周一,C#,程序设计实用教程,9.1.3,计算器事件,下面分析一下计算器中各个控件到底应该添加什么样的代码。,对于计算器来说,当单击某个数字键后,结果显示区内应显示该键上的数字。,因此,
11、可以双击按钮“,1,”,切换到代码编辑器,此时光标就停留在该按钮所对应的代码处,输入下列代码:,private void btn1_Click(object sender,EventArgs e),Button btn=(Button)sender;,textBox1.Text+=btn.Text;,15,2026/1/12 周一,C#,程序设计实用教程,9.1.3,计算器事件,继续给其他数字按钮添加同样的代码。,然后给,4,个运算符按钮添加下列代码:,private void btnAdd_Click(object sender,EventArgs e),Button btn=(Button
12、)sender;,textBox1.Text=textBox1.Text+btn.Text+;/,空格用于分隔数字各运算符,16,2026/1/12 周一,C#,程序设计实用教程,9.1.3,计算器事件,private void btnSub_Click(object sender,EventArgs e),Button btn=(Button)sender;,textBox1.Text=textBox1.Text+btn.Text+;/,空格用于分隔数字各运算符,private void btnMul_Click(object sender,EventArgs e),Button btn=(
13、Button)sender;,textBox1.Text=textBox1.Text+btn.Text+;/,空格用于分隔数字各运算符,17,2026/1/12 周一,C#,程序设计实用教程,9.1.3,计算器事件,private void btnDiv_Click(object sender,EventArgs e),Button btn=(Button)sender;,textBox1.Text=textBox1.Text+btn.Text+;/,空格用于分隔数字各运算符,接下来给“清空”按钮添加如下代码:,private void btnClear_Click(object sender
14、EventArgs e),textBox1.Text=;,18,2026/1/12 周一,C#,程序设计实用教程,9.1.3,计算器事件,最后给“计算”按钮添加下列代码:,private void btnCalculate_Click(object sender,EventArgs e),Single r;/,用于保存计算结果,string t=textBox1.Text;,/t,用于保存文本框中的算术表达式,int space=t.IndexOf();/,用于搜索空格位置,string s1=t.Substring(0,space);/s1,用于保存第一个运算数,char op=Conve
15、rt.ToChar(t.Substring(space+1,1);/op,用于保存运算符,string s2=t.Substring(space+3);/s2,用于保存第二个运算数,Single arg1=Convert.ToSingle(s1);/,将运算数从,string,转换为,Single,Single arg2=Convert.ToSingle(s2);,19,2026/1/12 周一,C#,程序设计实用教程,9.1.3,计算器事件,switch(op),case+:,r=arg1+arg2;,break;,case-:,r=arg1-arg2;,break;,case*:,r=ar
16、g1*arg2;,break;,20,2026/1/12 周一,C#,程序设计实用教程,9.1.3,计算器事件,case/:,if(arg2=0),throw new ApplicationException();,else,r=arg1/arg2;,break;,break;,default:,throw new ApplicationException();,21,2026/1/12 周一,C#,程序设计实用教程,9.1.3,计算器事件,/,将计算结果显示在文本框中,textBox1.Text=r.ToString();,现在,所有的工作都完成了。在“调试”菜单中选择“启动”命令或者“开始
17、执行(不调试)”命令运行该应用程序,计算器可以工作了。,22,2026/1/12 周一,C#,程序设计实用教程,9.2,Windows,窗体,通过“计算器”这个例子,已初步了解了,Windows,应用程序的结构。,下面具体介绍,Windows,应用程序的设计和开发。,一个应用程序除了需要实现应有的功能外,还必须具有良好的用户界面。在,C#,中,,Windows,应用程序的界面是以窗体(,Form),为基础的,窗体是,Windows,应用程序的基本单位,用来向用户展示信息和接受用户的输入。,窗体可以是标准窗口、多文档界面(,MDI,)窗口、对话框的显示界面。,23,2026/1/12 周一,C#
18、程序设计实用教程,9.2,Windows,窗体,窗体就好像一个容器,其他界面元素都可以放置在窗体中。,C#,中以类,Form,来封装窗体,一般来说,用户设计的窗体都是类,Form,的派生类,用户窗体中添加其他界面元素的操作实际上就是向派生类中添加私有成员。,当新建一个,Windows,应用程序项目时,,C#,就会自动创建一个默认名为,Form1,的,Windows,窗体。,24,2026/1/12 周一,C#,程序设计实用教程,9.2,Windows,窗体,Windows,窗体由以下,4,部分组成:,标题栏,控制按钮,边界,窗口区,25,2026/1/12 周一,C#,程序设计实用教程,9.
19、2.1,Windows,窗体的基本属性,Windows,窗体的属性可以决定窗体的外观和行为,其中常用的属性有:名称(,Name,)属性、标题(,Text,)属性、控制菜单属性和影响窗体外观的属性。,1.,窗体的名称属性(,Name,),Name,用于设置窗体的名称,该属性值作为窗体的标志,用于在程序中引用窗体。,在初始新建一个,Windows,应用程序项目时,自动创建一个窗体,该窗体的名称被自动命名为,Form1,;添加第,2,个窗体时,其名称被自动命名为,Form2,,依次类推。,通常而言,在设计,Windows,窗体时,可给其,Name,属性设置一个有实际含义的名字。,26,2026/1/
20、12 周一,C#,程序设计实用教程,9.2.1,Windows,窗体的基本属性,2.,窗体的标题属性(,Text,),Text,属性用于设置窗体标题栏显示的内容,它的值是一个字符串。,通常,标题栏显示的内容应能概括地说明窗体的内容或作用。,例如,对于一个登录窗体,其栏题栏设置为“欢迎登录!”。,27,2026/1/12 周一,C#,程序设计实用教程,9.2.1,Windows,窗体的基本属性,3.,窗体的控制菜单属性,在,C#,应用程序中的,Windows,窗体,一般都显示控制菜单,以方便用户的操作。,(1)ControlBox,属性,:该属性用来设置窗体上是否有控制菜单。其默认值,True,
21、窗体上显示控制菜单。若将该属性设置为,False,,则窗体上不显示控制菜单,如图,9-4,所示。,28,2026/1/12 周一,C#,程序设计实用教程,9.2.1,Windows,窗体的基本属性,(2)MaximizeBox,属性:,用于设置窗体上的最大化按钮。其默认值,True,,窗体上显示最大化按钮。若将该属性设置为,False,,则窗体上不显示最大化按钮。,(3)MinimizeBox,属性:,用于设置窗体上的最小化按钮。其默认值,True,,窗体上显示最小化按钮。若将该属性设置为,False,,则窗体上不显示最小化按钮。,29,2026/1/12 周一,C#,程序设计实用教程,9.
22、2.1,Windows,窗体的基本属性,4.,设置窗体外观的属性,(1)FormBorderStyle,属性,:用于控制窗体边界的类型。它有,7,个可选值,可选值说明如表,9-1,所示。,30,2026/1/12 周一,C#,程序设计实用教程,9.2.1,Windows,窗体的基本属性,(2)Size,属性,:用来设置窗体的大小。,(3)Location,属性,:设置窗体在屏幕上的位置,即设置窗体左上角的坐标值。,(4)BackColor,属性,:用于设置窗体的背景颜色,可以从弹出的调色板中选择。,31,2026/1/12 周一,C#,程序设计实用教程,9.2.1,Windows,窗体的基本属
23、性,(5)BackgroundImage,属性,:用于设置窗体的背景图像。,(6)Opacity,属性,:该属性用来设置窗体的透明度。,5.,设置窗体可见性的属性,窗体的可见性由,Visible,属性来控制。,32,2026/1/12 周一,C#,程序设计实用教程,9.2.2,创建窗体,通常,在开发项目时,一个窗体往往不能满足,通常需要用到多个窗体。,C#,提供了多窗体处理能力,在一个项目中可创建多个窗体,添加新窗体的方式如下:,(1),选择项目菜单下的“添加,Windows,窗体”命令,打开“添加新项”对话框,如图,9-5,所示。,33,2026/1/12 周一,C#,程序设计实用教程,9.
24、2.2,创建窗体,(2),在“添加新项”对话框的模板框内,选择“,Windows,窗体”模板,然后,单击“打开”按钮,就添加一个新的,Windows,窗体。完成添加窗体后,在解决方案资源管理器窗口中双击对应的窗体,则在,Windows,窗体设计器中,可显示该窗体。,34,2026/1/12 周一,C#,程序设计实用教程,9.2.3,设置启动窗体属性,当在应用程序中添加了多个窗体后,默认情况下,应用程序中的第一个窗体被自动指定为启动窗体。在应用程序开始运行时,此窗体就会首先显示出来。,如果想实现在应用程序启动时,显示别的窗体,那么就要设置启动窗体。如何实现设置启动窗体,请看例,9-1,。,【,例
25、9-1】,C#,设置启动窗体。,步骤如下:,(1),在一个项目中,添加两个窗体。,35,2026/1/12 周一,C#,程序设计实用教程,9.2.3,设置启动窗体属性,(2),在解决方案中,有一个,Program.cs,文件,双击此文件,此时该文件的代码如下所示:,static class Program,static void Main(),Application.EnableVisualStyles();,Application.SetCompatibleTextRenderingDefault(false);,Application.Run(new Form1();,36,2026/1
26、/12 周一,C#,程序设计实用教程,9.2.3,设置启动窗体属性,(3),要实现先启动,Form2,,只需在,Program.cs,文件中修改此行“,Application.Run(new Form1();,”代码为“,Application.Run(new Form2();,”,即可。,(4),运行程序,先启动的窗体为,Form2,。,37,2026/1/12 周一,C#,程序设计实用教程,9.2.4,窗体的显示与隐藏,1.,窗体的显示,如果要在一个窗体中通过按钮打开另一个窗体,就必须通过调用,Show(),方法显示窗体。语法如下:,public void Show();,【,例,9-2】
27、在,Form1,窗体中添加一个,Button,按钮,在按钮的,Click,事件中调用,Show(),,打开,Form2,窗体。代码如下:,private void button1_Click(object sender,EventArgs e),Form2 frm2=new Form2();/,实例化,Form2,frm2.Show();/,调用,Show,方法显示,Form2,窗体,38,2026/1/12 周一,C#,程序设计实用教程,9.2.4,窗体的显示与隐藏,2.,窗体的隐藏,通过调用,Hide(),方法隐藏窗体。语法如下:,public void Hide();,【,例,9-3】
28、通过登录窗体登录系统,输入用户名和密码后,单击“登录”按钮,隐藏登录窗体,显示主窗体。关键代码如下:,this.Hide();,/,调用,Hide,方法隐藏当前窗体,frmMain frm=new frmMain();/,实例化,frmMain,frm.Show();/,调用,Show,方法显示,frmMain,窗体,39,2026/1/12 周一,C#,程序设计实用教程,9.2.5,窗体的事件,Windows,是事件驱动的操作系统,对,Form,类的任何交互都是基于事件来实现的。,Form,类提供了大量的事件用于响应对窗体执行的各种操作。,窗体设计人员往住关心窗体的加载和关闭,通常在加载时
29、进行界面和数据的初始化。在关闭前进行资源的释放等清理操作,也可以取消关闭操作。,下面详细介绍窗体的,Click,、,Load,和,FormClosing,事件。,40,2026/1/12 周一,C#,程序设计实用教程,9.2.5,窗体的事件,1.Click,(单击)事件,当单击窗体时,将会触发窗体的,Click,事件。语法如下:,public event EventHandler Click,【,例,9-4】,在窗体的,Click,事件中编写代码,实现当单击窗体时,弹出提示框。代码如下:,private void Form1_Click(object sender,EventArgs e),M
30、essageBox.Show(,已经单击了窗体!,);/,弹出提示框,41,2026/1/12 周一,C#,程序设计实用教程,9.2.5,窗体的事件,程序的运行如图,9-6,所示。,42,2026/1/12 周一,C#,程序设计实用教程,9.2.5,窗体的事件,2.Load,(加载)事件,当第一次直接或间接调用,Form.Show,方法来显示窗体时,窗体就会进行且只进行一次加载,并且在必需的加载操作完成后会引发,Load,事件。,通常,在,Load,事件响应函数中执行一些初始化操作。语法如下:,public event EventHandler Load,43,2026/1/12 周一,C#,
31、程序设计实用教程,9.2.5,窗体的事件,【,例,9-5】,在下述程序,在窗体的,Load,事件中对窗体的大小、标题、颜 色等属性进行了设置。,private void Form1_Load(object sender,EventArgs e),this.Width=1000;,this.Height=500;,this.ForeColor=Color.Cyan;,this.BackColor=Color.Red;,this.Text=Welcome you!;,44,2026/1/12 周一,C#,程序设计实用教程,9.2.5,窗体的事件,程序的运行如图,9-7,所示。,45,2026/1/
32、12 周一,C#,程序设计实用教程,9.2.5,窗体的事件,3.FormClosing,(关闭)事件,Form,类的,FormClosing,事件是在窗体关闭时引发的事件,直接或间接调用,Form.Close(),方法都会引发事件。,在,FormClosing,事件中,通常进行关闭前的确认和资源释放操作。语法如下:,public event FormClosingEventHandler FormClosing,【,例,9-6】,创建一个,Windows,应用程序,实现当关闭窗体之前,弹出提示框,询问是否关闭当前窗体,单击“是”按钮,关闭窗体,代码如下。,46,2026/1/12 周一,C#,
33、程序设计实用教程,9.2.5,窗体的事件,private void Form1_FormClosing(object sender,FormClosingEventArgs e),DialogResult dr=MessageBox.Show(,是否关闭窗体,提示,MessageBoxButtons.YesNo,MessageBoxIcon.Warning);,if(dr=DialogResult.Yes)/,使用,if,语句判定是否单击,“,是,”,按钮,e.Cancel=false;,/,如果单击,“,是,”,按钮则关闭窗体,else,e.Cancel=true;,/,否则,不执行操作,4
34、7,2026/1/12 周一,C#,程序设计实用教程,9.2.5,窗体的事件,程序的运行如图,9-8,所示。,48,2026/1/12 周一,C#,程序设计实用教程,9.3,窗体控件概述,控件是包含在窗体上的对象,是构成用户界面的基本元素,也 是,C#,可视化编程的重要工具。,使用控件可使程序的设计简化 避 免大量重复性工作,简化设计过程,有效地提高设计效率。,对于一个程序开发人员而言,必须掌握每类控件的功能、用途,并掌握其常用的属性、事件和方法。,49,2026/1/12 周一,C#,程序设计实用教程,9.3,窗体控件概述,在,VS2005,中,工具箱中包含了建立应用程序的各种控件。,工具箱
35、分为,Windows,窗体、公共控件、容器、菜单和工具栏、数据、组件、打印、对话框等部分,常用的,Windows,窗体控件放在“,Windows,窗体”选项卡下。,工具箱中有数十个常用的,Windows,窗体控件,它们以图标的方式显示在工具箱中,其名称显示于图标的右侧。,50,2026/1/12 周一,C#,程序设计实用教程,9.3,窗体控件概述,在介绍具体控件之前,首先在此探讨一下各个控件共有的属性、事件和方法。,在,C#,中,所有的窗体控件,比如标签控件、文本框控件、按钮控件等全部都是继承于:,System.Windows.Forms.Control,。,作为各种窗体控件的基类,,Cont
36、rol,类实现了所有窗体交互控件的基本功能。,Control,类的属性、方法和事件是所有窗体控件所公有的,而且其中很多是在编程中经常会遇到的。,51,2026/1/12 周一,C#,程序设计实用教程,9.3,窗体控件概述,(,1,),Control,类的属性,Control,类的属性描述了一个窗体控件的所有公共属性,可以在属性(,Properties,)窗口中查看或修改窗体控件的属性。,常用的属性如下:,Name,属性,每一个控件都有一个,Name,(名字)属性,在应用程序中,可通过此属性来引用这个控件。,C#,会给每个新添加的控件指定一个默认名。在应用程序设计中,可根据需要将控件的默认名字改
37、成更有实际代表意义的名字。,52,2026/1/12 周一,C#,程序设计实用教程,9.3,窗体控件概述,Text,属性,在,C#,中,每一个控件对象都有,Text,属性。,Text,属性在很多控件中都有重要的意义和作用。,例如,在标签控件中显示的文字、在文本框中用户输入的文字、组合框和窗体中的标 题 等都是用控件的,Text,进行设定的。,对于,Text,属性的设置过程及设置结果如图,9-9,、,9-10,所示。,53,2026/1/12 周一,C#,程序设计实用教程,9.3,窗体控件概述,Anchor,属性,Anchor,的意思是“锚”,那么,Anchor,属性是用来确定此控件与其容器控件
38、的固定关系的。,在此,所谓容器控件是指什么呢?顾名思义,容器控件就是像一般的容器一样可以存放别的控件的控件!例如,窗体控件中会包含很多的控件,像标签控件、文本框等。这时,称包含控件的控件为容器控件或父控件,而里面的控件为子控件。显然,这必然涉及到一个问题,即子控件与父控件的位置关系问题。即当父控件的位置、大小变化时,子控件按照什么样的原则改变其位置、大小。,Anchor,属性就用于设置此原则。,54,2026/1/12 周一,C#,程序设计实用教程,9.3,窗体控件概述,对于,Anchor,属性,可以设定,Top,、,Bottom,、,Right,、,Left,中任意的几种,设置的方法非常直观
39、如图,9-11,所示。,55,2026/1/12 周一,C#,程序设计实用教程,9.3,窗体控件概述,图,9-11,中选中变黑的方位即为设定的控件方位,图中所示的方位为,Top,、,Left,、,Bottom,。此时,如果容器控件变化,子控件将保证其上边缘与容器上边的距离、左边缘与容器左边的距离,底边与容器底边的距离。其运行效果如图,9-12,所示。,56,2026/1/12 周一,C#,程序设计实用教程,9.3,窗体控件概述,Dock,属性,Dock,属性规定了子控件与父控件的边缘依赖关系。,Dock,的效果,如图,9-13,所示。,57,Dock,的值有,6,种,分别是,Top,、,Bo
40、ttom,、,Left,、,Right,、,Fill,,最后还有默认值,None,。一旦,Dock,值被设定,子控件就会发生变化与父控件选定的边缘相融在一起。,2026/1/12 周一,C#,程序设计实用教程,9.3,窗体控件概述,(,2,),Control,类的方法,可以调用,Control,类的方法来获得控件的一些信息,或者设置控件的属性值及行为状态。,例如:,Focus,方法可设置此控件获得的焦点;,Refresh,方法可重画控件;,Select,方法可激活控件;,Show,方法可显示控件等。,58,2026/1/12 周一,C#,程序设计实用教程,9.3,窗体控件概述,(,3,),Co
41、ntrol,类的事件,在,C#,中,当用户进行某一项操作时,会引发某个事件的发生,此时就会调用事件处理程序代码,实现对程序的控制。,事件驱动实现是基于窗体的消息传递和消息循环机制的。在,C#,中,所有的机制都被封装在控件之中,极大方便了编写事件的驱动程序。如果希望能够更加深入地操作,或定义自己的事件,就需要联合使用委托(,Delegate,)和事件(,Event,),可以灵活地添加、修改事件的响应,并自定义事件的处理方法。,例如,,Control,类的可响应的事件有:单击时发生的,Click,事件;双击时发生的,DoubleClick,事件;取得焦点时发生的,GetFocus,事件;鼠标移动时
42、发生的,MouseMove,事件等。,59,2026/1/12 周一,C#,程序设计实用教程,9.4,常用控件,窗体是由一个个控件构成的,因此熟悉控件是进行合理、有效的程序开发的重要前提。,本节内容将针对,Windows,窗体应用程序中常见的控件进行详细介绍。,60,2026/1/12 周一,C#,程序设计实用教程,9.4.1,按钮控件,按钮(,Button,)是用户与应用程序交互的最常用的工具。它用于接收用户的操作信息,去执行预先规定的命令,触发相应的事件过程,以实现指定的功能。,1.,常用属性,(,1,),Text,属性,该属性用于设定按钮上显示的文本。该属性也可为按钮创建快捷方式,其方法
43、是在作为快捷键的字母前加一个“,&,”字符,则在程序运行时,命令按钮上该字母带有下划线,该字母就成为快捷键。,例如,某个按钮的,Text,属性设置为“,&Display,”,程序运行时,就会显示为“,D,isplay,”。,61,2026/1/12 周一,C#,程序设计实用教程,9.4.1,按钮控件,(,2,),FlatStyle,属性,该属性指定了按钮的外观风格,它有,4,个可选值。分别是:,Flat,、,Popup,、,System,、,Standard,。该属性的默认值为,Standard,。,(,3,),Image,属性,用于设定在按钮上显示的图形。,(,4,),ImageAlign,
44、属性,当图片显示在命令按钮上时,可以通过,ImageAlign,属性调节其在按钮上的位置。,(,5,),Enable,属性,用于设定控件是否可用,不可用,则用灰色表示。,(,6,),Visible,属性,用于设定控件是否可见,不可见,则隐藏。,注意:,上述的属性中,前,4,项为外观属性;而后,2,项为行为属性。,62,2026/1/12 周一,C#,程序设计实用教程,9.4.1,按钮控件,2.,响应的事件,如果按钮具有焦点,就可以使用鼠标左键、,Enter,键或空格键触发该按钮的,Click,事件。当使用,ShowDialog,方法显示窗体时,可以使用按钮的,DialogResult,属性指定
45、ShowDialog,的返回值。,【,例,9-7】,按钮控件的运用。,(,1,),为窗体,Form1,添加一个计数器,nCounter,,并添加,3,个按钮控件,分别完成递增计数器、递减计数器、通过消息框提示计数器的值的功能,并添加,1,个,Label,控件来显示每次运算后的计数器值。完成的窗体界面如图,9-14,所示。,63,2026/1/12 周一,C#,程序设计实用教程,9.4.1,按钮控件,(,2,),设置窗体和各控件的属性,如表,9-2,所示。,64,2026/1/12 周一,C#,程序设计实用教程,9.4.1,按钮控件,(,3,),切换到代码窗口,创建事件过程:,private
46、int nCounter;,/,第一次加载时,进行计数器和,lblResult,的初始化,private void Form1_Load(object sender,EventArgs e),this.nCounter=50;,this.ShowCounter();,/,进行递增操作,并提示新值,private void btnInc_Click(object sender,EventArgs e),this.nCounter+;,this.ShowCounter();,65,2026/1/12 周一,C#,程序设计实用教程,9.4.1,按钮控件,/,进行递减操作,并提示新值,private
47、void btnDes_Click(object sender,EventArgs e),this.nCounter-;,this.ShowCounter();,/,通过,MessageBox,提示当前的值,private void btnMsg_Click(object sender,EventArgs e),string strMsg=,当前计数器,+this.nCounter.ToString(D8);,MessageBox.Show(strMsg,提示,);,66,2026/1/12 周一,C#,程序设计实用教程,9.4.1,按钮控件,/,显示计数器值到,Label,控件,lblRes
48、ult,private void ShowCounter(),string strMsg=this.nCounter.ToString(D8);,this.lblResult.Text=strMsg;,67,2026/1/12 周一,C#,程序设计实用教程,9.4.1,按钮控件,程序运行结果如图,9-15,所示。,68,2026/1/12 周一,C#,程序设计实用教程,9.4.2,标签控件,标签(,Label,)主要用来显示文本。通常用标签来为其他控件显示说明信息、窗体的提示信息,或者用来显示处理结果等信息。但是,标签显示的文本不能被直接编辑。,除了显示文本外,标签还可使用,Image,属性显
49、示图像,或使用,ImageIndex,和,ImageList,属性组合显示图像。,69,2026/1/12 周一,C#,程序设计实用教程,9.4.2,标签控件,1.,常用属性,(,1,),Text,属性,该属性用于设定标签显示的文本,可通过,TextAlign,属性设置文本的对齐方式。,(,2,),BorderStyle,属性,该属性用于设定标签的边框形式,共有,3,个设定值,分别是,None,、,FixedSingle,、,Fixed3D,。该属性的默认值为,None,。,(,3,),BackColor,属性,用于设定标签的背景色。,(,4,),ForeColor,属性,用于设定标签中文本的
50、颜色。,(,5,),Font,属性,用于设定标签中文本的字体、大小、粗体、斜体、删除线等。,70,2026/1/12 周一,C#,程序设计实用教程,9.4.2,标签控件,(,6,),Image,属性,用于设定标签的背景图片,可通过,ImageAlign,属性设置图片的对齐方式。,(,7,),Enable,属性,用于设定控件是否可用,不可用,则用灰色表示。,(,8,),Visible,属性,用于设定控件是否可见,不可见,则隐藏。,(,9,),AutoSize,属性,用于设定控件是否根据文本自动调整,设置为,true,表示自动调整。,注意:,上述的属性中,前,6,项为外观属性;而后,3,项为行为属






