(完整版)第9章-Windows应用程序设计基础

PPT
  • 阅读 74 次
  • 下载 0 次
  • 页数 220 页
  • 大小 6.633 MB
  • 2022-11-12 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
(完整版)第9章-Windows应用程序设计基础
可在后台配置第一页与第二页中间广告代码
(完整版)第9章-Windows应用程序设计基础
可在后台配置第二页与第三页中间广告代码
(完整版)第9章-Windows应用程序设计基础
可在后台配置第三页与第四页中间广告代码
(完整版)第9章-Windows应用程序设计基础
(完整版)第9章-Windows应用程序设计基础
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 220
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
文本内容

【文档说明】(完整版)第9章-Windows应用程序设计基础.ppt,共(220)页,6.633 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-2111.html

以下为本文档部分文字说明:

第9章Windows应用程序设计基础C#是一种可视化的程序设计语言。Windows窗体和控件是开发C#应用程序的基础,窗体和控件在C#程序设计中扮演着重要的角色。在C#中,每个Windows窗体和控件都是对象,都是类的实例。窗体是可视化

程序设计的基础界面,是其他对象的载体和容器。控件是添加到窗体对象上的对象,每个控件都有自己的属性、方法和事件以完成特定的功能。Windows应用程序设计还体现了另外一种思维,即对事件的处理。22022/11/12C#程序设计

实用教程本章将介绍建立Windows应用程序、使用WindowsForms常用控件、菜单和多文档界面设计等。同时向大家展示用Windows窗体来编写程序的特点以及技巧。32022/11/12C#程序设计实用教程9.1Windows应用

程序的结构•VS.NET集成开发环境是基于.NETFramework构建的,该框架提供了一个有条理的、面向对象的、可扩展的类集,它使用户得以开发丰富的Windows应用程序。•通过Windows“窗体设计器”进行设

计窗体,用户就可以创建Windows应用程序和客户机/服务器应用程序。用户可对窗体设定某些特性并在其上添加控件,然后编写代码以增加控件和窗体的功能。42022/11/12C#程序设计实用教程9.1Windows应用程序的结构VS.NET提供了很多

工具可以使应用程序的开发快捷、可靠。这些工具包括:✓Windows窗体可视化设计器。✓识别代码编辑器。✓集成的编译和调试。✓项目管理工具。52022/11/12C#程序设计实用教程9.1Windows应用程序的结构典型的Windows应用程

序通常包括窗体(Forms)、控件(Controls)和相应的事件(Events)。下面通过C#设计实现一个简单的计算器,要求能够实现基本的加、减、乘、除功能,并以这个“计算器”为例,来了解和掌握W

indows应用程序的一般开发过程。62022/11/12C#程序设计实用教程9.1.1计算器窗体Windows窗体就是创立Windows应用程序的框架。在VS.NET中创建Windows应用程序

的第一步就是建立这个框架。操作步骤如下:(1)运行VS.NET,在【起始页】上单击【新建项目】按钮,打开“新建项目”对话框,如图9-1所示。在“项目类型”列表框中指定项目的类型为“ViusalC#”,在“模板”列表框中选择“Windo

ws应用程序”模板,在“名称”文本框中输入Calculator,在“位置”下拉列表中选定保存项目的位置。72022/11/12C#程序设计实用教程9.1.1计算器窗体(2)单击“确定”按钮后就进入VS.NET的主

界面,如图9-2所示。8•从图9-2可以看出,当选择“Windows应用程序”作为应用程序的模板后,系统会自动为用户生成一个空白窗体,一般名为Form1。•该窗体就是应用程序运行时显示给用户的操作界面,下一步就是向窗体中添加各种控件。2022/1

1/12C#程序设计实用教程9.1.2计算器控件控件表示用户和程序之间的图形化连接。控件可以提供或处理数据、接受用户输入、对事件做出响应或执行连接用户和应用程序的其他功能。因为控件本质上是具有图形接口的组件,所以它能通过组件所提供的功能并与用户交互。窗体中的

控件有很多,“工具箱”中的“Windows窗体”里包含了所有Windows的标准控件,用户还可以根据需要自己定义控件。通过在“属性”窗口中改变控件的属性可以改变的外观和特性。92022/11/12C#程序设计实用教程9.1.2计算器控件本例中需要用到如下所列的控件:

✓(1)按钮:16个。➢10个数字按钮分别用于表示0~9;➢4个运算符按钮表示“+”、“-”、“*”、“\”;➢1个“计算”按钮用于实施计算操作;➢1个“清空”按钮用于清除上次计算结果。✓(2)标签:1个。用于标示计算结果所在的文本框。✓(3)文本框:1个。用

于显示计算结果。102022/11/12C#程序设计实用教程9.1.2计算器控件具体添加控件步骤如下:首先向窗体中添加按钮(Button)。具体操作为:✓在工具箱中单击Button,然后移动鼠标指针到窗体中的预定位置,按下左键拖动鼠标,划出一

个方框,释放鼠标左键后,一个按钮就被添加到刚才方框的位置了。调整好大小和位置后单击选中该按钮,在“属性”窗口中可以看到该控件名为Button1,将该按钮的Text属性设置为“1”。✓继续在窗体中添加其余15个按钮,并分别设置好它们的属性。112022/11/12C#程序设计实用教程9

.1.2计算器控件界面设计已经完成了,接下来的事情就是为各个控件添加相应的事件代码了。12•按照同样的方法在窗体中添加一个标签(Label),设置其Text属性为“结果”,再添加一个文本框(TextBox),并设置其Text属性为空。•最后,一个简单的计算器的界面就完成了,如图9-3所示。20

22/11/12C#程序设计实用教程9.1.3计算器事件在C#中,基于Windows应用程序设计方法是事件驱动的。事件驱动不是由程序的顺序来控制的,而是由事件的发生来控制的。事件驱动程序设计是围绕着消息的产生与处理而展开的,消息就是关于发生的事件的信息。Wind

ows程序员的工作就是对所开发的应用程序所要发出或者接收的消息进行排序和管理。事件驱动程序方法提供了许多便利,对于那些需要大范围用户干预的应用程序来说,更是很有用处。132022/11/12C#程序设计实用教程9.1.3计算器事件在“窗体设计器”中

看到的是窗体及其中的控件,而要为控件添加事件处理程序就必须先切换到代码编辑器状态。切换到代码编辑器有以下几种方法:✓(1)双击窗体或者某控件。✓(2)在解决方案资源管理器中右键单击Form1.cs,从快捷菜单中选择“查看代码”命令

。如果选择“视图设计器”则可以回到“窗体设计器”中。✓(3)当第一次切换到代码编辑器之后,在窗体标题“Form1.cs[设计]”的左边会自动出现一个新的标题:Form1.cs,单击该标题就可以切换到代码编辑器。反之,如果单击“Form1.cs[设计]”则会切换到“窗体设计器”。14

2022/11/12C#程序设计实用教程9.1.3计算器事件下面分析一下计算器中各个控件到底应该添加什么样的代码。对于计算器来说,当单击某个数字键后,结果显示区内应显示该键上的数字。因此,可以双击按钮“1”,切换到代码编辑器,此时光标就停留在该按钮所对应的代码处,输

入下列代码:privatevoidbtn1_Click(objectsender,EventArgse){Buttonbtn=(Button)sender;textBox1.Text+=btn.Text;}152022/11/1

2C#程序设计实用教程9.1.3计算器事件继续给其他数字按钮添加同样的代码。然后给4个运算符按钮添加下列代码:privatevoidbtnAdd_Click(objectsender,EventArgse){Butto

nbtn=(Button)sender;textBox1.Text=textBox1.Text+""+btn.Text+"";//空格用于分隔数字各运算符}162022/11/12C#程序设计实用教程9.1.3计算器事件privatevoidbtnSub_Cl

ick(objectsender,EventArgse){Buttonbtn=(Button)sender;textBox1.Text=textBox1.Text+""+btn.Text+"";//空格用于分隔数字各运算符}privatev

oidbtnMul_Click(objectsender,EventArgse){Buttonbtn=(Button)sender;textBox1.Text=textBox1.Text+""+btn.Text+"";//空格用于

分隔数字各运算符}172022/11/12C#程序设计实用教程9.1.3计算器事件privatevoidbtnDiv_Click(objectsender,EventArgse){Buttonbtn=(Bu

tton)sender;textBox1.Text=textBox1.Text+""+btn.Text+"";//空格用于分隔数字各运算符}接下来给“清空”按钮添加如下代码:privatevoidbtnClear_Click(objectsender,Event

Argse){textBox1.Text="";}182022/11/12C#程序设计实用教程9.1.3计算器事件最后给“计算”按钮添加下列代码:privatevoidbtnCalculate_Click(objectse

nder,EventArgse){Singler;//用于保存计算结果stringt=textBox1.Text;//t用于保存文本框中的算术表达式intspace=t.IndexOf('');//用于搜索空格位置strings1=t.Subst

ring(0,space);//s1用于保存第一个运算数charop=Convert.ToChar(t.Substring(space+1,1));//op用于保存运算符strings2=t.Substring(space+3);//s2用于保存第二个运算数Singlearg1=Co

nvert.ToSingle(s1);//将运算数从string转换为SingleSinglearg2=Convert.ToSingle(s2);192022/11/12C#程序设计实用教程9.1.3计算器事件swi

tch(op){case'+':r=arg1+arg2;break;case'-':r=arg1-arg2;break;case'*':r=arg1*arg2;break;202022/11/12C#程序设计实

用教程9.1.3计算器事件case'/':if(arg2==0){thrownewApplicationException();}else{r=arg1/arg2;break;}break;default:thrownewAppli

cationException();}212022/11/12C#程序设计实用教程9.1.3计算器事件//将计算结果显示在文本框中textBox1.Text=r.ToString();}现在,所有的工作都完成了。在“调试”菜单中

选择“启动”命令或者“开始执行(不调试)”命令运行该应用程序,计算器可以工作了。222022/11/12C#程序设计实用教程9.2Windows窗体通过“计算器”这个例子,已初步了解了Windows应用程序的结构。下面具体介绍Windows应用程序的设计和开发。一个应用程序除了需要实现应

有的功能外,还必须具有良好的用户界面。在C#中,Windows应用程序的界面是以窗体(Form)为基础的,窗体是Windows应用程序的基本单位,用来向用户展示信息和接受用户的输入。窗体可以是标准窗口、多文档界面(MDI)窗口、对话框的显示界面。232022/11/12C#程序设计实用教程9.

2Windows窗体窗体就好像一个容器,其他界面元素都可以放置在窗体中。C#中以类Form来封装窗体,一般来说,用户设计的窗体都是类Form的派生类,用户窗体中添加其他界面元素的操作实际上就是向派生类中添加私有成员。当新建一个Windows应用程序项

目时,C#就会自动创建一个默认名为Form1的Windows窗体。242022/11/12C#程序设计实用教程9.2Windows窗体Windows窗体由以下4部分组成:✓标题栏✓控制按钮✓边界✓窗口区252022/11/12C#程序设计实用教程9.2.1Windows窗体的基本属性Wind

ows窗体的属性可以决定窗体的外观和行为,其中常用的属性有:名称(Name)属性、标题(Text)属性、控制菜单属性和影响窗体外观的属性。1.窗体的名称属性(Name)Name用于设置窗体的名称,该属性值作为窗体的标志,用于在程序中引用窗体。在初始

新建一个Windows应用程序项目时,自动创建一个窗体,该窗体的名称被自动命名为Form1;添加第2个窗体时,其名称被自动命名为Form2,依次类推。通常而言,在设计Windows窗体时,可给其Name属性设置一个有实际含义的名字。262022/11/12C#

程序设计实用教程9.2.1Windows窗体的基本属性2.窗体的标题属性(Text)Text属性用于设置窗体标题栏显示的内容,它的值是一个字符串。通常,标题栏显示的内容应能概括地说明窗体的内容或作用。例如,对于一个登录窗体,其栏题栏设置为“欢迎登录!”。2

72022/11/12C#程序设计实用教程9.2.1Windows窗体的基本属性3.窗体的控制菜单属性在C#应用程序中的Windows窗体,一般都显示控制菜单,以方便用户的操作。(1)ControlBox属性:该属性用来设置窗体上

是否有控制菜单。其默认值True,窗体上显示控制菜单。若将该属性设置为False,则窗体上不显示控制菜单,如图9-4所示。282022/11/12C#程序设计实用教程9.2.1Windows窗体的基本属性(2)MaximizeBox属性:用于

设置窗体上的最大化按钮。其默认值True,窗体上显示最大化按钮。若将该属性设置为False,则窗体上不显示最大化按钮。(3)MinimizeBox属性:用于设置窗体上的最小化按钮。其默认值True,窗体上显示最小化按钮。若将该属性设置为False

,则窗体上不显示最小化按钮。292022/11/12C#程序设计实用教程9.2.1Windows窗体的基本属性4.设置窗体外观的属性(1)FormBorderStyle属性:用于控制窗体边界的类型。它有7个可选值,可选值说明如表9-1所示。302022/11/12C#程序设计实用教程9.2

.1Windows窗体的基本属性(2)Size属性:用来设置窗体的大小。(3)Location属性:设置窗体在屏幕上的位置,即设置窗体左上角的坐标值。(4)BackColor属性:用于设置窗体的背景颜色

,可以从弹出的调色板中选择。312022/11/12C#程序设计实用教程9.2.1Windows窗体的基本属性(5)BackgroundImage属性:用于设置窗体的背景图像。(6)Opacity属性:该属

性用来设置窗体的透明度。5.设置窗体可见性的属性•窗体的可见性由Visible属性来控制。322022/11/12C#程序设计实用教程9.2.2创建窗体•通常,在开发项目时,一个窗体往往不能满足,通常需要用到多个窗体。•

C#提供了多窗体处理能力,在一个项目中可创建多个窗体,添加新窗体的方式如下:(1)选择项目菜单下的“添加Windows窗体”命令,打开“添加新项”对话框,如图9-5所示。332022/11/12C#程序设计实用教程9.2.2创建窗体(2)

在“添加新项”对话框的模板框内,选择“Windows窗体”模板,然后,单击“打开”按钮,就添加一个新的Windows窗体。完成添加窗体后,在解决方案资源管理器窗口中双击对应的窗体,则在Windows窗体设计器中,可显示该窗体。342022/11/12C#程序设计实用教程9.2.3设置启动窗体

属性•当在应用程序中添加了多个窗体后,默认情况下,应用程序中的第一个窗体被自动指定为启动窗体。在应用程序开始运行时,此窗体就会首先显示出来。•如果想实现在应用程序启动时,显示别的窗体,那么就要设置启动窗体。如何实现设置启动窗体,请看例9-1。【例9

-1】C#设置启动窗体。•步骤如下:(1)在一个项目中,添加两个窗体。352022/11/12C#程序设计实用教程9.2.3设置启动窗体属性(2)在解决方案中,有一个Program.cs文件,双击此文件,此时该文件的代码如下所示:staticclassProgram

{staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Appl

ication.Run(newForm1());}}362022/11/12C#程序设计实用教程9.2.3设置启动窗体属性(3)要实现先启动Form2,只需在Program.cs文件中修改此行“Application.Run(newForm1());”代码为

“Application.Run(newForm2());”,即可。(4)运行程序,先启动的窗体为Form2。372022/11/12C#程序设计实用教程9.2.4窗体的显示与隐藏1.窗体的显示•如果要在一个窗体中通过按钮打

开另一个窗体,就必须通过调用Show()方法显示窗体。语法如下:publicvoidShow();【例9-2】在Form1窗体中添加一个Button按钮,在按钮的Click事件中调用Show(),打开Form2窗体。代码如下:priva

tevoidbutton1_Click(objectsender,EventArgse){Form2frm2=newForm2();//实例化Form2frm2.Show();//调用Show方法显示Form2窗体}382022/11/12C#程序设计实用教程9.2.4窗体

的显示与隐藏2.窗体的隐藏•通过调用Hide()方法隐藏窗体。语法如下:publicvoidHide();•【例9-3】通过登录窗体登录系统,输入用户名和密码后,单击“登录”按钮,隐藏登录窗体,显示主窗体。关键代码如下

:this.Hide();//调用Hide方法隐藏当前窗体frmMainfrm=newfrmMain();//实例化frmMainfrm.Show();//调用Show方法显示frmMain窗体392022/11/12C#程序设计实用教程9.2.5窗体的事

件Windows是事件驱动的操作系统,对Form类的任何交互都是基于事件来实现的。Form类提供了大量的事件用于响应对窗体执行的各种操作。窗体设计人员往住关心窗体的加载和关闭,通常在加载时进行界面和数据的初始化。在关闭前进行资源的释放等清理操作

,也可以取消关闭操作。下面详细介绍窗体的Click、Load和FormClosing事件。402022/11/12C#程序设计实用教程9.2.5窗体的事件1.Click(单击)事件当单击窗体时,将会触发窗体的Click事

件。语法如下:publiceventEventHandlerClick【例9-4】在窗体的Click事件中编写代码,实现当单击窗体时,弹出提示框。代码如下:privatevoidForm1_Click(objectsender,EventArgse){Mes

sageBox.Show("已经单击了窗体!");//弹出提示框}412022/11/12C#程序设计实用教程9.2.5窗体的事件程序的运行如图9-6所示。422022/11/12C#程序设计实用教程9.2.5窗体的事件2.Load(加载)事件当第一次直接或间接调用Form.

Show方法来显示窗体时,窗体就会进行且只进行一次加载,并且在必需的加载操作完成后会引发Load事件。通常,在Load事件响应函数中执行一些初始化操作。语法如下:publiceventEventHandlerLoad432022/11/12C#程

序设计实用教程9.2.5窗体的事件【例9-5】在下述程序,在窗体的Load事件中对窗体的大小、标题、颜色等属性进行了设置。privatevoidForm1_Load(objectsender,EventArgse){this

.Width=1000;this.Height=500;this.ForeColor=Color.Cyan;this.BackColor=Color.Red;this.Text="Welcomeyou!";}442022/11/12C#程序设计实

用教程9.2.5窗体的事件程序的运行如图9-7所示。452022/11/12C#程序设计实用教程9.2.5窗体的事件3.FormClosing(关闭)事件Form类的FormClosing事件是在窗体关闭时引发的事件,直接或间接调用Form.Close()方法都会引发事件。在Form

Closing事件中,通常进行关闭前的确认和资源释放操作。语法如下:publiceventFormClosingEventHandlerFormClosing【例9-6】创建一个Windows应用程序,实现当关闭窗体之前,弹出提示框,询问是

否关闭当前窗体,单击“是”按钮,关闭窗体,代码如下。462022/11/12C#程序设计实用教程9.2.5窗体的事件privatevoidForm1_FormClosing(objectsender,FormClosingEventArg

se){DialogResultdr=MessageBox.Show("是否关闭窗体","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);if(dr==DialogResult.Yes)//使用if语句判定

是否单击“是”按钮{e.Cancel=false;//如果单击“是”按钮则关闭窗体}else{e.Cancel=true;//否则,不执行操作}}472022/11/12C#程序设计实用教程9.2.5窗体的事件程序的运行如图9-8所示。482022/11/12C#程序设计实用教程9.

3窗体控件概述控件是包含在窗体上的对象,是构成用户界面的基本元素,也是C#可视化编程的重要工具。使用控件可使程序的设计简化避免大量重复性工作,简化设计过程,有效地提高设计效率。对于一个程序开发人员而言,必须掌握每类控件的功能、用途,并掌握其常用的属性、事件和方法。492022/11/1

2C#程序设计实用教程9.3窗体控件概述在VS2005中,工具箱中包含了建立应用程序的各种控件。工具箱分为Windows窗体、公共控件、容器、菜单和工具栏、数据、组件、打印、对话框等部分,常用的Windows窗体控件放在“

Windows窗体”选项卡下。工具箱中有数十个常用的Windows窗体控件,它们以图标的方式显示在工具箱中,其名称显示于图标的右侧。502022/11/12C#程序设计实用教程9.3窗体控件概述在介绍具体控件之前,首先在此探讨一下各个控件共有的属性、事件和方

法。在C#中,所有的窗体控件,比如标签控件、文本框控件、按钮控件等全部都是继承于:System.Windows.Forms.Control。作为各种窗体控件的基类,Control类实现了所有窗体交互控件的基本功能。Control类

的属性、方法和事件是所有窗体控件所公有的,而且其中很多是在编程中经常会遇到的。512022/11/12C#程序设计实用教程9.3窗体控件概述(1)Control类的属性•Control类的属性描述了一个窗体控件的所有公共属性,可以在属性(Properties)窗口中查看或修

改窗体控件的属性。•常用的属性如下:⚫Name属性•每一个控件都有一个Name(名字)属性,在应用程序中,可通过此属性来引用这个控件。•C#会给每个新添加的控件指定一个默认名。在应用程序设计中,可根据需要将控件的默认名字改成更有实际代表意义的

名字。522022/11/12C#程序设计实用教程9.3窗体控件概述⚫Text属性•在C#中,每一个控件对象都有Text属性。Text属性在很多控件中都有重要的意义和作用。•例如,在标签控件中显示的文字、在文本框中用户输入的文字、组

合框和窗体中的标题等都是用控件的Text进行设定的。•对于Text属性的设置过程及设置结果如图9-9、9-10所示。532022/11/12C#程序设计实用教程9.3窗体控件概述⚫Anchor属性•Anchor的意思是“锚”,那么A

nchor属性是用来确定此控件与其容器控件的固定关系的。•在此,所谓容器控件是指什么呢?顾名思义,容器控件就是像一般的容器一样可以存放别的控件的控件!例如,窗体控件中会包含很多的控件,像标签控件、文本框等。这时,称包含控件的控件为容器控件或父控件,而里面的控

件为子控件。显然,这必然涉及到一个问题,即子控件与父控件的位置关系问题。即当父控件的位置、大小变化时,子控件按照什么样的原则改变其位置、大小。Anchor属性就用于设置此原则。542022/11/12C#程序设计实用教程9.3窗体控件概述对于Anchor属性,可以设定Top、Bott

om、Right、Left中任意的几种,设置的方法非常直观,如图9-11所示。552022/11/12C#程序设计实用教程9.3窗体控件概述图9-11中选中变黑的方位即为设定的控件方位,图中所示的方位为Top、Left、Bottom。此时,如果容器控件变化,子控件将保

证其上边缘与容器上边的距离、左边缘与容器左边的距离,底边与容器底边的距离。其运行效果如图9-12所示。562022/11/12C#程序设计实用教程9.3窗体控件概述⚫Dock属性Dock属性规定了子控件与父控件的边缘依赖

关系。Dock的效果,如图9-13所示。57•Dock的值有6种,分别是Top、Bottom、Left、Right、Fill,最后还有默认值None。一旦Dock值被设定,子控件就会发生变化与父控件选定的边缘相融在一起。2022/11/12C#程序设计实用教程9.3窗体控件概述(2)Contro

l类的方法可以调用Control类的方法来获得控件的一些信息,或者设置控件的属性值及行为状态。例如:Focus方法可设置此控件获得的焦点;Refresh方法可重画控件;Select方法可激活控件;Show方法可显示控件等。582022/

11/12C#程序设计实用教程9.3窗体控件概述(3)Control类的事件在C#中,当用户进行某一项操作时,会引发某个事件的发生,此时就会调用事件处理程序代码,实现对程序的控制。事件驱动实现是基于窗体的消息传递和

消息循环机制的。在C#中,所有的机制都被封装在控件之中,极大方便了编写事件的驱动程序。如果希望能够更加深入地操作,或定义自己的事件,就需要联合使用委托(Delegate)和事件(Event),可以灵活地添加、修改事件的响应,并自定义事

件的处理方法。例如,Control类的可响应的事件有:单击时发生的Click事件;双击时发生的DoubleClick事件;取得焦点时发生的GetFocus事件;鼠标移动时发生的MouseMove事件等。592022/11/12

C#程序设计实用教程9.4常用控件窗体是由一个个控件构成的,因此熟悉控件是进行合理、有效的程序开发的重要前提。本节内容将针对Windows窗体应用程序中常见的控件进行详细介绍。602022/11/12C#程序设计实用教程9.4.1

按钮控件按钮(Button)是用户与应用程序交互的最常用的工具。它用于接收用户的操作信息,去执行预先规定的命令,触发相应的事件过程,以实现指定的功能。1.常用属性(1)Text属性该属性用于设定按钮上显示的文本。该属性也可为按钮创建快捷方

式,其方法是在作为快捷键的字母前加一个“&”字符,则在程序运行时,命令按钮上该字母带有下划线,该字母就成为快捷键。例如,某个按钮的Text属性设置为“&Display”,程序运行时,就会显示为“Display”。612022/11/12C#程序设计实用教程9.4.1

按钮控件(2)FlatStyle属性该属性指定了按钮的外观风格,它有4个可选值。分别是:Flat、Popup、System、Standard。该属性的默认值为Standard。(3)Image属性用于设定在按钮上显示

的图形。(4)ImageAlign属性当图片显示在命令按钮上时,可以通过ImageAlign属性调节其在按钮上的位置。(5)Enable属性用于设定控件是否可用,不可用,则用灰色表示。(6)Visible属性用于设定控件是否可见,

不可见,则隐藏。注意:上述的属性中,前4项为外观属性;而后2项为行为属性。622022/11/12C#程序设计实用教程9.4.1按钮控件2.响应的事件如果按钮具有焦点,就可以使用鼠标左键、Enter键或空

格键触发该按钮的Click事件。当使用ShowDialog方法显示窗体时,可以使用按钮的DialogResult属性指定ShowDialog的返回值。【例9-7】按钮控件的运用。(1)为窗体Form1添加一个计数器nCou

nter,并添加3个按钮控件,分别完成递增计数器、递减计数器、通过消息框提示计数器的值的功能,并添加1个Label控件来显示每次运算后的计数器值。完成的窗体界面如图9-14所示。632022/11/12

C#程序设计实用教程9.4.1按钮控件(2)设置窗体和各控件的属性,如表9-2所示。642022/11/12C#程序设计实用教程9.4.1按钮控件(3)切换到代码窗口,创建事件过程:privateintnCounter;//第一次加载时,进行计数器和lblRe

sult的初始化privatevoidForm1_Load(objectsender,EventArgse){this.nCounter=50;this.ShowCounter();}//进行递增操作,并提示新值priv

atevoidbtnInc_Click(objectsender,EventArgse){this.nCounter++;this.ShowCounter();}652022/11/12C#程序设计实用教程

9.4.1按钮控件//进行递减操作,并提示新值privatevoidbtnDes_Click(objectsender,EventArgse){this.nCounter--;this.ShowCounter();}//通过MessageBox提示当前的值privatev

oidbtnMsg_Click(objectsender,EventArgse){stringstrMsg="当前计数器="+this.nCounter.ToString("D8");MessageBox.Show(strMsg,"提示");6620

22/11/12C#程序设计实用教程9.4.1按钮控件//显示计数器值到Label控件lblResultprivatevoidShowCounter(){stringstrMsg=this.nCounter.ToString("D8");this.lblResult.T

ext=strMsg;}672022/11/12C#程序设计实用教程9.4.1按钮控件程序运行结果如图9-15所示。682022/11/12C#程序设计实用教程9.4.2标签控件标签(Label)主要用来显示文本。通常用标签来为其他控件显示说明

信息、窗体的提示信息,或者用来显示处理结果等信息。但是,标签显示的文本不能被直接编辑。除了显示文本外,标签还可使用Image属性显示图像,或使用ImageIndex和ImageList属性组合显示图像。692022/11/12C#程序设计实用教程9.4.2标签控件

1.常用属性(1)Text属性该属性用于设定标签显示的文本,可通过TextAlign属性设置文本的对齐方式。(2)BorderStyle属性该属性用于设定标签的边框形式,共有3个设定值,分别是None、FixedSingle、Fixed3D。该属性的默认值为None

。(3)BackColor属性用于设定标签的背景色。(4)ForeColor属性用于设定标签中文本的颜色。(5)Font属性用于设定标签中文本的字体、大小、粗体、斜体、删除线等。702022/11/12C#程序设计实用教程9.4.2标签控件(6)Ima

ge属性用于设定标签的背景图片,可通过ImageAlign属性设置图片的对齐方式。(7)Enable属性用于设定控件是否可用,不可用,则用灰色表示。(8)Visible属性用于设定控件是否可见,不可见,

则隐藏。(9)AutoSize属性用于设定控件是否根据文本自动调整,设置为true表示自动调整。注意:上述的属性中,前6项为外观属性;而后3项为行为属性。712022/11/12C#程序设计实用教程9.4.2标签控件2.响应的事件标签控件常用的事件有:Click事件和

DoubleClick事件。722022/11/12C#程序设计实用教程9.4.2标签控件【例9-3】标签控件的运用。对窗体上的3个标签控件的参数进行设置,用来显示文本。程序代码如下:privatevoidForm1_Load(

objectsender,EventArgse){//label1参数设置,默认字体为宋体9号、前景色为黑色this.label1.AutoSize=true;this.label1.BackColor=System.Drawing.Color.White;this.labe

l1.Text="宋体9号-白底-黑字";732022/11/12C#程序设计实用教程9.4.2标签控件//label2参数设置,默认字体为宋体9号、前景色为黑色this.label2.AutoSize=true;this.label2.BackColor=System.Dr

awing.Color.Black;this.label2.Font=newSystem.Drawing.Font("宋体",10.5F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUni

t.Point,((byte)(134)));this.label2.ForeColor=System.Drawing.Color.White;this.label2.Text="宋体10号-黑底-白字“;742022/11/12C#程序设计实用教程9.4.2标签控件

//label3参数设置this.label3.AutoSize=true;this.label3.BackColor=System.Drawing.Color.Blue;this.label3.Font=ne

wSystem.Drawing.Font("楷体_GB2312",14.25F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Point,((byte)(134

)));this.label3.ForeColor=System.Drawing.Color.Red;this.label3.Text="楷体14号-蓝底-红字";}752022/11/12C#程序设

计实用教程9.4.2标签控件程序运行结果如图9-16所示。762022/11/12C#程序设计实用教程9.4.3文本框控件在C#中,文本框(TextBox)是最常用的和最简单的文本显示和输入控件。文本框有两种用途,一是可以用来输出或显示文本信息;二是可以接受从键盘输入的信息。1.常用属性(

1)Text属性该属性用于设定文本框显示的文本,可通过TextAlign属性设置文本的对齐方式。(2)BackColor属性用于设定文本框的背景色。(3)ForeColor属性用于设定文本框中文本的颜色。772022/11/12C#程序设计实用教程9.4.3文本框控件(4)Font属性用于

设定文本框中文本的字体、大小、粗体、斜体、删除线等。(5)PasswordChar属性文本框控件以密码输入方式使用,输入字母用该属性指定字符屏蔽。(6)Enable属性用于设定文本框控件是否可用,不可用,则用灰色表示。(7)Visible属性用于设定文本框控

件是否可见,不可见,则隐藏。(8)ReadOnly属性用于设定文本框控件是否只读。(9)MultiLine属性用于设定文本框控件是否包多行文本。注意:上述的属性中,前5项为外观属性;而后4项为行为属性。7820

22/11/12C#程序设计实用教程9.4.3文本框控件2.常用的方法(1)Clear方法用于清除文本框中已有的文本。(2)AppendText方法用于文本框最后追加文本。792022/11/12C#程序设计实用教程9.4.3文本框控件3.常用的事件在文本框控件所

能响应的事件中,TextChanged、Enter和Leave是常用的事件。(1)TextChanged事件当文本框的文本内容发生变化时,触发该事件。当向文本框输入信息时,每输入一个字符,就会引发一次TextChanged事件。(2)Enter事件当文本框获得焦点时,就会引发的事件。(3

)Leave事件当文本框失去焦点时,就会引发的事件。802022/11/12C#程序设计实用教程9.4.3文本框控件【例9-9】文本框控件的运用。实现步骤如下:(1)为窗体Form1添加2个TextBox控件:tbInput和t

bHint,前者可编辑单行文本,用来获取用户输入;后者用于显示数据,应设置为只读多行文本。同时,再添加1个Label控件lblCopy,用来显示输入文本框中数据。812022/11/12C#程序设计实用教程9.4.3文本框控件(2)在此例中,通过程序代码设置相应的控件的属性。主要程

序代码如下:privatevoidForm1_Load(objectsender,EventArgse){//设置2个文本框的属性this.tbInput.ForeColor=Color.Blue;this.tbHint.

BackColor=Color.White;this.tbHint.ForeColor=Color.Green;this.tbHint.ReadOnly=true;}822022/11/12C#程序设计实用教程9.4.3

文本框控件privatevoidtbInput_Enter(objectsender,EventArgse){//光标进入清除原有文本this.tbInput.Clear();}privatevoidtbInput_Leave(objectsender,EventArgse){//焦点退出,将

文本添加到tbHint新的一行this.tbHint.AppendText(this.tbInput.Text+Environment.NewLine);}832022/11/12C#程序设计实用教程9.4.3文本框控件privatevoidtbInput_TextChanged(o

bjectsender,EventArgse){//将当前tbInput中文本内容同步显示到lblCopy中this.lblCopy.Text=this.tbInput.Text;}注意:在tbInput_Leave事件中将编辑好的文本通过方法TextB

ox.AppendText()追加tbHint中;在tbInput_TextChanged事件中将tbInput中最新的文本同步显示到lbCopy控件上。程序运行结果如图9-17所示。842022/11/12C#程序设计实用教程9.4.4单选按钮控件单选

按钮(RadioButton)控件为用户提供由两个或多个互斥选项组成的选项集。当用户选中某单选项按钮时,同一组中的其他单选项按钮不能同时选定,该控件以圆圈内加点的方式表示选中。单选按钮用来让用户在一组相关的选项中

选择一项,因此单选按钮控件总是成组出现。直接添加到一个窗体中的所有单选按钮将形成一个组。若要添加不同的组,必须将它们放到面板或分组框中。将若干RadionButton控件放在一个GroupBox控件内组成一组时,当这一组中的某个单选按钮控

件被选中时,该组中的其他单选控件将自动处于不选中状态。852022/11/12C#程序设计实用教程9.4.4单选按钮控件1.常用属性(1)Text属性该属性用于设置单选按钮旁边的说明文字,以说明单选按钮的用

途。(2)Check属性表示单选按钮是否被选中,选中则Checked值为True,否则为False。2.响应的事件单选按钮响应的事件主要是Click事件和CheckedChanged事件。当鼠标单击单选按钮时,触发Cli

ck事件,并且改变Checked属性值。Checked属性值的改变,同时将触发CheckedChanged事件。862022/11/12C#程序设计实用教程9.4.4单选按钮控件【例9-10】单选按钮控件的运用。通过选择不同的单选按钮,实现在文本框中显示不同水果的价格。实现步骤如下:(1)

创建如图9-18所示的窗体。872022/11/12C#程序设计实用教程9.4.4单选按钮控件(2)设置窗体和各控件的属性,如表9-3所示。882022/11/12C#程序设计实用教程9.4.4单选按钮控件(3)打开代码窗口,编写事件过程。priv

atevoidrdoApple_CheckedChanged(objectsender,EventArgse){txtPrice.Text="10.0";}privatevoidrdoBanana_CheckedChanged(objectsender,EventArgs

e){txtPrice.Text="8.5";}892022/11/12C#程序设计实用教程9.4.4单选按钮控件privatevoidrdoPineapple_CheckedChanged(objectsen

der,EventArgse){txtPrice.Text="12.5";}902022/11/12C#程序设计实用教程9.4.5复选框控件复选按钮(CheckBox)控件,它与单选按钮一样,也给用户提供一组选项供其选择。但它与单选按钮有所不同,每个复选框都是一个单独的选项,用户既可以选择它,也

可以不选择它,不存在互斥的问题,可以同时选择多项。1.常用属性(1)Text属性。该属性用于设置复选框旁边的说明文字,以说明复选框的用途。(2)Check属性。表示复选框是否被选择。True表示复选框被选择,False表示复选框未被选择。

912022/11/12C#程序设计实用教程9.4.5复选框控件(3)CheckState属性。反映该复选框的状态,有3个可选值。✓Checked:表示复选框当前被选中。✓Unchecked:表示复选框当前未被选中。✓Indeterminate:表示复选框当前状态未定,此时该复选框呈灰色

。2.响应的事件复选框响应的事件主要是Click事件、CheckedChanged事件和CheckStateChanged事件。当鼠标单击复选框时,触发Click事件,并且改变Checked属性值和CheckState

属性值。Checked属性值的改变,同时将触发CheckedChanged事件;CheckState属性值的改变,同时将触发CheckStateChanged事件。922022/11/12C#程序设计实

用教程9.4.5复选框控件【例9-11】复选框控件的运用。通过选择不同的复选框,实现输出选中的业余爱好。实现步骤如下:(1)创建一个Windows窗体应用的程序,添加如图9-19所示的控件。(2)编写“确定”按钮btnOk和“退出”btnExit的代码。其中“确定”按钮功能为显示一个对话框

,输出用户用户所填内容;“退出”按钮功能为结束程序。932022/11/12C#程序设计实用教程9.4.5复选框控件942022/11/12C#程序设计实用教程9.4.5复选框控件(3)程序的完整代码如下:usingSystem;usingSystem.Collections.Generi

c;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;namespaceUseCheckBox{publicpartialclass

Form1:Form{952022/11/12C#程序设计实用教程9.4.5复选框控件publicForm1(){InitializeComponent();}//检查用户输入的信息是否有效privatevoidtxtName_Validating(objectsend

er,CancelEventArgse){if(txtName.Text.Trim()==string.Empty){MessageBox.Show("姓名为空,请重新输入!");txtName.Focus();}}962022/11/12C#程序设计实用教程9.4.5复选框控件

privatevoidbtnExit_Click(objectsender,EventArgse){this.Close();}972022/11/12C#程序设计实用教程9.4.5复选框控件privatevoidbtnOk_Click(objectsender,EventArgs

e){stringstrUser=string.Empty;strUser="姓名:"+txtName.Text+"\n";strUser=strUser+"业余爱好:"+(chkMovie.Checked?"电影":"")+

(chkMusic.Checked?"音乐":"")+(chkSport.Checked?"体育":"")+"\n";DialogResultresult=MessageBox.Show(strUser,"信息确认",MessageBoxButt

ons.OKCancel,MessageBoxIcon.Information,MessageBoxDefaultButton.Button1);if(result==DialogResult.OK){txtName.Clear();chkMovie.Checked=false;c

hkMusic.Checked=false;chkSport.Checked=false;}}982022/11/12C#程序设计实用教程9.4.5复选框控件privatevoidbtnExit_MouseEnter(objectsender,EventArgse){t

xtName.CausesValidation=false;}privatevoidbtnExit_MouseLeave(objectsender,EventArgse){txtName.CausesVali

dation=true;}}}992022/11/12C#程序设计实用教程9.4.5复选框控件单击“信息确认”对话框中的“确定”按钮,将会清除已输入的内容,包括复选框的选中状态。100•程序运行,输入相应的内容,如图9-20

所示。单击“确定”按钮后,弹出的对话框如图9-21所示。2022/11/12C#程序设计实用教程9.4.5复选框控件说明:代码中用到了MessageBox的另一个构造方法,这种方法使得MessageBox的外观更加多样化,包括了MessageBox的标题(

Title)、图标(MessageBoxIcons)的按钮(MessageBoxButtons)。另外,程序中还编写了btnExit的Enter和Leave事件,目的是为了在单击“退出”按钮时,不引发TextBox控件的Validating事件,防止多余的提示

;在Leave事件中又恢复TextBox控件的Validating事件。读者可以先删除该段代码,以查看相应的效果。1012022/11/12C#程序设计实用教程9.4.6列表框列表框(ListBox)控件提供一个项目列

表,用户可以从中选择一项或多项。在列表框内的项目称为列表框,列表项的加入是按一定的顺序进行的,这个顺序号称为索引号。列表框内列表项的索引号是从0开始的,即第一个加入的列表项索引号为0,其余索引项的索引

号依次类推。1022022/11/12C#程序设计实用教程9.4.6列表框1.常用属性(1)Items属性通过该属性,设置或获取列表框的项。用户可以事先在属性窗口中设置,也可以在程序中进行设置。(2)Multicolumn属性用于设置列表框

是否多列列表框,默认值为False,表示列表项一单列显示。1032022/11/12C#程序设计实用教程9.4.6列表框(3)SelectionMode属性该属性用于设定列表框选择属性,共有4个可选值:✓None:表示不允许进行选择。✓One:表示只允许选择其中一项。此值为默

认值。✓MultiSimple:表示允许同时选择多个列表项。✓MultiExtended:用鼠标和Shift键组合可以选择连续的列表项;用鼠标和Ctrl键组合可以选择不连续的列表项。1042022/11/12C#程序设计实用教程9.4.6列表框(4)SelectedItem属性获取或设置列表

框中的当前选定项。(5)SelectedItems属性获取或设置列表框中当前选定项的集合。(6)SelectedIndex属性获取或设置列表框中的当前选定项的从零开始的索引。在编程时,用户可以捕获该

属性值,然后根据该值来进行相应的动作。注意:上述的属性中,前2项为外观属性;而后4项为行为属性。1052022/11/12C#程序设计实用教程9.4.6列表框2.响应的事件列表框控件除了能响应常用的Cli

ck、DoubleClick、GotFocus、LostFocus等事件外,还可响应特有的SelectedIndexChanged事件。SelectedIndexChanged事件:当用户改变列表中的选择时,将会触发此事件。1062022/11/12C#程序

设计实用教程9.4.6列表框3.常用的方法列表框的列表项可以在属性窗口中通过Item属性来设置,也可以在应用程序中用Items.Add或Items.Insert方法来添加,用Items.Remove或Items.Clear方法删除。(1)Items.Add方法Items.Add方

法的功能是把一个列表项加入列表框的底部。其一般格式如下:Listname.Items.Add(Item)其中,Listname是列表控件的名称;Items是要加入列表框的列表框,必须是一个字符串表达式。1072022/11/12C#程序设计实用教程9.4.6列表框(2)Items.In

sert方法Items.Insert方法的功能是把一个列表项插入到列表框的指定位置。其一般格式如下:Listname.Items.Insert(Index,列表项)其中,Index是新增列表项在列表框中的指定位置。Index值为0时,

表示列表项添加到列表框的第一个位置。(3)Items.Remove方法Items.Remove方法的功能是清除列表框中的指定列表项。其一般格式如下:Listname.Items.Remove(Item)1082022/11/12C#程序设计实用教程9.4.6列表框(4)I

tems.Clear方法Items.Clear方法的功能是清除列表框中的所有列表项。其一般格式如下:Listname.Items.Clear()1092022/11/12C#程序设计实用教程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和lstRight控件之间移动,并将记录输出到lstBottom列表框控件

中。1102022/11/12C#程序设计实用教程9.4.6列表框1112022/11/12C#程序设计实用教程9.4.6列表框(4)完整的程序代码如下:usingSystem;usingSystem.Collections.Generic;us

ingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Form

s;namespaceUseListBox{publicpartialclassForm1:Form{1122022/11/12C#程序设计实用教程9.4.6列表框publicForm1(){InitializeComponent();}1132022/11/12C#程序设计实用

教程9.4.6列表框privatevoidbtnRight_Click(objectsender,EventArgse){if(lstLeft.SelectedItems.Count==0){return;}else{lstRight.Items.Add(lstLeft.Selec

tedItem);lstBottom.Items.Add(lstLeft.SelectedItem.ToString()+"被移至右侧");lstLeft.Items.Remove(lstLeft.SelectedItem);

}}1142022/11/12C#程序设计实用教程9.4.6列表框privatevoidbtnRightAll_Click(objectsender,EventArgse){foreach(objectiteminlstLeft.Items){l

stRight.Items.Add(item);}lstBottom.Items.Add("左侧列表项被全部移至右侧");lstLeft.Items.Clear();}1152022/11/12C#程序

设计实用教程9.4.6列表框privatevoidbtnLeftAll_Click(objectsender,EventArgse){foreach(objectiteminlstRight.Items)

{lstLeft.Items.Add(item);}lstBottom.Items.Add("右侧列表项被全部移至左侧");lstRight.Items.Clear();}1162022/11/12C#程序设计实用教程9.4.

6列表框privatevoidbtnLeft_Click(objectsender,EventArgse){if(lstRight.SelectedItems.Count==0){return;}else{lstLeft.Items

.Add(lstRight.SelectedItem);lstBottom.Items.Add(lstRight.SelectedItem.ToString()+"被移至左侧");lstRight.Items.Remove(lstRight.Selecte

dItem);}}}}1172022/11/12C#程序设计实用教程9.4.6列表框运行程序,可以随意将两侧列表框中的项移动,如图9-25所示。1182022/11/12C#程序设计实用教程9.4.7可选列表框控件可选列表框(CheckedListBox)控件与L

istBox控件类似,但是其列表表中选项的左侧还可以显示选择框。1192022/11/12C#程序设计实用教程9.4.8组合框控件组合框(ComboBox)控件是一个文本框和一个列表框的组合。在列表框使用时,只能在给定的列表项中选择,如果用户想要选择列表框中没有给出的选项,

则用列表框不能实现。与列表框不同的是,在组合框中向用户提供了一个供选择的列表框,若用户选中列表框中某个列表项,该列表项的内容将自动装入文本框中。当列表框中没有所需的选项时,也允许在文本框中直接输入特定的信息(但,组合框的DropDownStyle属性设置为DropDownList时除外)

。1202022/11/12C#程序设计实用教程9.4.8组合框控件1.常用属性(1)DropDownStyle属性该属性用于设置组合框的样式。有3种可选值:✓Simple:没有下拉列表框,所以不能选择,可以输入,和TextBox控件相似。✓DropDown:具有下

拉列表框,可以选择,也可以直接输入选择项中不存在的文本。该值是默认值。✓DropDownList:具有下拉列表框,只能选择已有可选项中的值,不能输入其他的文本。1212022/11/12C#程序设计实用教程9.4.8组合框控件(2)MaxDrop

DownItems属性该属性用于设置下拉列表框中最多显示列表项的个数。2.常用的事件组合框的常用事件不多,一般是使用Click事件,有时也使用SelectedIndexChanged事件和SelectedItemChanged事件。12220

22/11/12C#程序设计实用教程9.4.8组合框控件【例9-13】组合框控件的运用。(1)创建一个Windows窗体应用程序,在窗体上添加如图9-26所示的控件。其中,将两个ComboBox控件分别命名为cboCou

ntry和cboCity,“确定”按钮命名为btnOk。123(2)更改两个ComboBox控件的DropDownStyle属性为DropDownList。为cboCountry有Items添加如下内容:✓中国✓美国✓英

国2022/11/12C#程序设计实用教程9.4.8组合框控件124(3)编写程序代码,实现如下的功能:当cboCountry中,选择相应的国家,在cboCity中显示该国家的部分城市。2022/11/12C#程序设计实用教程9.4.8组合框控件(4)程序完整代码如下:usingSys

tem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingS

ystem.Text;usingSystem.Windows.Forms;namespaceUseComboBox{publicpartialclassForm1:Form{1252022/11/12C#程序设计实用教程9.4.8组合框控件publicForm1(){Initialize

Component();}privatevoidForm1_Load(objectsender,EventArgse){cboCountry.SelectedIndex=0;}1262022/11/12C#程序设计实用教程9.4.8组合框控件privatev

oidcboCountry_SelectedIndexChanged(objectsender,EventArgse){switch(cboCountry.SelectedIndex){case0:cboCity.Items.Clear();cboCity.

Items.Add("北京");cboCity.Items.Add("上海");cboCity.Items.Add("天津");cboCity.SelectedIndex=0;break;1272022/11/12C#程序设计实用教程9.4.8组合框控件case

1:cboCity.Items.Clear();cboCity.Items.Add("华盛顿");cboCity.Items.Add("纽约");cboCity.Items.Add("芝加哥");cbo

City.SelectedIndex=0;break;case2:cboCity.Items.Clear();cboCity.Items.Add("伦敦");cboCity.Items.Add("曼彻斯特");cboCity.Ite

ms.Add("考文垂");cboCity.SelectedIndex=0;break;1282022/11/12C#程序设计实用教程9.4.8组合框控件default:cboCity.Items.Clear();break;}}

privatevoidbtnOk_Click(objectsender,EventArgse){stringstrSelect=cboCountry.SelectedItem.ToString()+":"+cboCity.Sele

ctedItem.ToString();MessageBox.Show(strSelect,"国家城市列表",MessageBoxButtons.OK,MessageBoxIcon.Information);}}}1292022

/11/12C#程序设计实用教程9.4.8组合框控件运行程序,可以实现在任意选择国家组合框中的项,右侧的城市也随之改变,如图9-27所示。单击“确定”按钮,通过MessageBox提示框显示所选的内容,如图9-28所示。130•说明:代码在Form1窗体的Load事件中对cboCountry控

件的SelectedIndex属性赋值,使其默认选择一个选择,避免了运行程序时组合框是所选内容为空。•随后的代码处理了cboCountry控件的SelectedIndexChanged事件,根据不同的国家添加不同的城市名称。2022/11/12C#程序设计实用教程9.

4.9面板控件和分组框控件面板(Panel)控件和分组框(GroupBox)控件是一种容器控件,可以容纳其他控件,同时为控件分组。通常情况下,单选按钮控件经常与Panel控件或GroupBox控件一

起使用。另外,放在Panel控件或GroupBox控件内的所有对象将随着容器控件一起移动、显示、消失和屏蔽。这样,使用容器控件可将窗体的区域分割为不同的功能区,可以提供视觉上的区分和分区激活或屏蔽的功能。1312022/11/

12C#程序设计实用教程9.4.9面板控件和分组框控件1.使用方法使用Panel控件或GroupBox控件将控件分组的方法如下:(1)在“工具箱”中选择Panel控件或GroupBox控件,将其添加到窗体上。

(2)在“工具箱”中选择其他控件放在Panel控件或GroupBox控件上。(3)重复步骤(2),添加所需的其他控件。1322022/11/12C#程序设计实用教程9.4.9面板控件和分组框控件2.Panel控件常用属性Panel控件常用的属性主要有如下

几种:(1)BorderStyle属性该属性用于设置边框的样式,有3种设定值。✓None:无边框。✓Fixed3D:立体边框。✓FixedSingle:简单边框。默认值是None,不显示边框。(2

)AutoScroll属性该属性用于设置是否在框内加滚动条。设置为True时,则加滚动条;设置为False时,则不加滚动条。1332022/11/12C#程序设计实用教程9.4.9面板控件和分组框控件3.GroupBox控件的常用属性GroupBox控件最常用的是Text属性,该属性可

用于在GroupBox控件的边框上设置显示的标题。Panel控件与GroupBox控件功能类似,都用来做容器来组合控件,但两者之间有3个主要区别:✓Panel控件可以设置BorderStyle属性,选择是否有边框。✓Panel控件可把其AutoScroll属性设置为True,

进行滚动。✓Panel控件没有Text属性,不能设置标题。1342022/11/12C#程序设计实用教程9.4.9面板控件和分组框控件【例9-14】Panel控件和GroupBox控件的运用。(1)使用GroupBox控件为RadioButton控件和CheckBox控件提供分组

,这样就可以在一个窗体中有几个独立的分组。完成的窗体布局如图9-29所示。(2)使用Panel控件可以使窗体的分类更详细,以便于用户理解。如可以在图9-29所示的窗体中添加一个Panel控件,如图9-30所示。这样的分类使得程序界面更加美观。1352022/11/12C#程序设计实用教程9.4.1

0滚动条控件滚动条(ScrollBar)有水平和垂直两种,可以通过工具箱中的水平滚动条(HScrollBar)和垂直滚动条(VScrollBar)来建立。这两种滚动条除了方向不同外,其功能和操作是一样的。流动条主要用在列有较长项目或大量信息的地方。这样,用户在小区域中,使用滚动条实现

平滑移动,可浏览到所有信息或列表项目。另外,滚动条也可作为一种特殊的输入工具。例如,常常利用滚动条中滑块位置的变化,去调节声音的音量或调整图片的颜色,使其有连续变化的效果,实现调节的目的。1362022/11/12C#程序设计实用教程9.4.10滚动条控件1.常用属性

(1)Minimum(最小值)属性将滑块移到滚动条的最左端或最上端时,滚动条的属性值达到最小。属性的最小值由属性决定。(2)Maximum(最大值)属性将滑块移到滚动条的最右端或最下端时,滚动条的属性值达到最大。属性的最大值由属性决定。(3)Value属性表示

滚动条内滑块的位置所代表的值。(4)SmallChange(小变化)属性表示单击滚动条两端箭头时,滑块移动的增量值。(5)LargeChange(大变化)属性表示单击滚动条内空白处或者按PageUp/PageDown键时,滑块移动的增量值。13

72022/11/12C#程序设计实用教程9.4.10滚动条控件2.常用的事件滚动条的主要事件有Scroll和ValueChanged,通常都是捕捉该事件来对滚动条的动作进行相应的动作。Scroll事件在通过鼠标或键盘移动滚动条的滑块时,滑块被重新定位,即触发Scroll事

件。ValueChanged事件当通过Scroll事件或以编程方式更改Value属性时发生。1382022/11/12C#程序设计实用教程9.4.10滚动条控件【例9-15】水平滚动条控件的运用。(1)新建一个项目,在窗体中加入一个文本框、一个水平滚动条和一个标签。为其中的

水平滚动条控件设置属性如下:设置其Minimum属性值为5,Maximum属性值为60,SmallChange属性值为1,LargeChange属性值为5,Value属性初始值为15。并设置文本框的Multiline属性为True。完成属性设

置的窗体如图9-31所示。1392022/11/12C#程序设计实用教程9.4.10滚动条控件(2)添加程序代码,实现改变文本框的字体大小的功能。添加代码如下:privatevoidhScrollBar1_ValueChanged(object

sender,EventArgse){intnFontSize;nFontSize=hScrollBar1.Value;textBox1.Font=newSystem.Drawing.Font("宋体",nFontSize);}运行该程序,可以看出,当用户拖动滚动条时,文本框的字体大小会随着水平

滚动条的滑动而发生变化。运行的界面如图9-32所示。1402022/11/12C#程序设计实用教程9.4.10滚动条控件1412022/11/12C#程序设计实用教程9.4.11定时器控件定时器控件(Timer)也称为定时器或计时器,是按一定时间

间隔周期地自动触发事件的控件。在程序运行时,定时器是不可见的。定时器控件主要用来计时,通过计时处理,可以实现各种复杂的动作,如延时、动画等。1422022/11/12C#程序设计实用教程9.4.11定时器控件1.常用的属性(1)Enable属性该属性值为True时就启动Time

r控件,也就是每隔InterVal属性指定的时间间隔调用一次Tick事件;该属性值为False,则停止使用Timer控件。(2)InterVal属性该属性是定时器控件的最重要属性,用于设定两个定时器事件之间的时间间隔。例如,如果希望每半称产生一个定时器事件,那么InterVal属性值

应该设置为500,这样,每隔500ms引发一次定时器事件,从而执行相应的Tick事件过程。1432022/11/12C#程序设计实用教程9.4.11定时器控件2.常用的方法(1)Start方法用于启动定时器。(2)Stop方法用于停止定时器。3.常用的事件定时器

控件只响应一个Tick事件。即,定时器控件对象在间隔了一个InterVal设定的时间后,便触发一次Tick事件。1442022/11/12C#程序设计实用教程9.4.11定时器控件【例9-16】定时器控件的运用。(1)在窗体中添加2个定时器控件,设置ti

mer1的InterVal属性设置为100000ms(100s),设置timer2的InterVal属性设置为1000ms(1s)。设计完成的窗体如图9-33所示。1452022/11/12C#程序设计实用教程9.4.

11定时器控件(2)添加代码,利用timer1每隔100秒检查一次用户的文件是否保存,如果未保存,提示用户进行保存;利用timer2建立一个数字式钟表。(3)程序的完整代码如下:usingSystem;using

System.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;1462022/1

1/12C#程序设计实用教程9.4.11定时器控件namespaceUseTimer{publicpartialclassForm1:Form{publicForm1(){InitializeComponent(

);}//设置一个表示是否保存的标记publicboolblFileSave;1472022/11/12C#程序设计实用教程9.4.11定时器控件//在窗体的初始化时,进行相应的设置privatevoidForm1_Load(objectsender,EventArgse){blFil

eSave=false;timer1.Enabled=true;timer2.Enabled=true;}privatevoidtextBox1_TextChanged(objectsender,EventArgse){//当文

本框的内容变化时,都要将blFileSave标志设置为falseblFileSave=false;}1482022/11/12C#程序设计实用教程9.4.11定时器控件privatevoidtimer1_Tick(objectsender,EventArgse){time

r1.Enabled=false;if(blFileSave==false){MessageBox.Show("还没有保存,请保存!","提示信息",MessageBoxButtons.OK);blFil

eSave=true;}timer1.Enabled=true;}1492022/11/12C#程序设计实用教程9.4.11定时器控件privatevoidtimer2_Tick(objectsender,EventArgse){lblTime.Text="当前时间为:"+

System.DateTime.Now;}}}1502022/11/12C#程序设计实用教程9.4.11定时器控件(4)运行程序,可以看到当过了100秒后,如果文本框的内容没有被保存,则会提示用户,如图9-34所示。在timer2的T

ick事件中的DataTime是返回系统时间函数。在系统运行时,lblTime标签控件显示的时间间隔为1s,改变一次。1512022/11/12C#程序设计实用教程9.4.12TreeView控件TreeView控件用来

显示信息的分级信息,如同Windows中显示的文件和目录。TreeView控件中的各项信息都有一个与之相关联的Node对象。在实际应用中,利用TreeView控件能设计出Windows中的树形目录,用于显示分类或具有层次结构的信息。1522022/11/12C#程序设计实用教程9.4.1

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

之间为父关系,系是班级的父节点(Parent),班级是系的子节点(Child),系与系之间为兄弟关系。各系均为项层节点,项层节点没有父节点。TreeView控件中所有的Node对象构成Node集合,集合中的每个节点对象都具有唯一的索引。1532022/11/1

2C#程序设计实用教程9.4.12TreeView控件2.TreeView控件的常用属性(1)ImageList属性该属性用来获取或设置包含树节点所使用的Image对象的ImageList。(2)ImageIndex该属

性用来获取或设置树节点显示的默认图像的图像列表索引值。(3)Indent属性该属性用来获取或设置每个子树节点级别的缩进距离。(4)LabelEdit属性该属性用来获取或设置一个值,用以指示是否可以编辑

树节点的标签文本。此属性有0和1两个属性值,0代表自动编辑标签,1代表人工编辑标签。1542022/11/12C#程序设计实用教程9.4.12TreeView控件(5)ShowLines属性该属性用来获取或设置一个值,用以指示是否在树视

图控件中的树节点之间绘制连线。它有True和False两个值,用于设置是否显示出线条。(6)ShowRootLines属性该属性用来获取或设置一个值,用以指示是否在树视图根处的树节点之间绘制连线。它有True和False两个值,用于设置是否显示出线条。(7

)Nodes属性该属性用来获取给树视图控件的树节点集合。(8)TopNode属性该属性用来获取树视图控件中第一个完全可见的树节点。1552022/11/12C#程序设计实用教程9.4.12Tree

View控件(9)PathSeperator属性该属性用来获取或设置树节点路径所使用的分隔符串。默认情况下,设置为“\”。1562022/11/12C#程序设计实用教程9.4.12TreeView控件3.TreeView控件的常用方法TreeVie

w控件可以总结为三种基本操作:加入子节点、加入兄弟节点和删除节点。(1)加入子节点—Add()方法所谓子节点,就是处于选定节点的下一级节点。加入子节点的具体过程是:首先在TreeView控件中定位要加入的子节点的位置,

然后创建一个节点对象,再利用TreeView类中对节点的Add()方法加入此节点对象。下面是在treeView1控件中加入一个子节点的具体代码:1572022/11/12C#程序设计实用教程9.4.12TreeView控件if(treeView1.Select

edNode==null)//首先判定是否选定控件中的节点MessageBox.Show("请选择一个节点");else{TreeNodetmpNode;tmpNode=newTreeNode("节点显示内容",在取消选定时

显示图像的索引值,在选择树节点时显示图像的索引值);treeView1.SelectedNode.Nodes.Add(tmpNode);//在TreeView控件中加入子节点}1582022/11/12C#程序设计实用教程9.4.12TreeVi

ew控件(2)加入兄弟节点—Add()方法所谓兄弟节点,就是与选定的节点平级的节点。加入兄弟节点的方法和加入子节点的方法基本一致,加入兄弟节点和加入子节点的最大区别就在于最后一步。下面是在treeView1控件中加入一个兄弟节点的具体代码:if(treeView1.

SelectedNode==null)//首先判定是否选定控件中的节点MessageBox.Show("请选择一个节点");else{TreeNodetmpNode;tmpNode=newTreeNode("节点显示内容",在取消选定时显示图像的索引值,在选择树节

点时显示图像的索引值);//在TreeView控件中加入子节点treeView1.SelectedNode.Parent.Nodes.Add(tmpNode);}1592022/11/12C#程序设计实用教程9.4.12TreeView控件(3)删除节点—Remove()方法删除

节点就是删除TreeView控件中选定的节点,删除节点可以是子节点,也可以是兄弟节点,但无论节点的性质如何,必须保证要删除的节点没有下一级节点,否则必须先删除此节点中的下一级节点,然后再删除此节点。删除节点比起上面的两个操作要略微简单一些,具体方法是:首先

判断要删除的节点是否存在下一级节点,如果不存在,就可以调用TreeView类的Remove()方法删除节点了。1602022/11/12C#程序设计实用教程9.4.12TreeView控件下面是删除TreeView控件中节点的具体代码://判定选定节

点是否存在下一级节点if(treeView1.SelectedNode.Nodes.Count==0)treeView1.SelectedNode.Remove();//删除节点elseMessageBox.Show("请先删除此节点中的子节点!");1612022/11/1

2C#程序设计实用教程9.4.12TreeView控件(4)展开所有—ExpandAll()要展开TreeView控件中的所有节点,首先就要把选定的节点指针定位在TreeView控件的根节点上,然后调用选定控件的ExpandAll()方法

就可以了:treeView1.SelectedNode=treeView1.Nodes[0];//定位根节点treeView1.SelectedNode.ExpandAll();//展开控件中的所有节点(5)展开选定节点的下一级节点—Expand()方法由于只是展

开下一级节点,只需要调用Expand()方法就可以了:treeView1.SelectedNode.Expand();1622022/11/12C#程序设计实用教程9.4.12TreeView控件(6)折叠所有节点-Collapse()折叠节点和展开所有节点是一组互

操作,具体实现的思路也大致相同,折叠所有节点也是首先要把选定的节点指针定位在根节点上,然后调用选定控件的Collapse()就可以了:treeView1.SelectedNode=treeView1.Nodes[0];//定位根节点treeView1.Sele

ctedNode.Collapse();//折叠控件中的所有节点1632022/11/12C#程序设计实用教程9.4.12TreeView控件4.TreeView控件的常用事件(1)AfterLabelEdit事件该事

件在编辑树节点标签文本后发生;(2)BeforeLabelEdit事件该事件在编辑树节点标签文本前发生;(3)AfterSelect事件该事件在选定树节点标签文本后发生;(4)AfterExpend事件

该事件在展开树节点后发生;此外,还有Click事件和DoubleClick事件。1642022/11/12C#程序设计实用教程9.4.12TreeView控件【例9-17】TreeView控件的运用。使用TreeView控件建立一个学校的分层列表,可以添加、删除系部和班级信息。设计步骤:(1

)设计程序界面向设计窗体拖放1个TreeView控件、2个TextBox控件和4个Button控件。其中,TextBox控件的Name分别为txtRoot、txtChild;Button控件的Name属性分别为btnA

ddRoot、btnAddChild、btnDelete、btnClear。设置属性完成的窗体如图9-36所示。从工具箱中向窗体拖放1个ImageList控件,选择其Image属性,然后在图9-34所示的图像集合编辑器中添加4幅图像。设置TreeView控件的ImageList属性为image

List1。1652022/11/12C#程序设计实用教程9.4.12TreeView控件1662022/11/12C#程序设计实用教程9.4.12TreeView控件(2)编写代码添加按钮的事件处理程序代码://添加按钮的事件。privatevoi

dbtnAddRoot_Click(objectsender,System.EventArgse){//构造节点显示内容、取消选定时显示图像索引号、选定时显示图像索引号TreeNodenewNode=newTreeNode(this.txtRoot.Tex

t,0,1);this.treeView1.Nodes.Add(newNode);this.treeView1.Select();}1672022/11/12C#程序设计实用教程9.4.12TreeView控件privatevoidbtnAddChil

d_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);se

lectedNode.Expand();this.treeView1.Select();}1682022/11/12C#程序设计实用教程9.4.12TreeView控件privatevoidbtnDelete_Click(objectsender,System.EventAr

gse){TreeNodeselectedNode=this.treeView1.SelectedNode;if(selectedNode==null){MessageBox.Show("删除节点之前先选中一个节点。","

提示信息");return;}TreeNodeparentNode=selectedNode.Parent;if(parentNode==null)this.treeView1.Nodes.Remove(selectedNode);el

separentNode.Nodes.Remove(selectedNode);this.treeView1.Select();}1692022/11/12C#程序设计实用教程9.4.12TreeView控件privatevoidbtnClear_Click(objectsender

,System.EventArgse){treeView1.Nodes.Clear();}程序运行结果如图9-38所示。1702022/11/12C#程序设计实用教程9.4.13ListView控件ListView控件用于显示项目的列表视

图。可以利用该控件的相关属性来安排行列、列头、标题、图标和文本。在ListView控件中,用列表的形式显示一组数据,每条数据都是一个ListItem类型的对象。ListView控件可以不同的视图显示列表项,包括大图标、小图标、列表、详细资料4种。1712022/11/12C#程序设计实用教程9.

4.13ListView控件1.ListView控件常用属性(1)View属性该属性用来表示数据的显示模式,有4种选择:✓LargeIcons(大图标):每条数据都用一个带有文本的大图标表示。✓SmallIcons(小图标):每

条数据都用一个带有文本的小图标表示。✓List(列表):提供ListItems对象视图。✓Details(详细列表):每条数据有多个字段组成,每个字段占一列。(2)MultiSelect属性该属性用来表示是否允许多行选择。(3)SelectedItems属性该属性用来获取

控件中选定的项。1722022/11/12C#程序设计实用教程9.4.13ListView控件(4)Alignment属性该属性用业表示是否允许多行选择。(5)MultiSelect属性该属性用来获取或设置控件中项的对齐方式。默认值是Top,即

从顶部开始位置。(6)CheckBoxs属性该属性用来获取或设置控件一个值,该值指示控件中各项的旁边是否显示复选框。(7)CheckItems属性该属性用来获取控件中当前选中的项。1732022/11/12C#程序设计实用教程9.4.13ListView控件(8)Items属性该属

性用来获取控件中所有项的集合。(9)Sorting属性该属性用来获取或设置控件中的项排列顺序。(10)LabelEdit属性该属性用来获取或设置控件一个值,该值指示用户是否可以编辑控件中项的标签。1742022/11/12C#程序设计实用教程9.4.13ListView控件2.ListVie

w控件常用事件(1)AfterLabelEdit事件该事件在用户编辑当前选择的列表项之后发生。(2)BeforeLabelEdit事件该事件在用户编辑当前选择的列表项之前发生。(3)SelectedIndexChanged事件该事件当列表视图控件中选定的项的索引更改时发生。(4)Cl

ick事件该事件在用户用鼠标单击该控件时发生。(5)DoubleClick事件该事件在用户用鼠标双击该控件时发生。1752022/11/12C#程序设计实用教程9.4.13ListView控件【例9-18】ListView控件的运用。使用List

View控件显示学生信息,可以添加、删除学生信息。(1)建立应用程序用户界面创建一个新项目,在窗体上添加1个ListView控件、4个Label控件、1个ComboBox控件(cmbDisplayStyle)、3个Tex

tBox控件(txtBoxName、txtAddress、txtPhone)、两个Button控件(btnAppend、btnDelete),并适当调整控件和窗体的位置和大小。添加一个ImageList控件(

imageList1),向该控件中加入1个16x16的图标文件。再添加一个ImageList控件(imageList2),向该控件中加入1个32x32的图标文件。1762022/11/12C#程序设计实用教程9.4

.13ListView控件177•设置ListView控件的属性如下:✓LarageImageList:选imageList2。✓SmallImageList:选imageList1。✓Columns

:学号(width:60)、姓名(width:60)、籍贯(width:60)。✓View:当前显示模式,设为[Details]。•设置属性完成的窗体如图9-39所示。2022/11/12C#程序设计实用教程(2)完整的程序代码如下所示:us

ingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;using

System.Windows.Forms;namespaceUseListView{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}9.4.13ListView控件1

782022/11/12C#程序设计实用教程//添加窗体的Load事件privatevoidForm1_Load(objectsender,EventArgse){cmbDisplayStyle.Items.Add("大图标");cmbDisplay

Style.Items.Add("小图标");cmbDisplayStyle.Items.Add("列表");cmbDisplayStyle.Items.Add("详细列表");cmbDisplayStyle.SelectedIndex=3;}9.

4.13ListView控件1792022/11/12C#程序设计实用教程privatevoidbtnAppend_Click(objectsender,EventArgse){intitemNumber=this.lis

tView1.Items.Count;string[]subItem={this.txtStuNo.Text,this.txtStuName.Text,this.txtAddress.Text};this.listView1.Items.Insert(itemNu

mber,newListViewItem(subItem));this.listView1.Items[itemNumber].ImageIndex=0;}9.4.13ListView控件1802022/11/12C#程序设

计实用教程privatevoidbtnDelete_Click(objectsender,EventArgse){for(inti=this.listView1.SelectedItems.Count-1;i>=0;i

--){ListViewItemitem=this.listView1.SelectedItems[i];this.listView1.Items.Remove(item);}}9.4.13ListView控件1812022/11/12C#程序设计实用教程privatevoi

dcmbDisplayStyle_SelectedIndexChanged(objectsender,EventArgse){stringstr=this.cmbDisplayStyle.SelectedItem.ToString();switch

(str){case"大图标":this.listView1.View=View.LargeIcon;break;case"小图标":this.listView1.View=View.SmallIcon;break;case"列表":this.listV

iew1.View=View.List;break;default:this.listView1.View=View.Details;break;}}9.4.13ListView控件1822022/11/12C#程序设计实用教程//添加ListView控件的

Click事件,实现通过单击弹出学生的学生信息privatevoidlistView1_Click(objectsender,EventArgse){stringstr;str=this.listView1.SelectedIt

ems[0].Text;MessageBox.Show("该生的学号为:"+str);}}}9.4.13ListView控件1832022/11/12C#程序设计实用教程//添加ListView控件的Click事件,实现通过单击弹出学生的学生信息privat

evoidlistView1_Click(objectsender,EventArgse){stringstr;str=this.listView1.SelectedItems[0].Text;MessageBox.Show("该生的学号为:"+str);}}}9.4.13ListVi

ew控件1842022/11/12C#程序设计实用教程•菜单通常分为主菜单和上下文菜单(又称为右键菜单)两类,在.NET类库中分别提供了MenuStrip和ContentMenuStrip控件来实现主菜单和上下文菜单。1.主菜单控件

MenuStrip•MenuStrip控件用来提供主菜单控件,它必须依附在某个窗体上,通常显示在窗体的最上方,它由System.Windows.Forms.MenuStrip类提供。通常包含多个不同的菜单项(MenuItem),并且可以通过代码动态地添

加或删除菜单项。9.4.14菜单1852022/11/12C#程序设计实用教程⚫它可以包含以下4种不同类型的菜单项。✓MenuItem类型:类似Button的菜单项,通过单击来实现某种功能,同时可以包含子菜单项,它以右三角形的形式表示包含

子菜单。✓ComboBox类型:类似ComboBox控件的菜单项,可以在菜单中实现多个可选项的选择。✓TextBox类型:类似TextBox控件的菜单项,可以在菜单中输入任意文本。✓Separator类型:菜单项分隔符,以灰色的“-”表示

。9.4.14菜单1862022/11/12C#程序设计实用教程•不同类型的菜单项具有不同的常用事件需要处理。•MenuItem类型通常通过处理Click事件来完成单击当前菜单需要执行的操作。•Comb

oBox类型则通过处理SelectedIndexChanged事件来判定选择变动的处理,同时也可以提供用户数据的输入和输出。•TextBox类型则主要提供用户数据的输入,也可以通过响应TextChanged、KeyPress等事件实现一些扩展功能。•下面具

体来介绍一下用MenuStrip控件如何来实现主菜单。9.4.14菜单1872022/11/12C#程序设计实用教程【例9-19】MenuStrip控件的运用。(1)创建一个Windows窗体应用程序,在左侧的工具箱中双击MenuStrip控件,将其添加到窗体,如图9-42所示

。9.4.14菜单188•可以看到,窗体的上方出现一个空菜单,并提示输入菜单名称。下文多出一个menuStrip1控件。2022/11/12C#程序设计实用教程(2)输入菜单文本时,VisualStudio2005将会自动产生下一个菜单条目的提示输入

,方便开发人员使用,如图9-43所示。9.4.14菜单1892022/11/12C#程序设计实用教程(3)下面创建一个类似于VisualStudio2005的部分菜单。在图9-43提示的输入输入“文件(&F)”

,将会产生“文件(F)”的效果,&被识别为确认快捷键的字符。同理,在【文件】下创建【新建】、【打开】、【添加】和【关闭】子菜单。在新创建的菜单上单击鼠标右键,可以添加其他内容,如分隔符,如图9-44所示。9.4.14菜单1902022/11

/12C#程序设计实用教程(4)还可以为菜单添加图像,以方便用户识别和使用。•添加完毕,结果如图9-45所示。9.4.14菜单1912022/11/12C#程序设计实用教程2.上下文菜单控件ContexMe

nuStrip•上下文菜单(右键菜单)的编辑、菜单项管理、菜单项使用都和主菜单完全相同,只是它被作为右键弹击菜单使用,ContexMenuStrip控件提供了与某个控件关联的快捷菜单。•为窗体创建上下文菜单通常的步骤如下例所示。【例9-20】ContexMenuSt

rip控件的运用。其步骤如下:(1)打开前面小节中的程序,添加ContexMenuStrip控件,如图9-46所示。9.4.14菜单1922022/11/12C#程序设计实用教程(2)添加菜单项,如图9-47所示。9.4.

14菜单1932022/11/12C#程序设计实用教程(3)设置Form1窗体的ContextMenuStrip属性为contextMenuStrip1,运行程序,在窗体上单击鼠标右键,运行效果如图9-48所示。9.4.14菜单1942022/11/12C#程序设计实用教程•除了菜

单,工具栏(toolbar)也是快速执行某些操作的常用方式之一,在.NET类库中提供了ToolStrip控件来方便地实现工具栏界面。•工具栏必须依靠在某个窗体上,可以包含多个工具栏项目(ToolStripItem),不同的项目具有不同的功能和

意义。•在.NET类库中,工具栏可以包含以下8种不同类型的工具栏项目:✓Label类型:和Label控件类似,通常在工具栏上提示静态文本。✓Button类型:和Button控件类似,通常通过鼠标单击事件

来引发某个具体的操作。9.4.15工具栏1952022/11/12C#程序设计实用教程✓ComboBox类型:和ComboBox控件类似,通常在工具栏上提供一些可选项的选择,并通过SelectedIndexChanged事件来引起某个具体的操作。✓TextBo

x类型:和TextBox控件类似,通常在工具栏上让用户输入数据。✓SplitButton类型:具有同步下拉菜单选项。✓DropDownButton类型:具有下拉菜单的工具栏项目。✓ProgressBar类型:进度条样式工具栏项目,通常在工具栏上进行进度提示。✓

Separator类型:工具栏分隔符,以灰色的“|”表示。9.4.15工具栏1962022/11/12C#程序设计实用教程•不同类型的工具栏项目具有不同的常用事件需要处理:•Button类型通常以处理Click事件来完成单击当前菜单需要执行的操作;•ComboBox类型

则通常处理SelectedIndexChanged事件来判定选择变动的处理,同时也可以提供用户数据的输入和输出;•TextBox类型则主要提供用户数据的输入,也可以通过响应TextChanged、KeyPress等事件实现一些扩展功

能。•工具栏的添加和创建比较简单,具体步骤见下例所示。9.4.15工具栏1972022/11/12C#程序设计实用教程【例9-21】ToolStrip控件的运用。(1)打开上一小节中的程序,添加ToolStrip控件,如图9-49所示。可以看到窗体中多出一个工具栏,下方显出toolStrip1控

件。9.4.15工具栏1982022/11/12C#程序设计实用教程(2)单击工具栏上的提示图标,如图9-50所示。仿照上一小节中的菜单项建立相应的工具栏按钮。9.4.15工具栏1992022/11/12C#

程序设计实用教程(3)运行程序,结果如图9-51所示。9.4.15工具栏2002022/11/12C#程序设计实用教程9.5鼠标事件处理在程序运行中,产生事件的主体有很多,其中尤其以鼠标和键盘为最多。下面,首先来讨论鼠标事件的处理

。鼠标相关的事件大致有6种,分别是:“MouseHover”、“MouseLeave”、“MouseEnter”、“MouseMove”、“MouseDown”和“MouseUp”。2012022/11/12C#程序设计实用教程9.5鼠标事件处理1.如何在C#程序中定义这些事件在C#中是

通过不同的Delegate来描述上述事件:其中描述MouseHover”、“MouseLeave”和“MouseEnter”事件的Delegate是“EnentHandler”,而描述“MouseMove”、“MouseDown”和“Mouse

Up”的三个事件的Delegate是“MouseEventHandler”。2022022/11/12C#程序设计实用教程9.5鼠标事件处理这两个Delegate分别被封装在不同的命名空间,其中“EventHandler”被封装在“System”命名空间;“MouseEve

ntHandler”被封装在“System.Windows.Froms”命名空间中。在为“MouseHover”、“MouseLeave”、“MouseEnter”事件提供数据的类是“EventArgs”,它也被封装在“System”命名空间

中;而为后面的三个事件提供数据的类是“MouseEventArgs”,它却被封装在“System.Windows.Froms”命名空间中。以上这些就决定了在C#中定义这些事件和响应这些事件有着不同的处理办法。2032022/11/12C#程序设

计实用教程9.5鼠标事件处理2.鼠标相关事件中典型问题处理办法和鼠标相关事件的典型问题,其一是读取鼠标的当前位置;其二是判定到底是哪个鼠标按键被挥动。判定鼠标的位置可以通过事件“MouseMove”来处理,在“MouseEventArgs”类中提供了两个属性“X”和“Y”,来

判定当前鼠标横坐标和纵坐标。而判定鼠标按键的按动情况。可以通过事件“MouseDown”来处理,并且在“MouseEventArgs”类中也提供了一个属性“Buttons”来判定鼠标按键情况。根据这些知识,可以得到在C#中如何实现读取鼠标当前位

置和判定鼠标按键情况的程序代码。2042022/11/12C#程序设计实用教程9.5鼠标事件处理【例9-22】用2个文本框显示鼠标指针在窗体上移动时,鼠标指标所指的位置。实现代码如下:privatevoidForm1_Mouse

Move(objectsender,MouseEventArgse){this.txtCoordinateX.Text=Convert.ToString(e.X);this.txtCoordinateY.

Text=Convert.ToString(e.Y);}程序运行结果如图9-52所示。2052022/11/12C#程序设计实用教程9.5鼠标事件处理【例9-23】实现判定鼠标按键的代码。实现代码如下:privatevoidForm1_MouseDown(objectsend

er,MouseEventArgse){if(e.Button==MouseButtons.Left)MessageBox.Show("按动鼠标左键!");if(e.Button==MouseButtons.Middle

)MessageBox.Show("按动鼠标中键!");if(e.Button==MouseButtons.Right)MessageBox.Show("按动鼠标右键!");}程序运行结果如图9-53所示。2062022/11/12C#程序设计实用教程9.6键盘事件处理

在C#中和键盘相关的事件相对比较少,大致有三种:“KeyDown”、“KeyUp”和“KeyPress”。1.如何在程序中定义这些事件在C#中描述“KeyDown”、“KeyUp”的事件的Delegate是“KeyEventHandler”;而描述“KeyPress”的事件的

Delegate是“KeyPressEventHandler”。这两个Delegate都封装在命名空间“System.Windows.Froms”中。为“KeyDown”、“KeyUp”的事件提供数据的类是“KeyEventArgs”,而为“KeyPress”事件提供数据

的类是“KeyPressEventArgs”。同样,这二者也被封装在命名空间“System.Windows.Forms”中。2072022/11/12C#程序设计实用教程9.6键盘事件处理2.和键盘相关事件中的典

型问题处理办法和键盘相关的典型问题,无非是判定到底是哪个按键被按动。通过上面的三个事件都可以完成,并且在“KeyEventArgs”类中通过一个属性“KeyCode”可以用来读取当前按键,所以就在“KeyUp”或者“KeyDown”事件中处理这个问题。根

据上面这些知识,可以得到在C#中编写如何读取按键的程序代码。在“KeyPressEventArgs”类中,通过一个“KeyChar”属性获取或设置与按下的键对应的字符;通过Handled属性获取或设置一个值,该值指示是否处理过KeyPress事件。2082022/11/12C#程序设计

实用教程9.6键盘事件处理【例9-24】实现显示所按动的按键名称。实现代码如下:privatevoidForm1_KeyUp(objectsender,KeyEventArgse){MessageBox.Show("你所按动的键为:"+e

.KeyCode.ToString());}程序运行结果如图9-54所示。2092022/11/12C#程序设计实用教程9.6键盘事件处理【例9-25】实现只允许输入数字的TextBox控件。分析:可以使用

KeyChar属性获取或设置以下键:a~z、A~Z、Ctrl、标点符号、键盘顶部和数字键盘上的数字键、Enter键。我们又知道,键盘按键与ASCII字符集两者之间存在对应关系。为了便于用户的输入,在限制用户输入非0~9之间的数字的同时,不应限制

用户输入“回车”和“退格”,否则将给用户带来不便。其中,“回车”键的ASCII值为:13;“退格”键的ASCII值为:8。2102022/11/12C#程序设计实用教程9.6键盘事件处理实现代码如下:privatevoidtxtProduceNum_KeyPr

ess(objectsender,KeyPressEventArgse){if((e.KeyChar!=8&&!char.IsDigit(e.KeyChar))&&e.KeyChar!=13){MessageBox.Show("商品数量只能输入

数字","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Information);e.Handled=true;//表示已经处理过KeyPress事件}}程序运行结果如图9-55所示。2112022/11/12C#程序设计实用教程9.6

键盘事件处理2122022/11/12C#程序设计实用教程9.7窗体之间的数据交互213•通常,Windows窗体之间会发生数据交互,主窗体需要将数据传递到弹出窗体,有时弹出窗体修改数据后需要把新数据返回主窗体。•弹出窗体和父窗体之间的数据交互,通常采用以下3种方式:✓属性

:弹出窗体通过读写属性将数据传递到父窗体,接收父窗体数据。✓方法:弹出窗体通过构造函数或方法将数据传递到父窗体,接收父窗体数据。✓事件:弹出窗体通过事件的方式通知父窗体有数据需要进行交互。2022/11/12C#程序设计实用教程

•通过在弹出窗体中,添加相应的读写属性实现窗体之间的数据交互。【例9-26】在一个项目中,创建2个窗体,frmLogin用于实现登录,frmWelcome用于显示欢迎信息。显然,这两个窗体之间要有数据的交互。在此通过frmWelcome中的读写属性来

实现。(1)设计窗体。此过程较简单,略过。9.7.1通过属性实现窗体之间的数据交互2142022/11/12C#程序设计实用教程(2)在frmWelcome中添加“姓名”的读写属性。具体代码如下:pr

ivatestring_strName;//姓名属性publicstringstrName{get{returnthis._strName;}set{this._strName=value;}}9.7.1通过属性实现窗体之间的

数据交互2152022/11/12C#程序设计实用教程(3)在frmLogin中的“登录”按钮的Click事件中,添加如下代码:privatevoidbtnLogin_Click(objectsender,EventArgse){frmWelcomefrmwelcome=newfrmWel

come();frmwelcome.strName=this.txtName.Text.ToString();//实现窗体间的数据传递frmwelcome.Show();}(4)在frmWelcome中的窗体Load事件中,添加如下代码:privatevoidfrmWe

lcome_Load(objectsender,EventArgse){this.lblWelcome.Text="欢迎你"+this.strName+"同学!";}9.7.1通过属性实现窗体之间的数据交互2162022/11/12C#程序设计实用教程•

程序运行结果如图9-56、9-57所示。9.7.1通过属性实现窗体之间的数据交互2172022/11/12C#程序设计实用教程•通过在弹出窗体中,重载弹出窗体的构造函数来实现窗体之间的数据交互。【例9-27】在一个项目中,创建2个窗体,frmLogin用于实现登录,frmWelcome

用于显示欢迎信息。显然,这两个窗体之间要有数据的交互。在此通过frmWelcome中的重载构造函数来实现。(1)设计窗体,此过程较简单,略过。(2)在frmWelcome中重载窗体的构造函数。具体代码如下:publicfrmWelcome(stringstrName){I

nitializeComponent();this.lblWelcome.Text="欢迎你,"+strName+"同学!";}9.7.2通过窗体构造函数实现窗体之间的数据交互2182022/11/12C

#程序设计实用教程(3)在frmLogin中的“登录”按钮的Click事件中,添加如下代码:privatevoidbtnLogin_Click(objectsender,EventArgse){stringstrStuName=this.txtName.Text;//通过窗体的

构造函数实现窗体间的数据传递frmWelcomefrmwelcome=newfrmWelcome(strStuName);frmwelcome.Show();}程序运行结果如图9-58、9-59所示。9.7.2通过窗体构造函数实现窗体之间的数据交互2192022/11/12C#程序设计实用教程9

.8本章小结220•C#是一种可视化的程序设计语言。Windows窗体和控件的应用,在C#程序设计中占据重要的角色。•本章主要介绍了如何建立Windows应用程序、常用的WindowsForms控件、菜单以及多文档界面的设

计等内容,在其中对于属性及事件的处理进行重点介绍。•对于本章的内容要求读者熟练掌握,并加以运用到程序开发中。2022/11/12C#程序设计实用教程

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?