C语言界面设计经典教程

上传人:人*** 文档编号:592444567 上传时间:2024-09-20 格式:PPT 页数:220 大小:3.19MB
返回 下载 相关 举报
C语言界面设计经典教程_第1页
第1页 / 共220页
C语言界面设计经典教程_第2页
第2页 / 共220页
C语言界面设计经典教程_第3页
第3页 / 共220页
C语言界面设计经典教程_第4页
第4页 / 共220页
C语言界面设计经典教程_第5页
第5页 / 共220页
点击查看更多>>
资源描述

《C语言界面设计经典教程》由会员分享,可在线阅读,更多相关《C语言界面设计经典教程(220页珍藏版)》请在金锄头文库上搜索。

1、 第9章Windows应用程序设计基础C#是一种可视化的程序设计语言。Windows窗体和控件是开发C#应用程序的基础,窗体和控件在C#程序设计中扮演着重要的角色。在C#中,每个Windows窗体和控件都是对象,都是类的实例。窗体是可视化程序设计的基础界面,是其他对象的载体和容器。控件是添加到窗体对象上的对象,每个控件都有自己的属性、方法和事件以完成特定的功能。Windows应用程序设计还体现了另外一种思维,即对事件的处理。22024/9/20C#程序设计实用教程本章将介绍建立Windows应用程序、使用WindowsForms常用控件、菜单和多文档界面设计等。同时向大家展示用Windows窗

2、体来编写程序的特点以及技巧。32024/9/20C#程序设计实用教程 9.1 Windows应用程序的结构集成开发环境是基于.NETFramework构建的,该框架提供了一个有条理的、面向对象的、可扩展的类集,它使用户得以开发丰富的Windows应用程序。通过Windows“窗体设计器”进行设计窗体,用户就可以创建Windows应用程序和客户机/服务器应用程序。用户可对窗体设定某些特性并在其上添加控件,然后编写代码以增加控件和窗体的功能。42024/9/20C#程序设计实用教程 9.1 Windows应用程序的结构提供了很多工具可以使应用程序的开发快捷、可靠。这些工具包括:Windows窗体可

3、视化设计器。识别代码编辑器。集成的编译和调试。项目管理工具。52024/9/20C#程序设计实用教程 9.1 Windows应用程序的结构典型的Windows应用程序通常包括窗体(Forms)、控件(Controls)和相应的事件(Events)。下面通过C#设计实现一个简单的计算器,要求能够实现基本的加、减、乘、除功能,并以这个“计算器”为例,来了解和掌握Windows应用程序的一般开发过程。62024/9/20C#程序设计实用教程9.1.1 计算器窗体算器窗体Windows窗体就是创立Windows应用程序的框架。在中创建Windows应用程序的第一步就是建立这个框架。操作步骤如下:(1)

4、运行,在【起始页】上单击【新建项目】按钮,打开“新建项目”对话框,如图9-1所示。在“项目类型”列表框中指定项目的类型为“ViusalC#”,在“模板”列表框中选择“Windows应用程序”模板,在“名称”文本框中输入Calculator,在“位置”下拉列表中选定保存项目的位置。72024/9/20C#程序设计实用教程9.1.1 计算器窗体算器窗体(2)单击“确定”按钮后就进入的主界面,如图9-2所示。8从图9-2可以看出,当选择“Windows应用程序”作为应用程序的模板后,系统会自动为用户生成一个空白窗体,一般名为Form1。该窗体就是应用程序运行时显示给用户的操作界面,下一步就是向窗体中

5、添加各种控件。2024/9/20C#程序设计实用教程9.1.2 计算器控件算器控件控件表示用控件表示用户和程序之和程序之间的的图形化形化连接接。控件可以提供或处理数据、接受用户输入、对事件做出响应或执行连接用户和应用程序的其他功能。因为控件本质上是具有图形接口的组件,所以它能通过组件所提供的功能并与用户交互。窗体中的控件有很多,“工具箱”中的“Windows窗体”里包含了所有Windows的标准控件,用户还可以根据需要自己定义控件。通过在“属性”窗口中改变控件的属性可以改变的外观和特性。92024/9/20C#程序设计实用教程9.1.2 计算器控件算器控件本例中需要用到如下所列的控件:(1)按

6、钮:16个。10个数字按钮分别用于表示09;4个运算符按钮表示“+”、“-”、“*”、“”;1个“计算”按钮用于实施计算操作;1个“清空”按钮用于清除上次计算结果。(2)标签:1个。用于标示计算结果所在的文本框。(3)文本框:1个。用于显示计算结果。102024/9/20C#程序设计实用教程9.1.2 计算器控件算器控件具体添加控件步骤如下:首先向窗体中添加按钮(Button)。具体操作为:在工具箱中单击Button,然后移动鼠标指针到窗体中的预定位置,按下左键拖动鼠标,划出一个方框,释放鼠标左键后,一个按钮就被添加到刚才方框的位置了。调整好大小和位置后单击选中该按钮,在“属性”窗口中可以看到

7、该控件名为Button1,将该按钮的Text属性设置为“1”。继续在窗体中添加其余15个按钮,并分别设置好它们的属性。112024/9/20C#程序设计实用教程9.1.2 计算器控件算器控件界面设计已经完成了,接下来的事情就是为各个控件添加相应的事件代码了。12按照同样的方法在窗体中添加一个标签(Label),设置其Text属性为“结果”,再添加一个文本框(TextBox),并设置其Text属性为空。最后,一个简单的计算器的界面就完成了,如图9-3所示。2024/9/20C#程序设计实用教程9.1.3 计算器事件算器事件在C#中,基于Windows应用程序设计方法是事件驱动的。事件驱动不是由程

8、序的顺序来控制的,而是由事件的发生来控制的。事件驱动程序设计是围绕着消息的产生与处理而展开的,消息就是关于发生的事件的信息。Windows程序员的工作就是对所开发的应用程序所要发出或者接收的消息进行排序和管理。事件驱动程序方法提供了许多便利,对于那些需要大范围用户干预的应用程序来说,更是很有用处。132024/9/20C#程序设计实用教程9.1.3 计算器事件算器事件在“窗体设计器”中看到的是窗体及其中的控件,而要为控件添加事件处理程序就必须先切换到代码编辑器状态。切换到代码编辑器有以下几种方法:(1)双击窗体或者某控件。(2)在解决方案资源管理器中右键单击,从快捷菜单中选择“查看代码”命令。

9、如果选择“视图设计器”则可以回到“窗体设计器”中。(3)当第一次切换到代码编辑器之后,在窗体标题“Form1.cs设计”的左边会自动出现一个新的标题:,单击该标题就可以切换到代码编辑器。反之,如果单击“Form1.cs设计”则会切换到“窗体设计器”。142024/9/20C#程序设计实用教程9.1.3 计算器事件算器事件下面分析一下计算器中各个控件到底应该添加什么样的代码。对于计算器来说,当单击某个数字键后,结果显示区内应显示该键上的数字。因此,可以双击按钮“1”,切换到代码编辑器,此时光标就停留在该按钮所对应的代码处,输入下列代码:privatevoidbtn1_Click(objectse

10、nder,EventArgse)Buttonbtn=(Button)sender;textBox1.Text+=btn.Text;152024/9/20C#程序设计实用教程9.1.3 计算器事件算器事件继续给其他数字按钮添加同样的代码。然后给4个运算符按钮添加下列代码:privatevoidbtnAdd_Click(objectsender,EventArgse)Buttonbtn=(Button)sender;textBox1.Text=textBox1.Text+btn.Text+;/空格用于分隔数字各运算符162024/9/20C#程序设计实用教程9.1.3 计算器事件算器事件priva

11、tevoidbtnSub_Click(objectsender,EventArgse)Buttonbtn=(Button)sender;textBox1.Text=textBox1.Text+btn.Text+;/空格用于分隔数字各运算符privatevoidbtnMul_Click(objectsender,EventArgse)Buttonbtn=(Button)sender;textBox1.Text=textBox1.Text+btn.Text+;/空格用于分隔数字各运算符172024/9/20C#程序设计实用教程9.1.3 计算器事件算器事件privatevoidbtnDiv_Cli

12、ck(objectsender,EventArgse)Buttonbtn=(Button)sender;textBox1.Text=textBox1.Text+btn.Text+;/空格用于分隔数字各运算符接下来给“清空”按钮添加如下代码:privatevoidbtnClear_Click(objectsender,EventArgse)textBox1.Text=;182024/9/20C#程序设计实用教程9.1.3 计算器事件算器事件最后给“计算”按钮添加下列代码:privatevoidbtnCalculate_Click(objectsender,EventArgse)Singler;/

13、用于保存计算结果stringt=textBox1.Text;/t用于保存文本框中的算术表达式intspace=t.IndexOf();/用于搜索空格位置strings1=t.Substring(0,space);/s1用于保存第一个运算数charop=Convert.ToChar(t.Substring(space+1,1);/op用于保存运算符strings2=t.Substring(space+3);/s2用于保存第二个运算数Singlearg1=Convert.ToSingle(s1);/将运算数从string转换为SingleSinglearg2=Convert.ToSingle(s2

14、);192024/9/20C#程序设计实用教程9.1.3 计算器事件算器事件switch(op)case+:r=arg1+arg2;break;case-:r=arg1-arg2;break;case*:r=arg1*arg2;break;202024/9/20C#程序设计实用教程9.1.3 计算器事件算器事件case/:if(arg2=0)thrownewApplicationException();elser=arg1/arg2;break;break;default:thrownewApplicationException();212024/9/20C#程序设计实用教程9.1.3 计算器

15、事件算器事件/将计算结果显示在文本框中textBox1.Text=r.ToString();现在,所有的工作都完成了。在“调试”菜单中选择“启动”命令或者“开始执行(不调试)”命令运行该应用程序,计算器可以工作了。222024/9/20C#程序设计实用教程 9.2 Windows窗体通过“计算器”这个例子,已初步了解了Windows应用程序的结构。下面具体介绍Windows应用程序的设计和开发。一个应用程序除了需要实现应有的功能外,还必须具有良好的用户界面。在C#中,Windows应用程序的界面是以窗体(Form)为基础的,窗体是Windows应用程序的基本单位,用来向用户展示信息和接受用户的

16、输入。窗体可以是标准窗口、多文档界面(MDI)窗口、对话框的显示界面。232024/9/20C#程序设计实用教程 9.2 Windows窗体窗体就好像一个容器,其他界面元素都可以放置在窗体中。C#中以类Form来封装窗体,一般来说,用户设计的窗体都是类Form的派生类,用户窗体中添加其他界面元素的操作实际上就是向派生类中添加私有成员。当新建一个Windows应用程序项目时,C#就会自动创建一个默认名为Form1的Windows窗体。242024/9/20C#程序设计实用教程 9.2 Windows窗体Windows窗体由以下4部分组成:标题栏控制按钮边界窗口区252024/9/20C#程序设计

17、实用教程9.2.1 Windows窗体的基本属性窗体的基本属性Windows窗体的属性可以决定窗体的外观和行为,其中常用的属性有:名称(Name)属性、标题(Text)属性、控制菜单属性和影响窗体外观的属性。1. 窗体的名称属性(窗体的名称属性(Name)Name用于设置窗体的名称,该属性值作为窗体的标志,用于在程序中引用窗体。在初始新建一个Windows应用程序项目时,自动创建一个窗体,该窗体的名称被自动命名为Form1;添加第2个窗体时,其名称被自动命名为Form2,依次类推。通常而言,在设计Windows窗体时,可给其Name属性设置一个有实际含义的名字。262024/9/20C#程序设

18、计实用教程9.2.1 Windows窗体的基本属性窗体的基本属性2. 窗体的窗体的标题属性(属性(Text)Text属性用于设置窗体标题栏显示的内容,它的值是一个字符串。通常,标题栏显示的内容应能概括地说明窗体的内容或作用。例如,对于一个登录窗体,其栏题栏设置为“欢迎登录!”。272024/9/20C#程序设计实用教程9.2.1 Windows窗体的基本属性窗体的基本属性3. 窗体的控制菜窗体的控制菜单属性属性在C#应用程序中的Windows窗体,一般都显示控制菜单,以方便用户的操作。(1) ControlBox属性属性:该属性用来设置窗体上是否有控制菜单。其默认值True,窗体上显示控制菜单

19、。若将该属性设置为False,则窗体上不显示控制菜单,如图9-4所示。282024/9/20C#程序设计实用教程9.2.1 Windows窗体的基本属性窗体的基本属性(2) MaximizeBox属性:属性:用于设置窗体上的最大化按钮。其默认值True,窗体上显示最大化按钮。若将该属性设置为False,则窗体上不显示最大化按钮。(3) MinimizeBox属性:属性:用于设置窗体上的最小化按钮。其默认值True,窗体上显示最小化按钮。若将该属性设置为False,则窗体上不显示最小化按钮。292024/9/20C#程序设计实用教程9.2.1 Windows窗体的基本属性窗体的基本属性4. 设置

20、窗体外置窗体外观的属性的属性(1) FormBorderStyle属性:用于控制窗体边界的类型。它有7个可选值,可选值说明如表9-1所示。302024/9/20C#程序设计实用教程9.2.1 Windows窗体的基本属性窗体的基本属性(2) Size属性:用来设置窗体的大小。(3) Location属性:设置窗体在屏幕上的位置,即设置窗体左上角的坐标值。(4) BackColor属性:用于设置窗体的背景颜色,可以从弹出的调色板中选择。312024/9/20C#程序设计实用教程9.2.1 Windows窗体的基本属性窗体的基本属性(5) BackgroundImage属性:用于设置窗体的背景图像

21、。(6) Opacity属性:该属性用来设置窗体的透明度。5. 设置窗体可置窗体可见性的属性性的属性窗体的可见性由Visible属性来控制。322024/9/20C#程序设计实用教程9.2.2 创建窗体建窗体通常,在开发项目时,一个窗体往往不能满足,通常需要用到多个窗体。C#提供了多窗体处理能力,在一个项目中可创建多个窗体,添加新窗体的方式如下:(1) 选择项目菜单下的“添加Windows窗体”命令,打开“添加新项”对话框,如图9-5所示。332024/9/20C#程序设计实用教程9.2.2 创建窗体建窗体(2) 在“添加新项”对话框的模板框内,选择“Windows窗体”模板,然后,单击“打开

22、”按钮,就添加一个新的Windows窗体。完成添加窗体后,在解决方案资 源 管 理 器 窗 口 中 双 击 对 应 的 窗 体 , 则 在Windows窗体设计器中,可显示该窗体。342024/9/20C#程序设计实用教程9.2.3 设置启置启动窗体属性窗体属性当在应用程序中添加了多个窗体后,默认情况下,应用程序中的第一个窗体被自动指定为启动窗体。在应用程序开始运行时,此窗体就会首先显示出来。如果想实现在应用程序启动时,显示别的窗体,那么就要设置启动窗体。如何实现设置启动窗体,请看例9-1。【例例9-1】C#设置启动窗体。步骤如下:(1)在一个项目中,添加两个窗体。352024/9/20C#程

23、序设计实用教程9.2.3 设置启置启动窗体属性窗体属性(2) 在解决方案中,有一个文件,双击此文件,此时该文件的代码如下所示:staticclassProgramstaticvoidMain()Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(newForm1();362024/9/20C#程序设计实用教程9.2.3 设置启置启动窗体属性窗体属性(3) 要实现先启动Form2,只需在文件中修改此行“Application.Run(newFor

24、m1();”代码为“Application.Run(newForm2();”,即可。(4) 运行程序,先启动的窗体为Form2。372024/9/20C#程序设计实用教程窗体的窗体的显示与示与隐藏藏1. 窗体的窗体的显示示如果要在一个窗体中通过按钮打开另一个窗体,就必须通过调用Show()方法显示窗体。语法如下:publicvoidShow();【例例9-2】 在Form1窗体中添加一个Button按钮,在按钮的Click事件中调用Show(),打开Form2窗体。代码如下:privatevoidbutton1_Click(objectsender,EventArgse)Form2frm2=n

25、ewForm2();/实例化Form2frm2.Show();/调用Show方法显示Form2窗体382024/9/20C#程序设计实用教程窗体的窗体的显示与示与隐藏藏2. 窗体的窗体的隐藏藏通过调用Hide()方法隐藏窗体。语法如下:publicvoidHide();【例9-3】通过登录窗体登录系统,输入用户名和密码后,单击“登录”按钮,隐藏登录窗体,显示主窗体。关键代码如下:this.Hide();/调用Hide方法隐藏当前窗体frmMainfrm=newfrmMain();/实例化frmMainfrm.Show();/调用Show方法显示frmMain窗体392024/9/20C#程序设

26、计实用教程窗体的事件窗体的事件Windows是事件驱动的操作系统,对Form类的任何交互都是基于事件来实现的。Form类提供了大量的事件用于响应对窗体执行的各种操作。窗体设计人员往住关心窗体的加载和关闭,通常在加载时进行界面和数据的初始化。在关闭前进行资源的释放等清理操作,也可以取消关闭操作。下面详细介绍窗体的Click、Load和FormClosing事件。402024/9/20C#程序设计实用教程窗体的事件窗体的事件1. Click(单击)事件)事件当单击窗体时,将会触发窗体的Click事件。语法如下:publiceventEventHandlerClick【例例9-4】 在窗体的Clic

27、k事件中编写代码,实现当单击窗体时,弹出提示框。代码如下:privatevoidForm1_Click(objectsender,EventArgse)MessageBox.Show(已经单击了窗体!);/弹出提示框412024/9/20C#程序设计实用教程窗体的事件窗体的事件程序的运行如图9-6所示。422024/9/20C#程序设计实用教程窗体的事件窗体的事件2. Load(加(加载)事件)事件当第一次直接或间接调用方法来显示窗体时,窗体就会进行且只进行一次加载,并且在必需的加载操作完成后会引发Load事件。通常,在Load事件响应函数中执行一些初始化操作。语法如下:publicevent

28、EventHandlerLoad432024/9/20C#程序设计实用教程窗体的事件窗体的事件【例例9-5】在下述程序,在窗体的Load事件中对窗体的大小、标题、颜色等属性进行了设置。privatevoidForm1_Load(objectsender,EventArgse)this.Width=1000;this.Height=500;this.ForeColor=Color.Cyan;this.BackColor=Color.Red;this.Text=Welcomeyou!;442024/9/20C#程序设计实用教程窗体的事件窗体的事件程序的运行如图9-7所示。452024/9/20C#

29、程序设计实用教程窗体的事件窗体的事件3. FormClosing(关(关闭)事件)事件Form类的FormClosing事件是在窗体关闭时引发的事件,直接或间接调用Form.Close()方法都会引发事件。在FormClosing事件中,通常进行关闭前的确认和资源释放操作。语法如下:publiceventFormClosingEventHandlerFormClosing【例例9-6】创建一个Windows应用程序,实现当关闭窗体之前,弹出提示框,询问是否关闭当前窗体,单击“是”按钮,关闭窗体,代码如下。462024/9/20C#程序设计实用教程窗体的事件窗体的事件privatevoidFor

30、m1_FormClosing(objectsender,FormClosingEventArgse)DialogResultdr=MessageBox.Show(是否关闭窗体,提示,MessageBoxButtons.YesNo,MessageBoxIcon.Warning);if(dr=DialogResult.Yes)/使用if语句判定是否单击“是”按钮e.Cancel=false;/如果单击“是”按钮则关闭窗体elsee.Cancel=true;/否则,不执行操作472024/9/20C#程序设计实用教程窗体的事件窗体的事件程序的运行如图9-8所示。482024/9/20C#程序设计实用

31、教程 9.3 窗体控件概述控件是包含在窗体上的对象,是构成用户界面的基本元素,也是C#可视化编程的重要工具。使用控件可使程序的设计简化避免大量重复性工作,简化设计过程,有效地提高设计效率。对于一个程序开发人员而言,必须掌握每类控件的功能、用途,并掌握其常用的属性、事件和方法。492024/9/20C#程序设计实用教程 9.3 窗体控件概述在VS2005中,工具箱中包含了建立应用程序的各种控件。工具箱分为Windows窗体、公共控件、容器、菜单和工具栏、数据、组件、打印、对话框等部分,常用的Windows窗体控件放在“Windows窗体”选项卡下。工具箱中有数十个常用的Windows窗体控件,它

32、们以图标的方式显示在工具箱中,其名称显示于图标的右侧。502024/9/20C#程序设计实用教程 9.3 窗体控件概述在介绍具体控件之前,首先在此探讨一下各个控件共有的属性、事件和方法。在C#中,所有的窗体控件,比如标签控件、文本框控件、按钮控件等全部都是继承于:。作为各种窗体控件的基类,Control类实现了所有窗体交互控件的基本功能。Control类的属性、方法和事件是所有窗体控件所公有的,而且其中很多是在编程中经常会遇到的。512024/9/20C#程序设计实用教程 9.3 窗体控件概述(1)Control类的属性的属性Control类的属性描述了一个窗体控件的所有公共属性,可以在属性(

33、Properties)窗口中查看或修改窗体控件的属性。常用的属性如下:lName属性每一个控件都有一个Name(名字)属性,在应用程序中,可通过此属性来引用这个控件。C#会给每个新添加的控件指定一个默认名。在应用程序设计中,可根据需要将控件的默认名字改成更有实际代表意义的名字。522024/9/20C#程序设计实用教程 9.3 窗体控件概述lText属性在C#中,每一个控件对象都有Text属性。Text属性在很多控件中都有重要的意义和作用。例如,在标签控件中显示的文字、在文本框中用户输入的文字、组合框和窗体中的标题等都是用控件的Text进行设定的。对于Text属性的设置过程及设置结果如图9-9

34、、9-10所示。532024/9/20C#程序设计实用教程 9.3 窗体控件概述lAnchor属性Anchor的意思是“锚”,那么Anchor属性是用来确定此控件与其容器控件的固定关系的。在此,所谓容器控件是指什么呢?顾名思义,容器控件就是像一般的容器一样可以存放别的控件的控件!例如,窗体控件中会包含很多的控件,像标签控件、文本框等。这时,称包含控件的控件为容器控件或父控件,而里面的控件为子控件。显然,这必然涉及到一个问题,即子控件与父控件的位置关系问题。即当父控件的位置、大小变化时,子控件按照什么样的原则改变其位置、大小。Anchor属性就用于设置此原则。542024/9/20C#程序设计实

35、用教程 9.3 窗体控件概述对于Anchor属性,可以设定Top、Bottom、Right、Left中任意的几种,设置的方法非常直观,如图9-11所示。552024/9/20C#程序设计实用教程 9.3 窗体控件概述图9-11中选中变黑的方位即为设定的控件方位,图中所示的方位为Top、Left、Bottom。此时,如果容器控件变化,子控件将保证其上边缘与容器上边的距离、左边缘与容器左边的距离,底边与容器底边的距离。其运行效果如图9-12所示。562024/9/20C#程序设计实用教程 9.3 窗体控件概述lDock属性Dock属性规定了子控件与父控件的边缘依赖关系。Dock的效果,如图9-13

36、所示。57Dock的值有6种,分别是Top、Bottom、Left、Right、Fill,最后还有默认值None。一旦Dock值被设定,子控件就会发生变化与父控件选定的边缘相融在一起。2024/9/20C#程序设计实用教程 9.3 窗体控件概述(2)Control类的方法的方法可以调用Control类的方法来获得控件的一些信息,或者设置控件的属性值及行为状态。例如:Focus方法可设置此控件获得的焦点;Refresh方法可重画控件;Select方法可激活控件;Show方法可显示控件等。582024/9/20C#程序设计实用教程 9.3 窗体控件概述(3)Control类的事件的事件在C#中,当

37、用户进行某一项操作时,会引发某个事件的发生,此时就会调用事件处理程序代码,实现对程序的控制。事件驱动实现是基于窗体的消息传递和消息循环机制的。在C#中,所有的机制都被封装在控件之中,极大方便了编写事件的驱动程序。如果希望能够更加深入地操作,或定义自己的事件,就需要联合使用委托(Delegate)和事件(Event),可以灵活地添加、修改事件的响应,并自定义事件的处理方法。例如,Control类的可响应的事件有:单击时发生的Click事件;双击时发生的DoubleClick事件;取得焦点时发生的GetFocus事件;鼠标移动时发生的MouseMove事件等。592024/9/20C#程序设计实用

38、教程 9.4 常用控件窗体是由一个个控件构成的,因此熟悉控件是进行合理、有效的程序开发的重要前提。本节内容将针对Windows窗体应用程序中常见的控件进行详细介绍。602024/9/20C#程序设计实用教程9.4.1 按按钮控件控件按钮(Button)是用户与应用程序交互的最常用的工具。它用于接收用户的操作信息,去执行预先规定的命令,触发相应的事件过程,以实现指定的功能。1. 常用属性常用属性(1)Text属性属性该属性用于设定按钮上显示的文本。该属性也可为按钮创建快捷方式,其方法是在作为快捷键的字母前加一个“&”字符,则在程序运行时,命令按钮上该字母带有下划线,该字母就成为快捷键。例如,某个

39、按钮的Text属性设置为“&Display”,程序运行时,就会显示为“Display”。612024/9/20C#程序设计实用教程9.4.1 按按钮控件控件(2)FlatStyle属性属性该属性指定了按钮的外观风格,它有4个可选值。分别是:Flat、Popup、System、Standard。该属性的默认值为Standard。(3)Image属性属性用于设定在按钮上显示的图形。(4)ImageAlign属性属性当图片显示在命令按钮上时,可以通过ImageAlign属性调节其在按钮上的位置。(5)Enable属性属性用于设定控件是否可用,不可用,则用灰色表示。(6)Visible属性属性用于设定

40、控件是否可见,不可见,则隐藏。注意:注意:上述的属性中,前4项为外观属性;而后2项为行为属性。622024/9/20C#程序设计实用教程9.4.1 按按钮控件控件2.响响应的事件的事件如果按钮具有焦点,就可以使用鼠标左键、Enter键或空格键触发该按钮的Click事件。当使用ShowDialog方法显示窗体时,可以使用按钮的DialogResult属性指定ShowDialog的返回值。【例例9-7】按钮控件的运用。(1)为窗体Form1添加一个计数器nCounter,并添加3个按钮控件,分别完成递增计数器、递减计数器、通过消息框提示计数器的值的功能,并添加1个Label控件来显示每次运算后的计

41、数器值。完成的窗体界面如图9-14所示。632024/9/20C#程序设计实用教程9.4.1 按按钮控件控件(2)设置窗体和各控件的属性,如表9-2所示。642024/9/20C#程序设计实用教程9.4.1 按按钮控件控件(3)切换到代码窗口,创建事件过程:privateintnCounter;/第一次加载时,进行计数器和lblResult的初始化privatevoidForm1_Load(objectsender,EventArgse)this.nCounter=50;this.ShowCounter();/进行递增操作,并提示新值privatevoidbtnInc_Click(object

42、sender,EventArgse)this.nCounter+;this.ShowCounter();652024/9/20C#程序设计实用教程9.4.1 按按钮控件控件/进行递减操作,并提示新值privatevoidbtnDes_Click(objectsender,EventArgse)this.nCounter-;this.ShowCounter();/通过MessageBox提示当前的值privatevoidbtnMsg_Click(objectsender,EventArgse)stringstrMsg=当前计数器+this.nCounter.ToString(D8);Messag

43、eBox.Show(strMsg,提示);662024/9/20C#程序设计实用教程9.4.1 按按钮控件控件/显示计数器值到Label控件lblResultprivatevoidShowCounter()stringstrMsg=this.nCounter.ToString(D8);this.lblResult.Text=strMsg;672024/9/20C#程序设计实用教程9.4.1 按按钮控件控件程序运行结果如图9-15所示。682024/9/20C#程序设计实用教程标签控件控件标签(Label)主要用来显示文本。通常用标签来为其他控件显示说明信息、窗体的提示信息,或者用来显示处理结果

44、等信息。但是,标签显示的文本不能被直接编辑。除了显示文本外,标签还可使用Image属性显示图像,或使用ImageIndex和ImageList属性组合显示图像。692024/9/20C#程序设计实用教程标签控件控件1. 常用属性常用属性(1)Text属性属性该属性用于设定标签显示的文本,可通过TextAlign属性设置文本的对齐方式。(2)BorderStyle属性属性该属性用于设定标签的边框形式,共有3个设定值,分别是None、FixedSingle、Fixed3D。该属性的默认值为None。(3)BackColor属性属性用于设定标签的背景色。(4)ForeColor属性属性用于设定标签中

45、文本的颜色。(5)Font属性属性用于设定标签中文本的字体、大小、粗体、斜体、删除线等。702024/9/20C#程序设计实用教程标签控件控件(6)Image属性属性用于设定标签的背景图片,可通过ImageAlign属性设置图片的对齐方式。(7)Enable属性属性用于设定控件是否可用,不可用,则用灰色表示。(8)Visible属性属性用于设定控件是否可见,不可见,则隐藏。(9)AutoSize属性属性用于设定控件是否根据文本自动调整,设置为true表示自动调整。注意:注意:上述的属性中,前6项为外观属性;而后3项为行为属性。712024/9/20C#程序设计实用教程标签控件控件2.响响应的事

46、件的事件标签控件常用的事件有:Click事件和DoubleClick事件。722024/9/20C#程序设计实用教程标签控件控件【例例9-3】标签控件的运用。对窗体上的3个标签控件的参数进行设置,用来显示文本。程序代码如下:privatevoidForm1_Load(objectsender,EventArgse)/label1参数设置,默认字体为宋体9号、前景色为黑色this.label1.AutoSize=true;this.label1.BackColor=System.Drawing.Color.White;this.label1.Text=宋体9号白底黑字;732024/9/20C#

47、程序设计实用教程标签控件控件/label2参数设置,默认字体为宋体9号、前景色为黑色this.label2.AutoSize=true;this.label2.BackColor=System.Drawing.Color.Black;this.label2.Font=newSystem.Drawing.Font(宋体,10.5F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Point,(byte)(134);this.label2.ForeColor=System.Drawing.Color.White;this.l

48、abel2.Text=宋体10号黑底白字“;742024/9/20C#程序设计实用教程标签控件控件/label3参数设置this.label3.AutoSize=true;this.label3.BackColor=System.Drawing.Color.Blue;this.label3.Font=newSystem.Drawing.Font(楷体_GB2312,14.25F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Point,(byte)(134);this.label3.ForeColor=System.D

49、rawing.Color.Red;this.label3.Text=楷体14号蓝底红字;752024/9/20C#程序设计实用教程标签控件控件程序运行结果如图9-16所示。762024/9/20C#程序设计实用教程9.4.3 文本框控件文本框控件在C#中,文本框(TextBox)是最常用的和最简单的文本显示和输入控件。文本框有两种用途,一是可以用来输出或显示文本信息;二是可以接受从键盘输入的信息。1. 常用属性常用属性(1)Text属性属性该属性用于设定文本框显示的文本,可通过TextAlign属性设置文本的对齐方式。(2)BackColor属性属性用于设定文本框的背景色。(3)ForeCol

50、or属性属性用于设定文本框中文本的颜色。772024/9/20C#程序设计实用教程9.4.3 文本框控件文本框控件(4)Font属性属性用于设定文本框中文本的字体、大小、粗体、斜体、删除线等。(5)PasswordChar属性属性文本框控件以密码输入方式使用,输入字母用该属性指定字符屏蔽。(6)Enable属性属性用于设定文本框控件是否可用,不可用,则用灰色表示。(7)Visible属性属性用于设定文本框控件是否可见,不可见,则隐藏。(8)ReadOnly属性属性用于设定文本框控件是否只读。(9)MultiLine属性属性用于设定文本框控件是否包多行文本。注意:注意:上述的属性中,前5项为外观

51、属性;而后4项为行为属性。782024/9/20C#程序设计实用教程9.4.3 文本框控件文本框控件2.常用的方法常用的方法(1)Clear方法方法用于清除文本框中已有的文本。(2)AppendText方法方法用于文本框最后追加文本。792024/9/20C#程序设计实用教程9.4.3 文本框控件文本框控件3.常用的事件常用的事件在文本框控件所能响应的事件中,TextChanged、Enter和Leave是常用的事件。(1)TextChanged事件事件当文本框的文本内容发生变化时,触发该事件。当向文本框输入信息时,每输入一个字符,就会引发一次TextChanged事件。(2)Enter事件事

52、件当文本框获得焦点时,就会引发的事件。(3)Leave事件事件当文本框失去焦点时,就会引发的事件。802024/9/20C#程序设计实用教程9.4.3 文本框控件文本框控件【例例9-9】文本框控件的运用。实现步骤如下:(1)为窗体Form1添加2个TextBox控件:tbInput和tbHint,前者可编辑单行文本,用来获取用户输入;后者用于显示数据,应设置为只读多行文本。同时,再添加1个Label控件lblCopy,用来显示输入文本框中数据。812024/9/20C#程序设计实用教程9.4.3 文本框控件文本框控件(2)在此例中,通过程序代码设置相应的控件的属性。主要程序代码如下:priva

53、tevoidForm1_Load(objectsender,EventArgse)/设置2个文本框的属性this.tbInput.ForeColor=Color.Blue;this.tbHint.BackColor=Color.White;this.tbHint.ForeColor=Color.Green;this.tbHint.ReadOnly=true;822024/9/20C#程序设计实用教程9.4.3 文本框控件文本框控件privatevoidtbInput_Enter(objectsender,EventArgse)/光标进入清除原有文本this.tbInput.Clear();pr

54、ivatevoidtbInput_Leave(objectsender,EventArgse)/焦点退出,将文本添加到tbHint新的一行this.tbHint.AppendText(this.tbInput.Text+Environment.NewLine);832024/9/20C#程序设计实用教程9.4.3 文本框控件文本框控件privatevoidtbInput_TextChanged(objectsender,EventArgse)/将当前tbInput中文本内容同步显示到lblCopy中this.lblCopy.Text=this.tbInput.Text;注意:注意:在tbInp

55、ut_Leave事件中将编辑好的文本通过方法TextBox.AppendText()追加tbHint中;在tbInput_TextChanged事件中将tbInput中最新的文本同步显示到lbCopy控件上。程序运行结果如图9-17所示。842024/9/20C#程序设计实用教程9.4.4 单选按按钮控件控件单选按钮(RadioButton)控件为用户提供由两个或多个互斥选项组成的选项集。当用户选中某单选项按钮时,同一组中的其他单选项按钮不能同时选定,该控件以圆圈内加点的方式表示选中。单选按钮用来让用户在一组相关的选项中选择一项,因此单选按钮控件总是成组出现。直接添加到一个窗体中的所有单选按钮

56、将形成一个组。若要添加不同的组,必须将它们放到面板或分组框中。将若干RadionButton控件放在一个GroupBox控件内组成一组时,当这一组中的某个单选按钮控件被选中时,该组中的其他单选控件将自动处于不选中状态。852024/9/20C#程序设计实用教程9.4.4 单选按按钮控件控件1. 常用属性常用属性(1)Text属性属性该属性用于设置单选按钮旁边的说明文字,以说明单选按钮的用途。(2)Check属性属性表示单选按钮是否被选中,选中则Checked值为True,否则为False。2.响响应的事件的事件单选按钮响应的事件主要是Click事件和CheckedChanged事件。当鼠标单击

57、单选按钮时,触发Click事件,并且改变Checked属性值。Checked属性值的改变,同时将触发CheckedChanged事件。862024/9/20C#程序设计实用教程9.4.4 单选按按钮控件控件【例例9-10】单选按钮控件的运用。通过选择不同的单选按钮,实现在文本框中显示不同水果的价格。实现步骤如下:(1)创建如图9-18所示的窗体。872024/9/20C#程序设计实用教程9.4.4 单选按按钮控件控件(2)设置窗体和各控件的属性,如表9-3所示。882024/9/20C#程序设计实用教程9.4.4 单选按按钮控件控件(3)打开代码窗口,编写事件过程。privatevoidrdo

58、Apple_CheckedChanged(objectsender,EventArgse)txtPrice.Text=10.0;privatevoidrdoBanana_CheckedChanged(objectsender,EventArgse)txtPrice.Text=8.5;892024/9/20C#程序设计实用教程9.4.4 单选按按钮控件控件privatevoidrdoPineapple_CheckedChanged(objectsender,EventArgse)txtPrice.Text=12.5;902024/9/20C#程序设计实用教程复复选框控件框控件复选按钮(Check

59、Box)控件,它与单选按钮一样,也给用户提供一组选项供其选择。但它与单选按钮有所不同,每个复选框都是一个单独的选项,用户既可以选择它,也可以不选择它,不存在互斥的问题,可以同时选择多项。1. 常用属性常用属性(1)Text属性。该属性用于设置复选框旁边的说明文字,以说明复选框的用途。(2)Check属性。表示复选框是否被选择。True表示复选框被选择,False表示复选框未被选择。912024/9/20C#程序设计实用教程复复选框控件框控件(3)CheckState属性。反映该复选框的状态,有3个可选值。Checked:表示复选框当前被选中。Unchecked:表示复选框当前未被选中。Inde

60、terminate:表示复选框当前状态未定,此时该复选框呈灰色。2.响响应的事件的事件复选框响应的事件主要是Click事件、CheckedChanged事件和CheckStateChanged事件。当鼠标单击复选框时,触发Click事件,并且改变Checked属性值和CheckState属性值。Checked属性值的改变,同时将触发CheckedChanged事件;CheckState属性值的改变,同时将触发CheckStateChanged事件。922024/9/20C#程序设计实用教程复复选框控件框控件【例例9-11】复选框控件的运用。通过选择不同的复选框,实现输出选中的业余爱好。实现步骤

61、如下:(1)创建一个Windows窗体应用的程序,添加如图9-19所示的控件。(2)编写“确定”按钮btnOk和“退出”btnExit的代码。其中“确定”按钮功能为显示一个对话框,输出用户用户所填内容;“退出”按钮功能为结束程序。932024/9/20C#程序设计实用教程复复选框控件框控件942024/9/20C#程序设计实用教程复复选框控件框控件(3)程序的完整代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usin

62、gSystem.Text;usingSystem.Windows.Forms;namespaceUseCheckBoxpublicpartialclassForm1:Form952024/9/20C#程序设计实用教程复复选框控件框控件publicForm1()InitializeComponent();/检查用户输入的信息是否有效privatevoidtxtName_Validating(objectsender,CancelEventArgse)if(txtName.Text.Trim()=string.Empty)MessageBox.Show(姓名为空,请重新输入!);txtName.F

63、ocus();962024/9/20C#程序设计实用教程复复选框控件框控件privatevoidbtnExit_Click(objectsender,EventArgse)this.Close();972024/9/20C#程序设计实用教程复复选框控件框控件private void btnOk_Click(object sender, EventArgs e) string strUser = string.Empty; strUser = 姓名:姓名: + txtName.Text + n; strUser = strUser + 业余余爱好:好: + (chkMovie.Checked ?

64、 电影影 : ) + (chkMusic.Checked ? 音音乐 : ) + (chkSport.Checked ? 体育体育 : ) + n; DialogResult result = MessageBox.Show(strUser, 信息确信息确认, MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); if (result = DialogResult.OK) txtName.Clear(); chkMovie.Checked = false; chkMus

65、ic.Checked = false; chkSport.Checked = false; 982024/9/20C#程序设计实用教程复复选框控件框控件privatevoidbtnExit_MouseEnter(objectsender,EventArgse)txtName.CausesValidation=false;privatevoidbtnExit_MouseLeave(objectsender,EventArgse)txtName.CausesValidation=true;992024/9/20C#程序设计实用教程复复选框控件框控件单击“信息确认”对话框中的“确定”按钮,将会清除已

66、输入的内容,包括复选框的选中状态。100程序运行,输入相应的内容,如图9-20所示。单击“确定”按钮后,弹出的对话框如图9-21所示。2024/9/20C#程序设计实用教程复复选框控件框控件说明:明:代码中用到了MessageBox的另一个构造方法,这种方法使得MessageBox的外观更加多样化,包括了MessageBox的标题(Title)、图标(MessageBoxIcons)的按钮(MessageBoxButtons)。另外,程序中还编写了btnExit的Enter和Leave事件,目的是为了在单击“退出”按钮时,不引发TextBox控件的Validating事件,防止多余的提示;在L

67、eave事件中又恢复TextBox控件的Validating事件。读者可以先删除该段代码,以查看相应的效果。1012024/9/20C#程序设计实用教程9.4.6 列表框列表框列表框(ListBox)控件提供一个项目列表,用户可以从中选择一项或多项。在列表框内的项目称为列表框,列表项的加入是按一定的顺序进行的,这个顺序号称为索引号。列表框内列表项的索引号是从0开始的,即第一个加入的列表项索引号为0,其余索引项的索引号依次类推。1022024/9/20C#程序设计实用教程9.4.6 列表框列表框1常用属性常用属性(1)Items属性属性通过该属性,设置或获取列表框的项。用户可以事先在属性窗口中设

68、置,也可以在程序中进行设置。(2)Multicolumn属性属性用于设置列表框是否多列列表框,默认值为False,表示列表项一单列显示。1032024/9/20C#程序设计实用教程9.4.6 列表框列表框(3)SelectionMode属性属性该属性用于设定列表框选择属性,共有4个可选值:None:表示不允许进行选择。One:表示只允许选择其中一项。此值为默认值。MultiSimple:表示允许同时选择多个列表项。MultiExtended:用鼠标和Shift键组合可以选择连续的列表项;用鼠标和Ctrl键组合可以选择不连续的列表项。1042024/9/20C#程序设计实用教程9.4.6 列表框

69、列表框(4)SelectedItem属性属性获取或设置列表框中的当前选定项。(5)SelectedItems属性属性获取或设置列表框中当前选定项的集合。(6)SelectedIndex属性属性获取或设置列表框中的当前选定项的从零开始的索引。在编程时,用户可以捕获该属性值,然后根据该值来进行相应的动作。注意:注意:上述的属性中,前2项为外观属性;而后4项为行为属性。1052024/9/20C#程序设计实用教程9.4.6 列表框列表框2. 响响应的事件的事件列表框控件除了能响应常用的Click、DoubleClick、GotFocus、LostFocus等事件外,还可响应特有的SelectedIn

70、dexChanged事件。SelectedIndexChanged事件:当用户改变列表中的选择时,将会触发此事件。1062024/9/20C#程序设计实用教程9.4.6 列表框列表框3. 常用的方法常用的方法列表框的列表项可以在属性窗口中通过Item属性来设置,也可以在应用程序中用或方法来添加,用或方法删除。(1)方法方法方法的功能是把一个列表项加入列表框的底部。其一般格式如下:Listname.Items.Add(Item)其中,Listname是列表控件的名称;Items是要加入列表框的列表框,必须是一个字符串表达式。1072024/9/20C#程序设计实用教程9.4.6 列表框列表框(2

71、)方法)方法方法的功能是把一个列表项插入到列表框的指定位置。其一般格式如下:Listname.Items.Insert(Index,列表项)其中,Index是新增列表项在列表框中的指定位置。Index值为0时,表示列表项添加到列表框的第一个位置。(3)方法方法Items.Remove方法的功能是清除列表框中的指定列表项。其一般格式如下:Listname.Items.Remove(Item)1082024/9/20C#程序设计实用教程9.4.6 列表框列表框()方法()方法Items.Clear方法的功能是清除列表框中的所有列表项。其一般格式如下:Listname.Items.Clear()10

72、92024/9/20C#程序设计实用教程9.4.6 列表框列表框【例例9-12】列表框控件的运用。(1)创建一个Windows窗体应用程序,在窗体上添加如图9-22所示的控件。其中,ListBox控件名称如图所示,4个按钮的名称依次为btnRight、btnRightAll、btnLeftAll和btnLeft。(2)更改lstLeft控件的Items属性,弹出如图9-23所示的字符串集合编辑器。依次输入星期日、星期一、星期二、星期三、星期四、星期五和星期六。单击“确定”按钮,得到如图9-24所示的窗体。(3)编写各个按钮的代码,功能为使得ListBox控件的选项在lstLeft和lstRig

73、ht控件之间移动,并将记录输出到lstBottom列表框控件中。1102024/9/20C#程序设计实用教程9.4.6 列表框列表框1112024/9/20C#程序设计实用教程9.4.6 列表框列表框(4)完整的程序代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;namespaceUseListBoxpublicpartialclas

74、sForm1:Form1122024/9/20C#程序设计实用教程9.4.6 列表框列表框publicForm1()InitializeComponent();1132024/9/20C#程序设计实用教程9.4.6 列表框列表框privatevoidbtnRight_Click(objectsender,EventArgse)if(lstLeft.SelectedItems.Count=0)return;elselstRight.Items.Add(lstLeft.SelectedItem);lstBottom.Items.Add(lstLeft.SelectedItem.ToString()

75、+被移至右侧);lstLeft.Items.Remove(lstLeft.SelectedItem);1142024/9/20C#程序设计实用教程9.4.6 列表框列表框privatevoidbtnRightAll_Click(objectsender,EventArgse)foreach(objectiteminlstLeft.Items)lstRight.Items.Add(item);lstBottom.Items.Add(左侧列表项被全部移至右侧);lstLeft.Items.Clear();1152024/9/20C#程序设计实用教程9.4.6 列表框列表框privatevoidbt

76、nLeftAll_Click(objectsender,EventArgse)foreach(objectiteminlstRight.Items)lstLeft.Items.Add(item);lstBottom.Items.Add(右侧列表项被全部移至左侧);lstRight.Items.Clear();1162024/9/20C#程序设计实用教程9.4.6 列表框列表框privatevoidbtnLeft_Click(objectsender,EventArgse)if(lstRight.SelectedItems.Count=0)return;elselstLeft.Items.Add

77、(lstRight.SelectedItem);lstBottom.Items.Add(lstRight.SelectedItem.ToString()+被移至左侧);lstRight.Items.Remove(lstRight.SelectedItem);1172024/9/20C#程序设计实用教程9.4.6 列表框列表框运行程序,可以随意将两侧列表框中的项移动,如图9-25所示。1182024/9/20C#程序设计实用教程可可选列表框控件列表框控件可选列表框(CheckedListBox)控件与ListBox控件类似,但是其列表表中选项的左侧还可以显示选择框。1192024/9/20C#程

78、序设计实用教程组合框控件合框控件组合框(ComboBox)控件是一个文本框和一个列表框的组合。在列表框使用时,只能在给定的列表项中选择,如果用户想要选择列表框中没有给出的选项,则用列表框不能实现。与列表框不同的是,在组合框中向用户提供了一个供选择的列表框,若用户选中列表框中某个列表项,该列表项的内容将自动装入文本框中。当列表框中没有所需的选项时,也允许在文本框中直接输入特定的信息(但,组合框的DropDownStyle属性设置为DropDownList时除外)。1202024/9/20C#程序设计实用教程组合框控件合框控件1常用属性常用属性(1)DropDownStyle属性该属性用于设置组合

79、框的样式。有3种可选值:Simple:没有下拉列表框,所以不能选择,可以输入,和TextBox控件相似。DropDown:具有下拉列表框,可以选择,也可以直接输入选择项中不存在的文本。该值是默认值。DropDownList:具有下拉列表框,只能选择已有可选项中的值,不能输入其他的文本。1212024/9/20C#程序设计实用教程组合框控件合框控件(2)MaxDropDownItems属性该属性用于设置下拉列表框中最多显示列表项的个数。2. 常用的事件常用的事件组合框的常用事件不多,一般是使用Click事件,有时也使用SelectedIndexChanged事件和SelectedItemChan

80、ged事件。1222024/9/20C#程序设计实用教程组合框控件合框控件【例例9-13】组合框控件的运用。(1)创建一个Windows窗体应用程序,在窗体上添加如图9-26所示的控件。其中,将两个ComboBox控件分别命名为cboCountry和cboCity,“确定”按钮命名为btnOk。123(2)更改两个ComboBox控件的DropDownStyle属性为DropDownList。为cboCountry有Items添加如下内容:中国美国英国2024/9/20C#程序设计实用教程组合框控件合框控件124(3)编写程序代码,实现如下的功能:当cboCountry中,选择相应的国家,在c

81、boCity中显示该国家的部分城市。2024/9/20C#程序设计实用教程组合框控件合框控件(4)程序完整代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;namespaceUseComboBoxpublicpartialclassForm1:Form1252024/9/20C#程序设计实用教程组合框控件合框控件publicForm1(

82、)InitializeComponent();privatevoidForm1_Load(objectsender,EventArgse)cboCountry.SelectedIndex=0;1262024/9/20C#程序设计实用教程组合框控件合框控件privatevoidcboCountry_SelectedIndexChanged(objectsender,EventArgse)switch(cboCountry.SelectedIndex)case0:cboCity.Items.Clear();cboCity.Items.Add(北京);cboCity.Items.Add(上海);cb

83、oCity.Items.Add(天津);cboCity.SelectedIndex=0;break;1272024/9/20C#程序设计实用教程组合框控件合框控件case1:cboCity.Items.Clear();cboCity.Items.Add(华盛顿);cboCity.Items.Add(纽约);cboCity.Items.Add(芝加哥);cboCity.SelectedIndex=0;break;case2:cboCity.Items.Clear();cboCity.Items.Add(伦敦);cboCity.Items.Add(曼彻斯特);cboCity.Items.Add(考

84、文垂);cboCity.SelectedIndex=0;break;1282024/9/20C#程序设计实用教程组合框控件合框控件default:cboCity.Items.Clear();break;privatevoidbtnOk_Click(objectsender,EventArgse)stringstrSelect=cboCountry.SelectedItem.ToString()+:+cboCity.SelectedItem.ToString();MessageBox.Show(strSelect,国家城市列表,MessageBoxIcon.Information);129202

85、4/9/20C#程序设计实用教程组合框控件合框控件运行程序,可以实现在任意选择国家组合框中的项,右侧的城市也随之改变,如图9-27所示。单击“确定”按钮,通过MessageBox提示框显示所选的内容,如图9-28所示。130说明说明:代码在Form1窗体的Load事件中对cboCountry控件的SelectedIndex属性赋值,使其默认选择一个选择,避免了运行程序时组合框是所选内容为空。随后的代码处理了cboCountry控件的SelectedIndexChanged事件,根据不同的国家添加不同的城市名称。2024/9/20C#程序设计实用教程9.4.9 面板控件和分面板控件和分组框控件框

86、控件面板(Panel)控件和分组框(GroupBox)控件是一种容器控件,可以容纳其他控件,同时为控件分组。通常情况下,单选按钮控件经常与Panel控件或GroupBox控件一起使用。另外,放在Panel控件或GroupBox控件内的所有对象将随着容器控件一起移动、显示、消失和屏蔽。这样,使用容器控件可将窗体的区域分割为不同的功能区,可以提供视觉上的区分和分区激活或屏蔽的功能。1312024/9/20C#程序设计实用教程9.4.9 面板控件和分面板控件和分组框控件框控件.使用方法使用方法使用Panel控件或GroupBox控件将控件分组的方法如下:(1)在“工具箱”中选择Panel控件或Gro

87、upBox控件,将其添加到窗体上。(2)在“工具箱”中选择其他控件放在Panel控件或GroupBox控件上。(3)重复步骤(2),添加所需的其他控件。1322024/9/20C#程序设计实用教程9.4.9 面板控件和分面板控件和分组框控件框控件2.Panel控件常用属性控件常用属性Panel控件常用的属性主要有如下几种:(1)BorderStyle属性该属性用于设置边框的样式,有3种设定值。None:无边框。Fixed3D:立体边框。FixedSingle:简单边框。默认值是None,不显示边框。(2)AutoScroll属性该属性用于设置是否在框内加滚动条。设置为True时,则加滚动条;设

88、置为False时,则不加滚动条。1332024/9/20C#程序设计实用教程9.4.9 面板控件和分面板控件和分组框控件框控件3.GroupBox控件的常用属性控件的常用属性GroupBox控件最常用的是Text属性,该属性可用于在GroupBox控件的边框上设置显示的标题。Panel控件与GroupBox控件功能类似,都用来做容器来组合控件,但两者之间有3个主要区别:Panel控件可以设置BorderStyle属性,选择是否有边框。Panel控件可把其AutoScroll属性设置为True,进行滚动。Panel控件没有Text属性,不能设置标题。1342024/9/20C#程序设计实用教程9

89、.4.9 面板控件和分面板控件和分组框控件框控件【例例9-14】Panel控件和GroupBox控件的运用。(1)使用GroupBox控件为RadioButton控件和CheckBox控件提供分组,这样就可以在一个窗体中有几个独立的分组。完成的窗体布局如图9-29所示。(2)使用Panel控件可以使窗体的分类更详细,以便于用户理解。如可以在图9-29所示的窗体中添加一个Panel控件,如图9-30所示。这样的分类使得程序界面更加美观。1352024/9/20C#程序设计实用教程滚动条控件条控件滚动条(ScrollBar)有水平和垂直两种,可以通过工具箱中的水平滚动条(HScrollBar)和垂

90、直滚动条(VScrollBar)来建立。这两种滚动条除了方向不同外,其功能和操作是一样的。流动条主要用在列有较长项目或大量信息的地方。这样,用户在小区域中,使用滚动条实现平滑移动,可浏览到所有信息或列表项目。另外,滚动条也可作为一种特殊的输入工具。例如,常常利用滚动条中滑块位置的变化,去调节声音的音量或调整图片的颜色,使其有连续变化的效果,实现调节的目的。1362024/9/20C#程序设计实用教程滚动条控件条控件1. 常用属性常用属性(1)Minimum(最小值)属性将滑块移到滚动条的最左端或最上端时,滚动条的属性值达到最小。属性的最小值由属性决定。(2)Maximum(最大值)属性将滑块移

91、到滚动条的最右端或最下端时,滚动条的属性值达到最大。属性的最大值由属性决定。(3)Value属性表示滚动条内滑块的位置所代表的值。(4)SmallChange(小变化)属性表示单击滚动条两端箭头时,滑块移动的增量值。(5)LargeChange(大变化)属性表示单击滚动条内空白处或者按PageUp/PageDown键时,滑块移动的增量值。1372024/9/20C#程序设计实用教程滚动条控件条控件2. 常用的事件常用的事件滚动条的主要事件有Scroll和ValueChanged,通常都是捕捉该事件来对滚动条的动作进行相应的动作。Scroll事件在通过鼠标或键盘移动滚动条的滑块时,滑块被重新定位

92、,即触发Scroll事件。ValueChanged事件当通过Scroll事件或以编程方式更改Value属性时发生。1382024/9/20C#程序设计实用教程滚动条控件条控件【例例9-15】水平滚动条控件的运用。(1)新建一个项目,在窗体中加入一个文本框、一个水平滚动条和一个标签。为其中的水平滚动条控件设置属性如下:设 置 其 Minimum属 性 值 为 5, Maximum属 性 值 为 60,SmallChange属性值为1,LargeChange属性值为5,Value属性初始值为15。并设置文本框的Multiline属性为True。完成属性设置的窗体如图9-31所示。1392024/9

93、/20C#程序设计实用教程滚动条控件条控件(2)添加程序代码,实现改变文本框的字体大小的功能。添加代码如下:privatevoidhScrollBar1_ValueChanged(objectsender,EventArgse)intnFontSize;nFontSize=hScrollBar1.Value;textBox1.Font=newSystem.Drawing.Font(宋体,nFontSize);运行该程序,可以看出,当用户拖动滚动条时,文本框的字体大小会随着水平滚动条的滑动而发生变化。运行的界面如图9-32所示。1402024/9/20C#程序设计实用教程滚动条控件条控件1412

94、024/9/20C#程序设计实用教程9.4.11 定定时器控件器控件定时器控件(Timer)也称为定时器或计时器,是按一定时间间隔周期地自动触发事件的控件。在程序运行时,定时器是不可见的。定时器控件主要用来计时,通过计时处理,可以实现各种复杂的动作,如延时、动画等。1422024/9/20C#程序设计实用教程9.4.11 定定时器控件器控件1. 常用的属性常用的属性(1)Enable属性该属性值为True时就启动Timer控件,也就是每隔InterVal属性指定的时间间隔调用一次Tick事件;该属性值为False,则停止使用Timer控件。(2)InterVal属性该属性是定时器控件的最重要属

95、性,用于设定两个定时器事件之间的时间间隔。例如,如果希望每半称产生一个定时器事件,那么InterVal属性值应该设置为500,这样,每隔500ms引发一次定时器事件,从而执行相应的Tick事件过程。1432024/9/20C#程序设计实用教程9.4.11 定定时器控件器控件2. 常用的方法常用的方法(1)Start方法用于启动定时器。(2)Stop方法用于停止定时器。3. 常用的事件常用的事件定时器控件只响应一个Tick事件。即,定时器控件对象在间隔了一个InterVal设定的时间后,便触发一次Tick事件。1442024/9/20C#程序设计实用教程9.4.11 定定时器控件器控件【例例9-

96、16】定时器控件的运用。(1)在窗体中添加2个定时器控件,设置timer1的InterVal属性设置为100000ms(100s),设置timer2的InterVal属性设置为1000ms(1s)。设计完成的窗体如图9-33所示。1452024/9/20C#程序设计实用教程9.4.11 定定时器控件器控件(2)添加代码,利用timer1每隔100秒检查一次用户的文件是否保存,如果未保存,提示用户进行保存;利用timer2建立一个数字式钟表。(3)程序的完整代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Component

97、Model;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;1462024/9/20C#程序设计实用教程9.4.11 定定时器控件器控件namespaceUseTimerpublicpartialclassForm1:FormpublicForm1()InitializeComponent();/设置一个表示是否保存的标记publicboolblFileSave;1472024/9/20C#程序设计实用教程9.4.11 定定时器控件器控件/在窗体的初始化时,进行相应的设置privat

98、evoidForm1_Load(objectsender,EventArgse)blFileSave=false;timer1.Enabled=true;timer2.Enabled=true;privatevoidtextBox1_TextChanged(objectsender,EventArgse)/当文本框的内容变化时,都要将blFileSave标志设置为falseblFileSave=false;1482024/9/20C#程序设计实用教程9.4.11 定定时器控件器控件privatevoidtimer1_Tick(objectsender,EventArgse)timer1.Ena

99、bled=false;if(blFileSave=false)MessageBox.Show(还没有保存,请保存!,提示信息,MessageBoxButtons.OK);blFileSave=true;timer1.Enabled=true;1492024/9/20C#程序设计实用教程9.4.11 定定时器控件器控件privatevoidtimer2_Tick(objectsender,EventArgse)lblTime.Text=当前时间为:+System.DateTime.Now;1502024/9/20C#程序设计实用教程9.4.11 定定时器控件器控件(4)运行程序,可以看到当过了1

100、00秒后,如果文本框的内容没有被保存,则会提示用户,如图9-34所示。在timer2的Tick事件中的DataTime是返回系统时间函数。在系统运行时,lblTime标签控件显示的时间间隔为1s,改变一次。1512024/9/20C#程序设计实用教程9.4.12 TreeView控件控件TreeView控件用来显示信息的分级信息,如同Windows中显示的文件和目录。TreeView控件中的各项信息都有一个与之相关联的Node对象。在实际应用中,利用TreeView控件能设计出Windows中的树形目录,用于显示分类或具有层次结构的信息。1522024/9/20C#程序设计实用教程9.4.12

101、 TreeView控件控件1. TreeView控件的控件的结构构组成成首先了解一下首先了解一下节点点对象(象(Node)和)和节点集点集合(合(Nodes)。)。TreeView控件的每个列表控件的每个列表项都是一个都是一个Node对象,可以包括文本和象,可以包括文本和图片。片。节点之点之间有父有父子关系或兄弟父系。子关系或兄弟父系。在在图9-35中,系和班中,系和班级之之间为父关系,系是父关系,系是班班级的父的父节点(点(Parent),班),班级是系的子是系的子节点(点(Child),系与系之),系与系之间为兄弟关系。各兄弟关系。各系均系均为项层节点,点,项层节点没有父点没有父节点。点。

102、TreeView控件中所有的控件中所有的Node对象构成象构成Node集合,集合中的每个集合,集合中的每个节点点对象都具有象都具有唯一的索引。唯一的索引。1532024/9/20C#程序设计实用教程9.4.12 TreeView控件控件2. TreeView控件的常用属性控件的常用属性(1)ImageList属性该属性用来获取或设置包含树节点所使用的Image对象的ImageList。(2)ImageIndex该属性用来获取或设置树节点显示的默认图像的图像列表索引值。(3)Indent属性该属性用来获取或设置每个子树节点级别的缩进距离。(4)LabelEdit属性该属性用来获取或设置一个值,用

103、以指示是否可以编辑树节点的标签文本。此属性有0和1两个属性值,0代表自动编辑标签,1代表人工编辑标签。1542024/9/20C#程序设计实用教程9.4.12 TreeView控件控件(5)ShowLines属性该属性用来获取或设置一个值,用以指示是否在树视图控件中的树节点之间绘制连线。它有True和False两个值,用于设置是否显示出线条。(6)ShowRootLines属性该属性用来获取或设置一个值,用以指示是否在树视图根处的树节点之间绘制连线。它有True和False两个值,用于设置是否显示出线条。(7)Nodes属性该属性用来获取给树视图控件的树节点集合。(8)TopNode属性该属性

104、用来获取树视图控件中第一个完全可见的树节点。1552024/9/20C#程序设计实用教程9.4.12 TreeView控件控件(9)PathSeperator属性该属性用来获取或设置树节点路径所使用的分隔符串。默认情况下,设置为“”。1562024/9/20C#程序设计实用教程9.4.12 TreeView控件控件3. TreeView控件的常用方法控件的常用方法TreeView控件可以总结为三种基本操作:加入子节点、加入兄弟节点和删除节点。(1)加入子节点Add()方法所谓子节点,就是处于选定节点的下一级节点。加入子节点的具体过程是:首先在TreeView控件中定位要加入的子节点的位置,然后

105、创建一个节点对象,再利用TreeView类中对节点的Add()方法加入此节点对象。下面是在treeView1控件中加入一个子节点的具体代码:1572024/9/20C#程序设计实用教程9.4.12 TreeView控件控件if(treeView1.SelectedNode=null)/首先判定是否选定控件中的节点MessageBox.Show(请选择一个节点);elseTreeNodetmpNode;tmpNode=newTreeNode(节点显示内容,在取消选定时显示图像的索引值,在选择树节点时显示图像的索引值);treeView1.SelectedNode.Nodes.Add(tmpNod

106、e);/在TreeView控件中加入子节点1582024/9/20C#程序设计实用教程9.4.12 TreeView控件控件(2)加入兄弟节点Add()方法所谓兄弟节点,就是与选定的节点平级的节点。加入兄弟节点的方法和加入子节点的方法基本一致,加入兄弟节点和加入子节点的最大区别就在于最后一步。下面是在treeView1控件中加入一个兄弟节点的具体代码:if (treeView1.SelectedNode = null)/首先判定是否首先判定是否选定控件中的定控件中的节点点 MessageBox.Show(请选择一个一个节点点);else TreeNode tmpNode; tmpNode =

107、new TreeNode(节点点显示内容示内容, 在取消在取消选定定时显示示图像的索引像的索引值, 在在选择树节点点时显示示图像的索引像的索引值);/在在TreeView控件中加入子控件中加入子节点点 treeView1.SelectedNode.Parent.Nodes.Add(tmpNode); 1592024/9/20C#程序设计实用教程9.4.12 TreeView控件控件(3)删除节点Remove()方法删除节点就是删除TreeView控件中选定的节点,删除节点可以是子节点,也可以是兄弟节点,但无论节点的性质如何,必须保证要删除的节点没有下一级节点,否则必须先删除此节点中的下一级节点

108、,然后再删除此节点。删除节点比起上面的两个操作要略微简单一些,具体方法是:首先判断要删除的节点是否存在下一级节点,如果不存在,就可以调用TreeView类的Remove()方法删除节点了。1602024/9/20C#程序设计实用教程9.4.12 TreeView控件控件下面是删除TreeView控件中节点的具体代码:/判定选定节点是否存在下一级节点if(treeView1.SelectedNode.Nodes.Count=0)treeView1.SelectedNode.Remove();/删除节点elseMessageBox.Show(请先删除此节点中的子节点!);1612024/9/20C

109、#程序设计实用教程9.4.12 TreeView控件控件(4)展开所有ExpandAll()要展开TreeView控件中的所有节点,首先就要把选定的节点指针定位在TreeView控件的根节点上,然后调用选定控件的ExpandAll()方法就可以了:treeView1.SelectedNode=treeView1.Nodes0;/定位根节点treeView1.SelectedNode.ExpandAll();/展开控件中的所有节点(5)展开选定节点的下一级节点Expand()方法由于只是展开下一级节点,只需要调用Expand()方法就可以了:treeView1.SelectedNode.Expa

110、nd();1622024/9/20C#程序设计实用教程9.4.12 TreeView控件控件(6)折叠所有节点Collapse()折叠节点和展开所有节点是一组互操作,具体实现的思路也大致相同,折叠所有节点也是首先要把选定的节点指针定位在根节点上,然后调用选定控件的Collapse()就可以了:treeView1.SelectedNode=treeView1.Nodes0;/定位根节点treeView1.SelectedNode.Collapse();/折叠控件中的所有节点1632024/9/20C#程序设计实用教程9.4.12 TreeView控件控件4. TreeView控件的常用事件控件的

111、常用事件(1)AfterLabelEdit事件该事件在编辑树节点标签文本后发生;(2)BeforeLabelEdit事件该事件在编辑树节点标签文本前发生;(3)AfterSelect事件该事件在选定树节点标签文本后发生;(4)AfterExpend事件该事件在展开树节点后发生;此外,还有Click事件和DoubleClick事件。1642024/9/20C#程序设计实用教程9.4.12 TreeView控件控件【例例9-17】TreeView控件的运用。使用TreeView控件建立一个学校的分层列表,可以添加、删除系部和班级信息。设计步骤:(1)设计程序界面向设计窗体拖放1个TreeView控

112、件、2个TextBox控件和4个Button控件。其中,TextBox控件的Name分别为txtRoot、txtChild;Button控件的Name属性分别为btnAddRoot、btnAddChild、btnDelete、btnClear。设置属性完成的窗体如图9-36所示。从工具箱中向窗体拖放1个ImageList控件,选择其Image属性,然后在图9-34所示的图像集合编辑器中添加4幅图像。设置TreeView控件的ImageList属性为imageList1。1652024/9/20C#程序设计实用教程9.4.12 TreeView控件控件1662024/9/20C#程序设计实用教程

113、9.4.12 TreeView控件控件(2)编写代码添加按钮的事件处理程序代码:/添加按钮的事件。privatevoidbtnAddRoot_Click(objectsender,System.EventArgse)/构造节点显示内容、取消选定时显示图像索引号、选定时显示图像索引号TreeNodenewNode=newTreeNode(this.txtRoot.Text,0,1);this.treeView1.Nodes.Add(newNode);this.treeView1.Select();1672024/9/20C#程序设计实用教程9.4.12 TreeView控件控件privatevo

114、idbtnAddChild_Click(objectsender,System.EventArgse)TreeNodeselectedNode=this.treeView1.SelectedNode;if(selectedNode=null)MessageBox.Show(添加子节点之前必须先选中一个节点。,提示信息);return;TreeNodenewNode=newTreeNode(this.txtChild.Text,2,3);selectedNode.Nodes.Add(newNode);selectedNode.Expand();this.treeView1.Select();16

115、82024/9/20C#程序设计实用教程9.4.12 TreeView控件控件privatevoidbtnDelete_Click(objectsender,System.EventArgse)TreeNodeselectedNode=this.treeView1.SelectedNode;if(selectedNode=null)MessageBox.Show(删除节点之前先选中一个节点。,提示信息);return;TreeNodeparentNode=selectedNode.Parent;if(parentNode=null)this.treeView1.Nodes.Remove(sel

116、ectedNode);elseparentNode.Nodes.Remove(selectedNode);this.treeView1.Select();1692024/9/20C#程序设计实用教程9.4.12 TreeView控件控件privatevoidbtnClear_Click(objectsender,System.EventArgse)treeView1.Nodes.Clear();程序运行结果如图9-38所示。1702024/9/20C#程序设计实用教程9.4.13 ListView控件控件ListView控件用于显示项目的列表视图。可以利用该控件的相关属性来安排行列、列头、标题

117、、图标和文本。在ListView控件中,用列表的形式显示一组数据,每条数据都是一个ListItem类型的对象。ListView控件可以不同的视图显示列表项,包括大图标、小图标、列表、详细资料4种。1712024/9/20C#程序设计实用教程9.4.13 ListView控件控件1. ListView控件常用属性控件常用属性(1)View属性该属性用来表示数据的显示模式,有4种选择:LargeIcons(大图标):每条数据都用一个带有文本的大图标表示。SmallIcons(小图标):每条数据都用一个带有文本的小图标表示。List(列表):提供ListItems对象视图。Details(详细列表)

118、:每条数据有多个字段组成,每个字段占一列。(2)MultiSelect属性该属性用来表示是否允许多行选择。(3)SelectedItems属性该属性用来获取控件中选定的项。1722024/9/20C#程序设计实用教程9.4.13 ListView控件控件(4)Alignment属性该属性用业表示是否允许多行选择。(5)MultiSelect属性该属性用来获取或设置控件中项的对齐方式。默认值是Top,即从顶部开始位置。(6)CheckBoxs属性该属性用来获取或设置控件一个值,该值指示控件中各项的旁边是否显示复选框。(7)CheckItems属性该属性用来获取控件中当前选中的项。1732024/

119、9/20C#程序设计实用教程9.4.13 ListView控件控件(8)Items属性该属性用来获取控件中所有项的集合。(9)Sorting属性该属性用来获取或设置控件中的项排列顺序。(10)LabelEdit属性该属性用来获取或设置控件一个值,该值指示用户是否可以编辑控件中项的标签。1742024/9/20C#程序设计实用教程9.4.13 ListView控件控件2. ListView控件常用事件控件常用事件(1) AfterLabelEdit事件该事件在用户编辑当前选择的列表项之后发生。(2) BeforeLabelEdit事件该事件在用户编辑当前选择的列表项之前发生。(3) Select

120、edIndexChanged事件该事件当列表视图控件中选定的项的索引更改时发生。(4) Click事件该事件在用户用鼠标单击该控件时发生。(5) DoubleClick事件该事件在用户用鼠标双击该控件时发生。1752024/9/20C#程序设计实用教程9.4.13 ListView控件控件【例例9-18】ListView控件的运用。使用ListView控件显示学生信息,可以添加、删除学生信息。(1)建立应用程序用户界面创建一个新项目,在窗体上添加1个ListView控件、4个Label控件、1个ComboBox控件(cmbDisplayStyle)、3个TextBox控件(txtBoxName

121、、txtAddress、txtPhone)、两个Button控件(btnAppend、btnDelete),并适当调整控件和窗体的位置和大小。添加一个ImageList控件(imageList1),向该控件中加入1个16x16的图标文件。再添加一个ImageList控件(imageList2),向该控件中加入1个32x32的图标文件。1762024/9/20C#程序设计实用教程9.4.13 ListView控件控件177设置ListView控件的属性如下:LarageImageList:选imageList2。SmallImageList:选imageList1。Columns:学号(widt

122、h:60)、姓名(width:60)、籍贯(width:60)。View:当前显示模式,设为Details。设置属性完成的窗体如图9-39所示。2024/9/20C#程序设计实用教程(2)完整的程序代码如下所示:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;namespaceUseListViewpublicpartialclassForm1

123、:FormpublicForm1()InitializeComponent();9.4.13 ListView控件控件1782024/9/20C#程序设计实用教程/添加窗体的Load事件privatevoidForm1_Load(objectsender,EventArgse)cmbDisplayStyle.Items.Add(大图标);cmbDisplayStyle.Items.Add(小图标);cmbDisplayStyle.Items.Add(列表);cmbDisplayStyle.Items.Add(详细列表);cmbDisplayStyle.SelectedIndex=3;9.4.1

124、3 ListView控件控件1792024/9/20C#程序设计实用教程privatevoidbtnAppend_Click(objectsender,EventArgse)intitemNumber=this.listView1.Items.Count;stringsubItem=this.txtStuNo.Text,this.txtStuName.Text,this.txtAddress.Text;this.listView1.Items.Insert(itemNumber,newListViewItem(subItem);this.listView1.ItemsitemNumber.Im

125、ageIndex=0;9.4.13 ListView控件控件1802024/9/20C#程序设计实用教程privatevoidbtnDelete_Click(objectsender,EventArgse)for(inti=this.listView1.SelectedItems.Count-1;i=0;i-)ListViewItemitem=this.listView1.SelectedItemsi;this.listView1.Items.Remove(item);9.4.13 ListView控件控件1812024/9/20C#程序设计实用教程private void cmbDispla

126、yStyle_SelectedIndexChanged(object sender, EventArgs e) string str = this.cmbDisplayStyle.SelectedItem.ToString(); switch (str) case 大图标大图标: this.listView1.View = View.LargeIcon; break; case 小图标小图标: this.listView1.View = View.SmallIcon; break; case 列表列表: this.listView1.View = View.List; break; defau

127、lt: this.listView1.View = View.Details; break; 9.4.13 ListView控件控件1822024/9/20C#程序设计实用教程/添加ListView控件的Click事件,实现通过单击弹出学生的学生信息privatevoidlistView1_Click(objectsender,EventArgse)stringstr;str=this.listView1.SelectedItems0.Text;MessageBox.Show(该生的学号为:+str);9.4.13 ListView控件控件1832024/9/20C#程序设计实用教程/添加Li

128、stView控件的Click事件,实现通过单击弹出学生的学生信息privatevoidlistView1_Click(objectsender,EventArgse)stringstr;str=this.listView1.SelectedItems0.Text;MessageBox.Show(该生的学号为:+str);9.4.13 ListView控件控件1842024/9/20C#程序设计实用教程菜单通常分为主菜单和上下文菜单(又称为右键菜单)两类,在.NET类库中分别提供了MenuStrip和ContentMenuStrip控件来实现主菜单和上下文菜单。1. 主菜单控件主菜单控件Menu

129、StripMenuStrip控件用来提供主菜单控件,它必须依附在某个窗体上,通常显示在窗体的最上方,它由类提供。通常包含多个不同的菜单项(MenuItem),并且可以通过代码动态地添加或删除菜单项。9.4.14 菜菜单1852024/9/20C#程序设计实用教程l它可以包含以下4种不同类型的菜单项。MenuItem类型:类似Button的菜单项,通过单击来实现某种功能,同时可以包含子菜单项,它以右三角形的形式表示包含子菜单。ComboBox类型:类似ComboBox控件的菜单项,可以在菜单中实现多个可选项的选择。TextBox类型:类似TextBox控件的菜单项,可以在菜单中输入任意文本。Se

130、parator类型:菜单项分隔符,以灰色的“”表示。9.4.14 菜菜单1862024/9/20C#程序设计实用教程不同类型的菜单项具有不同的常用事件需要处理。MenuItem类型通常通过处理Click事件来完成单击当前菜单需要执行的操作。ComboBox类型则通过处理SelectedIndexChanged事件来判定选择变动的处理,同时也可以提供用户数据的输入和输出。TextBox类型则主要提供用户数据的输入,也可以通过响应TextChanged、KeyPress等事件实现一些扩展功能。下面具体来介绍一下用MenuStrip控件如何来实现主菜单。9.4.14 菜菜单1872024/9/20C

131、#程序设计实用教程【例9-19】MenuStrip控件的运用。(1)创建一个Windows窗体应用程序,在左侧的工具箱中双击MenuStrip控件,将其添加到窗体,如图9-42所示。9.4.14 菜菜单188可以看到,窗体的上方出现一个空菜单,并提示输入菜单名称。下文多出一个menuStrip1控件。2024/9/20C#程序设计实用教程(2)输入菜单文本时,VisualStudio2005将会自动产生下一个菜单条目的提示输入,方便开发人员使用,如图9-43所示。9.4.14 菜菜单1892024/9/20C#程序设计实用教程(3)下面创建一个类似于VisualStudio2005的部分菜单。

132、在图9-43提示的输入输入“文件(&F)”,将会产生“文件(F)”的效果,&被识别为确认快捷键的字符。同理,在【文件】下创建【新建】、【打开】、【添加】和【关闭】子菜单。在新创建的菜单上单击鼠标右键,可以添加其他内容,如分隔符,如图9-44所示。9.4.14 菜菜单1902024/9/20C#程序设计实用教程()还可以为菜单添加图像,以方便用户识别和使用。添加完毕,结果如图9-45所示。9.4.14 菜菜单1912024/9/20C#程序设计实用教程2. 上下文菜单控件上下文菜单控件ContexMenuStrip上下文菜单(右键菜单)的编辑、菜单项管理、菜单项使用都和主菜单完全相同,只是它被作

133、为右键弹击菜单使用,ContexMenuStrip控件提供了与某个控件关联的快捷菜单。为窗体创建上下文菜单通常的步骤如下例所示。【例9-20】ContexMenuStrip控件的运用。其步骤如下:(1)打开前面小节中的程序,添加ContexMenuStrip控件,如图9-46所示。9.4.14 菜菜单1922024/9/20C#程序设计实用教程()添加菜单项,如图9-47所示。9.4.14 菜菜单1932024/9/20C#程序设计实用教程( )设 置 Form1窗 体 的 ContextMenuStrip属 性 为contextMenuStrip1,运行程序,在窗体上单击鼠标右键,运行效果如

134、图9-48所示。9.4.14 菜菜单1942024/9/20C#程序设计实用教程除了菜单,工具栏(toolbar)也是快速执行某些操作的常用方式之一,在.NET类库中提供了ToolStrip控件来方便地实现工具栏界面。工具栏必须依靠在某个窗体上,可以包含多个工具栏项目(ToolStripItem),不同的项目具有不同的功能和意义。在.NET类库中,工具栏可以包含以下8种不同类型的工具栏项目:Label类型:和Label控件类似,通常在工具栏上提示静态文本。Button类型:和Button控件类似,通常通过鼠标单击事件来引发某个具体的操作。9.4.15 工具工具栏1952024/9/20C#程序

135、设计实用教程ComboBox类型:和ComboBox控件类似,通常在工具栏上提供一些可选项的选择,并通过SelectedIndexChanged事件来引起某个具体的操作。TextBox类型:和TextBox控件类似,通常在工具栏上让用户输入数据。SplitButton类型:具有同步下拉菜单选项。DropDownButton类型:具有下拉菜单的工具栏项目。ProgressBar类型:进度条样式工具栏项目,通常在工具栏上进行进度提示。Separator类型:工具栏分隔符,以灰色的“|”表示。9.4.15 工具工具栏1962024/9/20C#程序设计实用教程不同类型的工具栏项目具有不同的常用事件需

136、要处理:Button类型通常以处理Click事件来完成单击当前菜单需要执行的操作;ComboBox类型则通常处理SelectedIndexChanged事件来判定选择变动的处理,同时也可以提供用户数据的输入和输出;TextBox类型则主要提供用户数据的输入,也可以通过响应TextChanged、KeyPress等事件实现一些扩展功能。工具栏的添加和创建比较简单,具体步骤见下例所示。9.4.15 工具工具栏1972024/9/20C#程序设计实用教程【例例9-21】ToolStrip控件的运用。(1)打开上一小节中的程序,添加ToolStrip控件,如图9-49所示。可以看到窗体中多出一个工具栏

137、,下方显出toolStrip1控件。9.4.15 工具工具栏1982024/9/20C#程序设计实用教程(2)单击工具栏上的提示图标,如图9-50所示。仿照上一小节中的菜单项建立相应的工具栏按钮。9.4.15 工具工具栏1992024/9/20C#程序设计实用教程(3)运行程序,结果如图9-51所示。9.4.15 工具工具栏2002024/9/20C#程序设计实用教程 鼠标事件处理在程序运行中,产生事件的主体有很多,其中尤其以鼠标和键盘为最多。下面,首先来讨论鼠标事件的处理。鼠标相关的事件大致有6种,分别是:“MouseHover”、“MouseLeave”、“MouseEnter”、“Mou

138、seMove”、“MouseDown”和“MouseUp”。2012024/9/20C#程序设计实用教程 鼠标事件处理1. 如何在如何在C#程序中定程序中定义这些事件些事件在C#中是通过不同的Delegate来描述上述事件:其 中 描 述 MouseHover”、 “MouseLeave”和“MouseEnter”事件的Delegate是“EnentHandler”,而 描 述 “MouseMove”、 “MouseDown”和 “MouseUp”的三个事件的Delegate是“MouseEventHandler”。2022024/9/20C#程序设计实用教程 鼠标事件处理这 两 个 Dele

139、gate分 别 被 封 装 在 不 同 的 命 名 空 间 , 其 中“EventHandler”被 封 装 在 “System”命 名 空 间 ;“MouseEventHandler”被封装在“”命名空间中。在 为 “MouseHover”、 “MouseLeave”、 “MouseEnter”事 件 提 供 数据的类是“EventArgs”,它也被封装在“System”命名空间中;而为后面的三个事件提供数据的类是“MouseEventArgs”,它却被封装在“”命名空间中。以上这些就决定了在C#中定义这些事件和响应这些事件有着不同的处理办法。2032024/9/20C#程序设计实用教程 鼠

140、标事件处理2. 鼠鼠标相关事件中典型相关事件中典型问题处理理办法法和鼠标相关事件的典型问题,其一是读取鼠标的当前位置;其二是判定到底是哪个鼠标按键被挥动。判定鼠标的位置可以通过事件“MouseMove”来处理,在“MouseEventArgs”类 中 提 供 了 两 个 属 性 “X”和 “Y”, 来 判 定 当 前鼠标横坐标和纵坐标。而判定鼠标按键的按动情况。可以通过事件“MouseDown”来处理,并且在“MouseEventArgs”类中也提供了一个属性“Buttons”来判定鼠标按键情况。根据这些知识,可以得到在C#中如何实现读取鼠标当前位置和判定鼠标按键情况的程序代码。2042024

141、/9/20C#程序设计实用教程 鼠标事件处理【例例9-22】用2个文本框显示鼠标指针在窗体上移动时,鼠标指标所指的位置。实现代码如下:privatevoidForm1_MouseMove(objectsender,MouseEventArgse)this.txtCoordinateX.Text=Convert.ToString(e.X);this.txtCoordinateY.Text=Convert.ToString(e.Y);程序运行结果如图9-52所示。2052024/9/20C#程序设计实用教程 鼠标事件处理【例例9-23】实现判定鼠标按键的代码。实现代码如下:privatevoidF

142、orm1_MouseDown(objectsender,MouseEventArgse)if(e.Button=MouseButtons.Left)MessageBox.Show(按动鼠标左键!);if(e.Button=MouseButtons.Middle)MessageBox.Show(按动鼠标中键!);if(e.Button=MouseButtons.Right)MessageBox.Show(按动鼠标右键!);程序运行结果如图9-53所示。2062024/9/20C#程序设计实用教程 9.6 键盘事件处理在C#中和键盘相关的事件相对比较少,大致有三种:“KeyDown”、“KeyUp

143、”和“KeyPress”。1. 如何在程序中定如何在程序中定义这些事件些事件在C#中描述“KeyDown”、“KeyUp”的事件的Delegate是“KeyEventHandler”;而描述“KeyPress”的事件的Delegate是“KeyPressEventHandler”。这两个Delegate都封装在命名空间“”中。为“KeyDown”、“KeyUp”的事件提供数据的类是“KeyEventArgs”,而为“KeyPress”事件提供数据的类是“KeyPressEventArgs”。同样,这二者也被封装在命名空间“”中。2072024/9/20C#程序设计实用教程 9.6 键盘事件处理

144、2. 和和键盘相关事件中的典型相关事件中的典型问题处理理办法法和键盘相关的典型问题,无非是判定到底是哪个按键被按动。通过上面的三个事件都可以完成,并且在“KeyEventArgs”类中通过一个属性“KeyCode”可以用来读取当前按键,所以就在“KeyUp”或者“KeyDown”事件中处理这个问题。根据上面这些知识,可以得到在C#中编写如何读取按键的程序代码。在“KeyPressEventArgs”类中,通过一个“KeyChar”属性获取或设置与按下的键对应的字符;通过Handled属性获取或设置一个值,该值指示是否处理过KeyPress事件。2082024/9/20C#程序设计实用教程 9.

145、6 键盘事件处理【例例9-24】实现显示所按动的按键名称。实现代码如下:privatevoidForm1_KeyUp(objectsender,KeyEventArgse)MessageBox.Show(你所按动的键为:+e.KeyCode.ToString();程序运行结果如图9-54所示。2092024/9/20C#程序设计实用教程 9.6 键盘事件处理【例例9-25】实现只允许输入数字的TextBox控件。分析:分析:可以使用KeyChar属性获取或设置以下键:az、AZ、Ctrl、标点符号、键盘顶部和数字键盘上的数字键、Enter键。我们又知道,键盘按键与ASCII字符集两者之间存在对

146、应关系。为了便于用户的输入,在限制用户输入非09之间的数字的同时,不应限制用户输入“回车”和“退格”,否则将给用户带来不便。其中,“回车”键的ASCII值为:13;“退格”键的ASCII值为:8。2102024/9/20C#程序设计实用教程 9.6 键盘事件处理实现代码如下:privatevoidtxtProduceNum_KeyPress(objectsender,KeyPressEventArgse)if(e.KeyChar!=8&!char.IsDigit(e.KeyChar)&e.KeyChar!=13)MessageBox.Show(商品数量只能输入数字,操作提示,MessageBo

147、xButtons.OK,MessageBoxIcon.Information);e.Handled=true;/表示已经处理过KeyPress事件程序运行结果如图9-55所示。2112024/9/20C#程序设计实用教程 9.6 键盘事件处理2122024/9/20C#程序设计实用教程 9.7 窗体之间的数据交互213通常,Windows窗体之间会发生数据交互,主窗体需要将数据传递到弹出窗体,有时弹出窗体修改数据后需要把新数据返回主窗体。弹出窗体和父窗体之间的数据交互,通常采用以下3种方式:属性:弹出窗体通过读写属性将数据传递到父窗体,接收父窗体数据。方法:弹出窗体通过构造函数或方法将数据传递

148、到父窗体,接收父窗体数据。事件:弹出窗体通过事件的方式通知父窗体有数据需要进行交互。2024/9/20C#程序设计实用教程通过在弹出窗体中,添加相应的读写属性实现窗体之间的数据交互。【例例9-26】在一个项目中,创建2个窗体,frmLogin用于实现登录,frmWelcome用于显示欢迎信息。显然,这两个窗体之间要有数据的交互。在此通过frmWelcome中的读写属性来实现。(1)设计窗体。此过程较简单,略过。9.7.1 通通过属性属性实现窗体之窗体之间的数据交互的数据交互2142024/9/20C#程序设计实用教程(2)在frmWelcome中添加“姓名”的读写属性。具体代码如下:priva

149、testring_strName;/姓名属性publicstringstrNamegetreturnthis._strName;setthis._strName=value;9.7.1 通通过属性属性实现窗体之窗体之间的数据交互的数据交互2152024/9/20C#程序设计实用教程(3)在frmLogin中的“登录”按钮的Click事件中,添加如下代码:privatevoidbtnLogin_Click(objectsender,EventArgse)frmWelcomefrmwelcome=newfrmWelcome();frmwelcome.strName=this.txtName.Tex

150、t.ToString();/实现窗体间的数据传递frmwelcome.Show();(4)在frmWelcome中的窗体Load 事件中,添加如下代码:privatevoidfrmWelcome_Load(objectsender,EventArgse)this.lblWelcome.Text=欢迎你+this.strName+同学!;9.7.1 通通过属性属性实现窗体之窗体之间的数据交互的数据交互2162024/9/20C#程序设计实用教程程序运行结果如图9-56、9-57所示。9.7.1 通通过属性属性实现窗体之窗体之间的数据交互的数据交互2172024/9/20C#程序设计实用教程通过在

151、弹出窗体中,重载弹出窗体的构造函数来实现窗体之间的数据交互。【例例9-27】在一个项目中,创建2个窗体,frmLogin用于实现登录,frmWelcome用于显示欢迎信息。显然,这两个窗体之间要有数据的交互。在此通过frmWelcome中的重载构造函数来实现。(1)设计窗体,此过程较简单,略过。(2)在frmWelcome中重载窗体的构造函数。具体代码如下:publicfrmWelcome(stringstrName)InitializeComponent();this.lblWelcome.Text=欢迎你,+strName+同学!; 9.7.2 通通过窗体构造函数窗体构造函数实现窗体之窗体

152、之间的数据交互的数据交互2182024/9/20C#程序设计实用教程(3)在frmLogin中的“登录”按钮的Click事件中,添加如下代码:privatevoidbtnLogin_Click(objectsender,EventArgse)stringstrStuName=this.txtName.Text;/通过窗体的构造函数实现窗体间的数据传递frmWelcomefrmwelcome=newfrmWelcome(strStuName);frmwelcome.Show();程序运行结果如图9-58、9-59所示。 9.7.2 通通过窗体构造函数窗体构造函数实现窗体之窗体之间的数据交互的数据交互2192024/9/20C#程序设计实用教程 9.8 本章小结220C#是一种可视化的程序设计语言。Windows窗体和控件的应用,在C#程序设计中占据重要的角色。本章主要介绍了如何建立Windows应用程序、常用的WindowsForms控件、菜单以及多文档界面的设计等内容,在其中对于属性及事件的处理进行重点介绍。对于本章的内容要求读者熟练掌握,并加以运用到程序开发中。2024/9/20C#程序设计实用教程

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号