《C#第6章窗体、控件和组.ppt》由会员分享,可在线阅读,更多相关《C#第6章窗体、控件和组.ppt(144页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 1第第6 6章章 窗体、控件和组件窗体、控件和组件6.16.1 窗体与窗体与对话对话框框6.2 6.2 控件共有的基本操作控件共有的基本操作6.3 6.3 容器容器类类控件和控件和组组件件6.4 6.4 文本操作类控件文本操作类控件6.5 6.5 选择操作类控件选择操作类控件6.6 6.6 图像操作类控件和组件图像操作类控件和组件6.7 6.7 菜单、工具栏与状态栏菜单、工具栏与状态栏6.86.8 视图操作类控件视图操作类控件6.96.9 其他常用控件其他常用控件2 2界面设计举例界面设计举例1-1-动物的故事(动物的故事(KeyboardAndEventExampleKeyboardAn
2、dEventExample)3 3界面设计举例界面设计举例2-2-打飞鸟(打飞鸟(DownBirdDownBird)4 4界面设计举例界面设计举例3-Vista3-Vista图片变换效果(图片变换效果(vistaPictureBoxExample)vistaPictureBoxExample)5 5界面设计举例界面设计举例4-XP4-XP风格的风格的windowwindow窗体窗体(SplitContainerExample)(SplitContainerExample)6 6WindowWindow应用程序的生命周期应用程序的生命周期所谓所谓“应用程序应用程序”,就是一个进程。,就是一个进程
3、。假设只有一个线程,即主线程。主线程逐句执行线程体的代假设只有一个线程,即主线程。主线程逐句执行线程体的代码,当执行完之后,程序结束,进程空间释放。码,当执行完之后,程序结束,进程空间释放。static voidstatic void Main()Main()Console.WriteLine(Console.WriteLine(Hello,World!Hello,World!););Console.WriteLine(Console.WriteLine(This is a demo!This is a demo!););Console.WriteLine(Console.WriteLine(
4、writen by xialuning!writen by xialuning!););主线程体执行完了,进程退出。控制台窗口也随之消失。7 7窗体应用程序窗体应用程序窗体应用程序,为什么一直存在而不消失(除非显式点击关闭按钮)?“窗体”大概可以分为前台和后台两个部分。从前台来讲,“窗体”是一个可见的窗口”;从后台来讲,“窗体”是一个消息循环。protected override voidprotected override void WndProc(WndProc(refref Message m)Message m)switchswitch(m.Msg)(m.Msg)casecase WM
5、_COMMAND:WM_COMMAND:.breakbreak;casecase WM_CLOSE:WM_CLOSE:.breakbreak;basebase.WndProc(.WndProc(refref m);m);消息循环(消息泵):消息循环(消息泵):主线程不停的尝试接收来主线程不停的尝试接收来自自WindowsWindows系统的消息;系统的消息;当有消息到来时,就处理;当有消息到来时,就处理;无消息到来,无限等待;无消息到来,无限等待;WM_CLOSEWM_CLOSE或或WM_DESTROYWINDOWWM_DESTROYWINDOW等消息到等消息到来时,主线程结束。来时,主线程结
6、束。8 8消息循环(了解)消息循环(了解)WindowsWindows是以消息驱动的操作系统,是以消息驱动的操作系统,Windows Windows 消息提供了应用程序与消息提供了应用程序与应用程序以及应用程序与应用程序以及应用程序与WindowsWindows系统之间进行通讯的手段。系统之间进行通讯的手段。Windows Windows 中有一个系统消息队列,对于每一个正在执行的中有一个系统消息队列,对于每一个正在执行的WindowsWindows应用程序应用程序,系统为其建立一个系统为其建立一个“消息队列消息队列”,即应用程序队列,用,即应用程序队列,用来存放该程序可能创建的各种窗口的消息
7、。应用程序中含有一段称来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作作“消息循环消息循环”的代码,用来从消息队列中检索这些消息并把它们的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。分发到相应的窗口函数中。Windows Windows 应用程序创建的每个窗口都在系统核心注册一个相应的窗应用程序创建的每个窗口都在系统核心注册一个相应的窗口函数,窗口函数程序代码形式上是一个巨大的口函数,窗口函数程序代码形式上是一个巨大的switch switch 语句,用语句,用以处理由消息循环发送到该窗口的消息,窗口函数由以处理由消息循环发送到该窗口的消息,窗口函数由Wind
8、ows Windows 采用采用消息驱动的形式直接调用,而不是由应用程序显示调用的,窗口函消息驱动的形式直接调用,而不是由应用程序显示调用的,窗口函数处理完消息后又将控制权返回给数处理完消息后又将控制权返回给WindowsWindows。9 9窗体应用程序与控制台应用程序窗体应用程序与控制台应用程序控制台程序没有消息循环(假如不在控制台程序中使用窗体),控制台程序没有消息循环(假如不在控制台程序中使用窗体),主线程代码依次执行后就结束主线程代码依次执行后就结束 控制台程序适于代码验证和代码功能演示,执行一段代码,控制台程序适于代码验证和代码功能演示,执行一段代码,然后在控制台输出结果。然后在控
9、制台输出结果。窗体应用程序在后台使用消息循环来运作,前台使用窗体控件窗体应用程序在后台使用消息循环来运作,前台使用窗体控件来提供用户交互界面。来提供用户交互界面。1010WindowsWindows应用程序中的应用程序中的Program.csProgram.cs文件文件特性描述,使应用程序能够特性描述,使应用程序能够与与COMCOM组件进行互操作;组件进行互操作;使窗体应用操作系统提使窗体应用操作系统提供的样式供的样式启动应用程序,启动应用程序,显示窗体显示窗体Form1Form111116.1 6.1 窗体与窗体与对话对话框框1 1、窗体应用程序的启动和停止、窗体应用程序的启动和停止使用使用
10、ApplicationApplication类提供的静态方法来启动、停止应用程序。类提供的静态方法来启动、停止应用程序。ApplicationApplication类提供的方法:类提供的方法:lRunRun方法:调用方法:调用 Run Run 以便在当前线程上启动应用程序消息循以便在当前线程上启动应用程序消息循环,并可以选择使某窗体可见。环,并可以选择使某窗体可见。lExitExit或或ExitThreadExitThread方法:用于停止消息循环。方法:用于停止消息循环。lDoEventsDoEvents方法:用于在程序处于某个循环中时处理消息。方法:用于在程序处于某个循环中时处理消息。l调
11、用调用 AddMessageFilter AddMessageFilter 以向应用程序消息泵添加消息筛选以向应用程序消息泵添加消息筛选器来监视器来监视 Windows Windows 消息。消息。lIMessageFilter IMessageFilter 可以阻止引发某事件或在调用某事件处理可以阻止引发某事件或在调用某事件处理程序前执行特殊操作。程序前执行特殊操作。1212 当运行当运行 Windows Windows 窗体时,它将创建新窗体,然后该窗体等窗体时,它将创建新窗体,然后该窗体等待处理事件。该窗体在每次处理事件时,均将处理与该事件待处理事件。该窗体在每次处理事件时,均将处理与该
12、事件关联的所有代码。所有其他事件在队列中等待。在代码处理关联的所有代码。所有其他事件在队列中等待。在代码处理事件时,应用程序并不响应。例如,当将另一窗口拖到该窗事件时,应用程序并不响应。例如,当将另一窗口拖到该窗口前面时,该窗口不重新绘制。口前面时,该窗口不重新绘制。如果在代码中调用如果在代码中调用 DoEventsDoEvents,则您的应用程序可以处理其,则您的应用程序可以处理其他事件。例如,如果您有向他事件。例如,如果您有向 ListBox ListBox 添加数据的窗体,并将添加数据的窗体,并将 DoEvents DoEvents 添加到代码中,那么当将另一窗口拖到您的窗体上添加到代码
13、中,那么当将另一窗口拖到您的窗体上时,该窗体将重新绘制。如果从代码中移除时,该窗体将重新绘制。如果从代码中移除 DoEventsDoEvents,那么,那么在按钮的单击事件处理程序执行结束以前,您的窗体不会重在按钮的单击事件处理程序执行结束以前,您的窗体不会重新绘制。新绘制。6.1 6.1 窗体与窗体与对话对话框框1313窗体的常用方法和事件窗体的常用方法和事件方法和事件名方法和事件名说明说明Close()方法方法使窗体关闭,并释放资源;使窗体关闭,并释放资源;Hide()方法方法使窗体隐藏,并不释放资源;使窗体隐藏,并不释放资源;Show()方法方法显示窗体;显示窗体;Load事件事件加载窗
14、体时处理的事件;加载窗体时处理的事件;Click事件事件鼠标单击窗体时处理的事件;鼠标单击窗体时处理的事件;Closing、Closed事件事件窗体关闭时处理的事件;窗体关闭时处理的事件;GetFocus事件事件窗体获得焦点时处理的事件;窗体获得焦点时处理的事件;Activated事件事件激活窗体时处理的事件;激活窗体时处理的事件;14146.1.2 6.1.2 窗体的窗体的创创建、建、显显示与示与隐隐藏藏1 1、如何在代码中打开一个新窗体、如何在代码中打开一个新窗体 Form2 fm=new Form2();Form2 fm=new Form2();fm.Show();/fm.Show();
15、/或者或者fm.ShowDialog();fm.ShowDialog();注意注意Show()Show()和和ShowDialog()ShowDialog()区别区别;2 2、如何在代码中关闭一个窗体、如何在代码中关闭一个窗体 用法用法1 1:fm.Close();fm.Close();用法用法2 2:this.Close();this.Close();用法用法3 3:Application.OpenFormsForm1.Close();Application.OpenFormsForm1.Close();OpenFormsOpenForms是当前应用程序中,所有已创建、未释放的窗体的集是当前
16、应用程序中,所有已创建、未释放的窗体的集合;若当前窗体是应用程序的主窗体,则在关闭当前窗体的同合;若当前窗体是应用程序的主窗体,则在关闭当前窗体的同时,直接退出应用程序;时,直接退出应用程序;15153 3、如何隐藏一个打开的窗体、如何隐藏一个打开的窗体 (1 1)隐藏当前窗体:)隐藏当前窗体:this.Hide();this.Hide();(2 2)隐藏其它窗体:)隐藏其它窗体:Application.OpenFormsForm1.Hide();Application.OpenFormsForm1.Hide();隐藏窗体是使窗体不可见,但该窗体所占用的资源并没有被释放,隐藏窗体是使窗体不可见
17、,但该窗体所占用的资源并没有被释放,随时可以通过调用该窗体的随时可以通过调用该窗体的ShowShow方法将其显示。方法将其显示。4 4、如何重新显示隐藏的窗体、如何重新显示隐藏的窗体 (1 1)显示当前窗体:)显示当前窗体:this.Show();this.Show();(2 2)显示其它窗体:)显示其它窗体:Application.OpenForms“Form1”.Show();/Application.OpenForms“Form1”.Show();/显示显示Form1Form1窗窗体体6.1.2 6.1.2 窗体的窗体的创创建、建、显显示与示与隐隐藏藏16165.5.选择启动窗体选择启动
18、窗体 启动窗体可以根据需要进行设置或更改,在启动窗体可以根据需要进行设置或更改,在“解决方案资源解决方案资源管理器管理器”中打开中打开Program.csProgram.cs文件,若要使项目中的文件,若要使项目中的Form2Form2窗体成窗体成为启动窗体,在为启动窗体,在MainMain方法中将方法中将Form1Form1修改为修改为Form2Form2即可,代码如下:即可,代码如下:static void Main()static void Main()Application.EnableVisualStyles();Application.EnableVisualStyles();App
19、lication.SetCompatibleTextRenderingDefault(false);Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form2();Application.Run(new Form2();6.1.2 6.1.2 窗体的窗体的创创建、建、显显示与示与隐隐藏藏17176 6关闭应用程序关闭应用程序Application.Exit();Application.Exit();l退出当前应用程序,关闭该应用程序中的所有窗体;退出当前应用程序,关闭该应用程序中的所有窗体;关闭窗
20、体时,该窗体所占用的资源也会被释放关闭窗体时,该窗体所占用的资源也会被释放6.1.2 6.1.2 窗体的窗体的创创建、建、显显示与示与隐隐藏藏1818关闭多个窗体关闭多个窗体(Application.OpenFormsApplication.OpenForms)int count=Application.OpenForms.Count;int count=Application.OpenForms.Count;for(int i=count-1;i=0;i-)for(int i=count-1;i=0;i-)if(Application.OpenFormsi.Name=Form2)if(App
21、lication.OpenFormsi.Name=Form2)Application.OpenFormsi.Close();Application.OpenFormsi.Close();1919但是不能使用如下形式:但是不能使用如下形式:for(int i=0;i count;i+)for(int i=0;i count;i+)(Application.OpenFormsi.Name=Form2)(Application.OpenFormsi.Name=Form2)Application.OpenFormsi.Close();Application.OpenFormsi.Close();原因在
22、于每关闭一个窗体之后通过Application.OpenForms所获取属于应用程序的打开窗体的集合就会发生变化,导致索引引用超出范围。关闭多个窗体关闭多个窗体(Application.OpenFormsApplication.OpenForms)20206.1.2 6.1.2 窗体的窗体的创创建、建、显显示与示与隐隐藏藏【例例6-16-1】演示窗体的基本用法以及如何显示和关闭窗体。演示窗体的基本用法以及如何显示和关闭窗体。部分运行效果如图:部分运行效果如图:2121C#C#中的中的InitializeComponent()InitializeComponent()方法方法在每一个窗体生成的时
23、候,都会针对于当前的窗体定义在每一个窗体生成的时候,都会针对于当前的窗体定义InitializeComponentInitializeComponent()()方法,该方法实际上是由系统生成的对于窗体界面的定义方方法,该方法实际上是由系统生成的对于窗体界面的定义方法。法。在每一个在每一个FormForm文件建立后,都会同时产生程序代码文件文件建立后,都会同时产生程序代码文件.CS.CS文文件,以及与之相匹配的件,以及与之相匹配的.designer.cs.designer.cs文件,业务逻辑以及事件文件,业务逻辑以及事件方法等被编写在方法等被编写在.CS.CS文件之中,而界面设计规则被封装在文件
24、之中,而界面设计规则被封装在.Designer.CS.Designer.CS文件里。文件里。2222在在.designer.cs.designer.cs代码之中,可以很容易发现代码之中,可以很容易发现InitializeComponentInitializeComponent()()方法和方法和Dispose()Dispose()方法,前者为界面设计的变现内容,后者方法,前者为界面设计的变现内容,后者为表单释放系统资源时候执行编码。为表单释放系统资源时候执行编码。InitializeComponent()InitializeComponent()方法反映了窗体设计器中窗体和控件方法反映了窗体设
25、计器中窗体和控件的属性。如果更改的属性。如果更改InitializeComponent()InitializeComponent()方法中的相关属性方法中的相关属性参数,相应的变化在窗体设计器界面上也会显示出来。参数,相应的变化在窗体设计器界面上也会显示出来。Form1.Designer.cs Form1.Designer.cs 里的是定义里的是定义 (函数名后面有大括号包含(函数名后面有大括号包含定义内容)定义内容)Form1.cs Form1.cs 里的是调用里的是调用 (函数名后面分号结尾)(函数名后面分号结尾)C#C#中的中的InitializeComponent()Initializ
26、eComponent()方法方法2323注意:注意:InitializeComponent()方法写在前面和后面是有区方法写在前面和后面是有区别别的。的。InitializeComponent()方法是用来初始化窗体方法是用来初始化窗体组组件的,在件的,在InitializeComponent之前,窗体的各个控件之前,窗体的各个控件还还没有没有进进行初始化,行初始化,比如比如说说窗体上有一个窗体上有一个TextBoxUserName,在,在InitializeComponent()之前它之前它还还只是一个只是一个TextBox类类型的型的变变量而已,如果在量而已,如果在InitializeCo
27、mponent()之前之前调调用用这这个个TextBox的属性或方法,就会出的属性或方法,就会出错错。C#C#中的中的InitializeComponent()InitializeComponent()方法方法24246.1.3窗体常用的属性窗体常用的属性属性属性含义含义注意注意Name窗体的名称,代码中通过该属性来访窗体的名称,代码中通过该属性来访问窗体问窗体一般起有意义的名称,一般起有意义的名称,采用采用Camel命名法命名法BackColor窗体的背景色窗体的背景色ForeColor窗体上文本的前景色窗体上文本的前景色Location以屏幕坐标表示的代表窗体左上角的以屏幕坐标表示的代表窗
28、体左上角的坐标位置坐标位置只有当只有当StartPosition属属性值为性值为Manual时有效时有效Size窗体的高度和宽度窗体的高度和宽度Text控件上所要显示的文本,如标签、按控件上所要显示的文本,如标签、按钮上的文字钮上的文字ControlBox决定是否显示窗体右上角的控制按钮决定是否显示窗体右上角的控制按钮(最小化、最大化、关闭)(最小化、最大化、关闭)相关属性相关属性MinimizeBox和和MaximizeBoxWindowState窗体的初始状态,窗体的初始状态,FormWindowState枚举值枚举值2525HelpButtonHelpButton属性属性 如果当如果当C
29、ontrolBox=trueControlBox=true;MaxmizeBox=false MaxmizeBox=false;MinimizeBox=falseMinimizeBox=false;而而 HelpButton=true HelpButton=true 时就可以看时就可以看到有个帮助的按钮出现在关闭按钮旁边。到有个帮助的按钮出现在关闭按钮旁边。6.1.3 6.1.3 窗体常用的属性窗体常用的属性26266.1.4 6.1.4 窗体常用属性窗体常用属性设置窗体属性的途径有设置窗体属性的途径有2 2种:种:l在设计模式下利用在设计模式下利用【属性属性】窗口设置窗体属性。窗口设置窗体属
30、性。l在代码编辑模式下设置窗体属性。在代码编辑模式下设置窗体属性。补充例题补充例题2 2(FormSetExample)FormSetExample)27276.1.4 6.1.4 窗体位置及外观控制窗体位置及外观控制StartPostionStartPostion:获取或设置运行时窗体的起始位置,一般在构造:获取或设置运行时窗体的起始位置,一般在构造函数中设置此属性。函数中设置此属性。注意位置语句必须写在构造函数中。注意位置语句必须写在构造函数中。例如:例如:this.StartPosition=FormStartPosition.Manual;this.StartPosition=Form
31、StartPosition.Manual;this.Location=new Point(screenX,screenY);this.Location=new Point(screenX,screenY);通过设置窗体的通过设置窗体的【ControlBoxControlBox】属性为属性为“TrueTrue”或者或者“FalsFalse e”,可以控制是否显示最大化、最小化以及关闭按钮。除此之,可以控制是否显示最大化、最小化以及关闭按钮。除此之外,还可以通过设置窗体的外,还可以通过设置窗体的【FormBorderStyleFormBorderStyle】属性控制窗体属性控制窗体的边框样式的边框
32、样式.2828设置窗体起始位置,需要首先了解计算机屏幕的坐标系。和通常的坐设置窗体起始位置,需要首先了解计算机屏幕的坐标系。和通常的坐标系起始点不同,计算机屏幕坐标系原点位于屏幕左上角。其标系起始点不同,计算机屏幕坐标系原点位于屏幕左上角。其X X轴水平轴水平向右,向右,Y Y轴垂直向下。以计算机屏幕分辨率为轴垂直向下。以计算机屏幕分辨率为800600800600为例,其为例,其X X轴最轴最大值为大值为800800像素,像素,Y Y轴最大值为轴最大值为600600像素。像素。6.1.4 6.1.4 窗体位置及外观控制窗体位置及外观控制属 性意 义FormStartPosition.Manua
33、l根据自定义位置显示初始位置FormStartPosition.CenterScreen在屏幕中央显示初始位置FormStartPosition.WindowsDefaultLocationWindows默认位置,但大小由属性决定FormStartPosition.WindowsDefaultBoundsWindows默认位置和默认大小FormStartPosition.CenterParent在父窗口的中央显示初始位置29296.1.4 6.1.4 窗体位置及外观控制窗体位置及外观控制【例例6-26-2】演示如何控制窗体的显示位置以及如何控制窗体的演示如何控制窗体的显示位置以及如何控制窗体的
34、外观形状。设计视图如下:外观形状。设计视图如下:运行效果如下:运行效果如下:3030loadload()事件在第一次显示窗体前发生,可以使用此事件执行()事件在第一次显示窗体前发生,可以使用此事件执行一些任务,如分配窗体使用的资源。一些任务,如分配窗体使用的资源。6.1.4 6.1.4 窗体位置及外观控制窗体位置及外观控制31316.1.5单单文档窗体和多文档窗体文档窗体和多文档窗体单文档窗体:窗体体之间相互独立;单文档窗体:窗体体之间相互独立;多文档窗体(多文档窗体(Multi-Document Interface,MDIMulti-Document Interface,MDI)l在一个主窗
35、体中,可以包含一个或多个子窗体在一个主窗体中,可以包含一个或多个子窗体;l主窗体必须设置主窗体必须设置IsMDIContainerIsMDIContainer属性为属性为truetrue;l子窗体设置子窗体设置MdiParentMdiParent属性,指向主窗体;属性,指向主窗体;l主窗体称为主窗体称为MDIMDI父窗体,子窗体称为父窗体,子窗体称为MDIMDI子窗体;子窗体;l若要设置主窗体中各子窗体的排列方式,可使用主窗体的若要设置主窗体中各子窗体的排列方式,可使用主窗体的LayoutMdiLayoutMdi方法,其值设置为方法,其值设置为MdiLayoutMdiLayout枚举值之一;枚
36、举值之一;l例如,例如,Microsoft WordMicrosoft Word、Microsoft ExcelMicrosoft Excel等就是多文档等就是多文档界面界面(MDI)(MDI)应用程序。应用程序。3232系统包含三种样式窗体:系统包含三种样式窗体:(1)(1)单文档界面单文档界面(SDI)(SDI):例如,例如,Microsoft Windows Microsoft Windows 中包括的中包括的“写写字板字板”应用程序就是应用程序就是SDISDI类型的界面。在类型的界面。在“写字板写字板”中,只能打中,只能打开一个文档;打开另一个文档自动关闭一个已经打开的文档。开一个文档
37、;打开另一个文档自动关闭一个已经打开的文档。例如,例如,Microsoft Windows Microsoft Windows 中包括的中包括的“写字板写字板”应用程序就是应用程序就是SDISDI类类型的界面。在型的界面。在“写字板写字板”中,只能打开一个文档;打开另一个中,只能打开一个文档;打开另一个文档自动关闭一个已经打开的文档文档自动关闭一个已经打开的文档。6.1.5 6.1.5 单文档窗体和多文档窗体单文档窗体和多文档窗体3333(2 2)多文档界面()多文档界面(Multi-Document Interface,MDIMulti-Document Interface,MDI)是指在一
38、)是指在一个主窗体中可以包含一个或多个子窗体的窗体,主窗体称为个主窗体中可以包含一个或多个子窗体的窗体,主窗体称为MDIMDI父窗体,子窗体称为父窗体,子窗体称为MDIMDI子窗体。子窗体。l主窗体必须设置主窗体必须设置IsMDIContainerIsMDIContainer属性为属性为truetrue;l子子窗体设置窗体设置MdiParentMdiParent属性,指向主窗体;属性,指向主窗体;6.1.5 6.1.5 单文档窗体和多文档窗体单文档窗体和多文档窗体3434为了排列子窗体,用为了排列子窗体,用 LayoutMdi()LayoutMdi()方法为方法为 MDI MDI 父窗体设置父
39、窗体设置 MdiLayout MdiLayout 枚举。其枚举值如下表所示。枚举。其枚举值如下表所示。成 员 名 称说 明ArrangeIcons所有 MDI 子图标均排列在 MDI 父窗体的工作区内Cascade所有 MDI 子窗口均层叠在 MDI 父窗体的工作区内TileHorizontal所有 MDI 子窗口均水平平铺在 MDI 父窗体的工作区内TileVertical所有 MDI 子窗口均垂直平铺在 MDI 父窗体的工作区内6.1.5 6.1.5 单文档窗体和多文档窗体单文档窗体和多文档窗体3535补充例题补充例题3 3:MDIMDI窗体用法窗体用法【例【例6-36-3】演示】演示MD
40、IMDI窗体的基本用法以及如何显示和关闭子窗窗体的基本用法以及如何显示和关闭子窗体运行效果如下(体运行效果如下(MDIExampleMDIExample):):3636补充例题补充例题3 3:MDIMDI窗体用法窗体用法37376.1.6对话对话框框对话框用于与用户交互和检索信息;对话框用于与用户交互和检索信息;对话框(对话框(ShowDialogShowDialog打开的窗体)都具有返回值;打开的窗体)都具有返回值;lDialogResultDialogResult枚举值:枚举值:NoneNone、OKOK、CancelCancel、YesYes和和NoNo。对话框分为标准对话框和自定义对话
41、框。对话框分为标准对话框和自定义对话框。1.1.MessageBoxMessageBox对话框对话框利用静态利用静态ShowShow方法来显示消息对话框;方法来显示消息对话框;2.2.ColorDialogColorDialog、FontDialogFontDialog对话框对话框提供颜色、字体选择;提供颜色、字体选择;3.3.自定义窗体对话框自定义窗体对话框设计方法与设计一般窗体基本相同,但要做特殊的处理。设计方法与设计一般窗体基本相同,但要做特殊的处理。38381、MessageBox对话对话框的框的Show方法方法Show(string text)Show(string text)Tex
42、tText给出在消息框中显示的文本;给出在消息框中显示的文本;Show(string text,string caption)Show(string text,string caption)captioncaption指定消息框的标题栏中显示的文本;指定消息框的标题栏中显示的文本;Show(string text,string caption,Show(string text,string caption,MessageBoxButtonsMessageBoxButtons buttons,buttons,MessageBoxIconMessageBoxIcon icon)icon)lMess
43、ageBoxButtonsMessageBoxButtons枚举值有枚举值有OKOK、OKCancelOKCancel、YesNoCancelYesNoCancel和和YesNoYesNo。lMessageBoxIconMessageBoxIcon枚举值有枚举值有None(None(不显示图标不显示图标)、Hand(Hand(手形手形)、Question(Question(问号问号)、Exclamation(Exclamation(感叹号感叹号)、Asterisk(Asterisk(星号星号)、Stop(Stop(停止停止)、Error(Error(错误错误)、Warning(Warning(
44、警告警告)和和Information(Information(信信息息)。39392、ColorDialog、FontDialog对话对话框框提供颜色、字体选择的对话框。提供颜色、字体选择的对话框。l调用方法:调用方法:ShowDialog()ShowDialog()l返回值:返回值:DialogResultDialogResult类型类型举例举例ColorDialog colorDlg=new ColorDialog();ColorDialog colorDlg=new ColorDialog();if(colorDlg.ShowDialog()=DialogResult.OK)if(col
45、orDlg.ShowDialog()=DialogResult.OK)textBox1.ForeColor=colorDlg.Color;textBox1.ForeColor=colorDlg.Color;4040ColorDialog、FontDialog对话对话框框4141默认情况下,默认情况下,“字体字体”对话框显示字体、字体样式和字体对话框显示字体、字体样式和字体大小的列表框、删除线和下划线等效果的复选框、字符集的拉大小的列表框、删除线和下划线等效果的复选框、字符集的拉列表以及字体外观等选项。图标为列表以及字体外观等选项。图标为“”。FontDialogFontDialog组组件常用属
46、性、方法和事件及说明如下页表所示。件常用属性、方法和事件及说明如下页表所示。6.1.6 6.1.6 对话框对话框4242属属 性性/方方 法法/事事 件件说说 明明AllowScriptChange属性属性获获取取或或设设置置一一个个值值,该该值值指指示示用用户户能能否否更更改改“脚脚本本”组组合合框框中中指指定定的的字字符符集集,以以显显示示除除了了当当前前所所显显示示字字符符集以外的字符集。集以外的字符集。AllowVerticalFonts属性属性获获取取或或设设置置一一个个值值,该该值值指指示示对对话话框框是是既既显显示示垂垂直直字字体又显示水平字体,还是只显示水平字体。体又显示水平字
47、体,还是只显示水平字体。Color属性属性获取或设置选定字体的颜色。获取或设置选定字体的颜色。Font属性属性获取或设置选定的字体。获取或设置选定的字体。MaxSize属性属性获取或设置用户可选择的最大磅值。获取或设置用户可选择的最大磅值。MinSize属性属性获取或设置用户可选择的最小磅值。获取或设置用户可选择的最小磅值。6.1.6 6.1.6 对话框对话框4343ShowApplyShowApply属性属性获获取取或或设设置置一一个个值值,该该值值指指示示对对话话框框是是否否包包含含“应应用用”按按钮。钮。ShowColorShowColor属性属性获取或设置一个值,该值指示对话框是否显示
48、颜色选项。获取或设置一个值,该值指示对话框是否显示颜色选项。ShowEffectsShowEffects属性属性获获取取或或设设置置一一个个值值,该该值值指指示示对对话话框框是是否否包包含含允允许许用用户户指指定删除线、下划线和文本颜色选项的控件。定删除线、下划线和文本颜色选项的控件。ShowHelpShowHelp属性属性获获取取或或设设置置一一个个值值,该该值值指指示示对对话话框框是是否否显显示示“帮帮助助”按按钮。钮。ResetReset方法方法将所有对话框选项重置为默认值。将所有对话框选项重置为默认值。ShowDialogShowDialog方法方法运行通用对话框。运行通用对话框。Ap
49、plyApply事件事件当用户单击字体对话框中的当用户单击字体对话框中的“应用应用”按钮时发生。按钮时发生。6.1.6 6.1.6 对话框对话框44446.1.6 6.1.6 对话框对话框自定义窗体对话框自定义窗体对话框的设计方法与设计一般窗体基本相同,不同的设计方法与设计一般窗体基本相同,不同之处是还要对自定义窗体对话框作如下处理:之处是还要对自定义窗体对话框作如下处理:u将窗体的将窗体的【FormBorderStyleFormBorderStyle】属性更改为属性更改为“FixedDialogFixedDialog”u将窗体的将窗体的【MaximizeBoxMaximizeBox】属性、属
50、性、【MinimizeBoxMinimizeBox】属性和属性和【ControlBoxControlBox】属性设置为属性设置为“FalseFalse”u在窗体上放一个在窗体上放一个“确定确定”按钮,一个按钮,一个“取消取消”按钮。然后将按钮。然后将窗体的窗体的【AcceptButtonAcceptButton】属性设置为属性设置为“确定确定”按钮,按钮,【CancelButtonCancelButton】属性设置为属性设置为“取消取消”按钮。按钮。u在按钮事件中,设置在按钮事件中,设置DialogResultDialogResult类型的返回值,以便让对类型的返回值,以便让对话框隐藏起来话框