C#第6章窗体、控件和组件.ppt
《C#第6章窗体、控件和组件.ppt》由会员分享,可在线阅读,更多相关《C#第6章窗体、控件和组件.ppt(144页珍藏版)》请在三一文库上搜索。
1、第6章 窗体、控件和组件,6.1 窗体与对话框 6.2 控件共有的基本操作 6.3 容器类控件和组件 6.4 文本操作类控件 6.5 选择操作类控件 6.6 图像操作类控件和组件 6.7 菜单、工具栏与状态栏 6.8 视图操作类控件 6.9 其他常用控件,界面设计举例1-动物的故事(KeyboardAndEventExample),界面设计举例2-打飞鸟(DownBird),界面设计举例3-Vista图片变换效果(vistaPictureBoxExample),界面设计举例4-XP风格的window窗体(SplitContainerExample),Window应用程序的生命周期,所谓“应用程
2、序”,就是一个进程。 假设只有一个线程,即主线程。主线程逐句执行线程体的代码,当执行完之后,程序结束,进程空间释放。,static void Main() Console.WriteLine(“Hello, World!“); Console.WriteLine(“This is a demo!“); Console.WriteLine(“writen by xialuning!“); ,主线程体执行完了,进程退出。控制台窗口也随之消失。,窗体应用程序,窗体应用程序,为什么一直存在而不消失(除非显式点击关闭按钮)? “窗体”大概可以分为前台和后台两个部分。 从前台来讲,“窗体”是一个可见的窗口
3、”; 从后台来讲,“窗体”是一个消息循环。,protected override void WndProc(ref Message m) switch (m.Msg) case WM_COMMAND: . break; case WM_CLOSE: . break; base.WndProc(ref m); ,消息循环(消息泵): 主线程不停的尝试接收来自Windows系统的消息; 当有消息到来时,就处理; 无消息到来,无限等待; WM_CLOSE或WM_DESTROYWINDOW等消息到来时,主线程结束。,消息循环(了解),Windows是以消息驱动的操作系统,Windows 消息提供了应用
4、程序与应用程序以及应用程序与Windows系统之间进行通讯的手段。 Windows 中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。 Windows 应用程序创建的每个窗口都在系统核心注册一个相应的窗口函数,窗口函数程序代码形式上是一个巨大的switch 语句,用以处理由消息循环发送到该窗口的消息,窗口函数由Windows 采用消息驱动的形式直接调用,而不是由应用程序显示调用的,窗口函数处理
5、完消息后又将控制权返回给Windows。,窗体应用程序与控制台应用程序,控制台程序没有消息循环(假如不在控制台程序中使用窗体),主线程代码依次执行后就结束 控制台程序适于代码验证和代码功能演示,执行一段代码,然后在控制台输出结果。 窗体应用程序在后台使用消息循环来运作,前台使用窗体控件来提供用户交互界面。,Windows应用程序中的Program.cs文件,特性描述,使应用程序能够与COM组件进行互操作;,启动应用程序,显示窗体Form1,6.1 窗体与对话框,1、窗体应用程序的启动和停止 使用Application类提供的静态方法来启动、停止应用程序。Application类提供的方法: R
6、un方法:调用 Run 以便在当前线程上启动应用程序消息循环,并可以选择使某窗体可见。 Exit或ExitThread方法:用于停止消息循环。 DoEvents方法:用于在程序处于某个循环中时处理消息。 调用 AddMessageFilter 以向应用程序消息泵添加消息筛选器来监视 Windows 消息。 IMessageFilter 可以阻止引发某事件或在调用某事件处理程序前执行特殊操作。,当运行 Windows 窗体时,它将创建新窗体,然后该窗体等待处理事件。该窗体在每次处理事件时,均将处理与该事件关联的所有代码。所有其他事件在队列中等待。在代码处理事件时,应用程序并不响应。例如,当将另一
7、窗口拖到该窗口前面时,该窗口不重新绘制。 如果在代码中调用 DoEvents,则您的应用程序可以处理其他事件。例如,如果您有向 ListBox 添加数据的窗体,并将 DoEvents 添加到代码中,那么当将另一窗口拖到您的窗体上时,该窗体将重新绘制。如果从代码中移除 DoEvents,那么在按钮的单击事件处理程序执行结束以前,您的窗体不会重新绘制。,6.1 窗体与对话框,窗体的常用方法和事件,6.1.2 窗体的创建、显示与隐藏,1、如何在代码中打开一个新窗体 Form2 fm = new Form2(); fm.Show(); /或者fm.ShowDialog(); 注意Show()和Show
8、Dialog()区别; 2、如何在代码中关闭一个窗体 用法1:fm.Close(); 用法2:this.Close(); 用法3:Application.OpenForms“Form1“.Close(); OpenForms是当前应用程序中,所有已创建、未释放的窗体的集合;若当前窗体是应用程序的主窗体,则在关闭当前窗体的同时,直接退出应用程序;,3、如何隐藏一个打开的窗体 (1)隐藏当前窗体:this.Hide(); (2)隐藏其它窗体:Application.OpenForms“Form1“.Hide(); 隐藏窗体是使窗体不可见,但该窗体所占用的资源并没有被释放,随时可以通过调用该窗体的S
9、how方法将其显示。 4、如何重新显示隐藏的窗体 (1)显示当前窗体:this.Show(); (2)显示其它窗体:Application.OpenForms“Form1”.Show();/显示Form1窗体,6.1.2 窗体的创建、显示与隐藏,5.选择启动窗体 启动窗体可以根据需要进行设置或更改,在“解决方案资源管理器”中打开Program.cs文件,若要使项目中的Form2窗体成为启动窗体,在Main方法中将Form1修改为Form2即可,代码如下: static void Main() Application.EnableVisualStyles(); Application.SetCo
10、mpatibleTextRenderingDefault(false); Application.Run(new Form2(); ,6.1.2 窗体的创建、显示与隐藏,6关闭应用程序 Application.Exit(); 退出当前应用程序,关闭该应用程序中的所有窗体; 关闭窗体时,该窗体所占用的资源也会被释放,6.1.2 窗体的创建、显示与隐藏,关闭多个窗体(Application.OpenForms),int count = Application.OpenForms.Count; for (int i = count-1; i =0; i-) if (Application.OpenF
11、ormsi.Name = “Form2“) Application.OpenFormsi.Close(); ,但是不能使用如下形式: for (int i = 0; i count; i+) (Application.OpenFormsi.Name = “Form2“) Application.OpenFormsi.Close(); 原因在于每关闭一个窗体之后通过Application.OpenForms所获取属于应用程序的打开窗体的集合就会发生变化,导致索引引用超出范围。,关闭多个窗体(Application.OpenForms),6.1.2 窗体的创建、显示与隐藏,【例6-1】演示窗体的基
12、本用法以及如何显示和关闭窗体。 部分运行效果如图:,C#中的InitializeComponent()方法,在每一个窗体生成的时候,都会针对于当前的窗体定义InitializeComponent()方法,该方法实际上是由系统生成的对于窗体界面的定义方法。 在每一个Form文件建立后,都会同时产生程序代码文件.CS文件,以及与之相匹配的.designer.cs文件,业务逻辑以及事件方法等被编写在.CS文件之中,而界面设计规则被封装在.Designer.CS文件里。,在.designer.cs代码之中,可以很容易发现InitializeComponent()方法和Dispose()方法,前者为界面
13、设计的变现内容,后者为表单释放系统资源时候执行编码。 InitializeComponent()方法反映了窗体设计器中窗体和控件的属性。如果更改InitializeComponent()方法中的相关属性参数,相应的变化在窗体设计器界面上也会显示出来。 Form1.Designer.cs 里的是定义 (函数名后面有大括号包含定义内容) Form1.cs 里的是调用 (函数名后面分号结尾),C#中的InitializeComponent()方法,注意: InitializeComponent( )方法写在前面和后面是有区别的。 InitializeComponent( )方法是用来初始化窗体组件的
14、,在InitializeComponent之前,窗体的各个控件还没有进行初始化,比如说窗体上有一个TextBoxUserName,在InitializeComponent( )之前它还只是一个TextBox类型的变量而已,如果在InitializeComponent( )之前调用这个TextBox的属性或方法,就会出错。,C#中的InitializeComponent()方法,6.1.3 窗体常用的属性,HelpButton属性 如果当ControlBox = true; MaxmizeBox = false; MinimizeBox = false; 而 HelpButton = true
15、时就可以看到有个帮助的按钮出现在关闭按钮旁边。,6.1.3 窗体常用的属性,6.1.4 窗体常用属性,设置窗体属性的途径有2种: 在设计模式下利用【属性】窗口设置窗体属性。 在代码编辑模式下设置窗体属性。 补充例题2(FormSetExample),6.1.4 窗体位置及外观控制,StartPostion:获取或设置运行时窗体的起始位置,一般在构造函数中设置此属性。注意位置语句必须写在构造函数中。 例如: this.StartPosition = FormStartPosition.Manual; this. Location = new Point(screenX, screenY); 通过
16、设置窗体的【ControlBox】属性为“True”或者“Fals e”,可以控制是否显示最大化、最小化以及关闭按钮。除此之 外,还可以通过设置窗体的【FormBorderStyle】属性控制窗体 的边框样式.,设置窗体起始位置,需要首先了解计算机屏幕的坐标系。和通常的坐标系起始点不同,计算机屏幕坐标系原点位于屏幕左上角。其X轴水平向右,Y轴垂直向下。以计算机屏幕分辨率为800600为例,其X轴最大值为800像素,Y轴最大值为600像素。,6.1.4 窗体位置及外观控制,6.1.4 窗体位置及外观控制,【例6-2】演示如何控制窗体的显示位置以及如何控制窗体的外观形状。设计视图如下:,运行效果如
17、下:,load()事件在第一次显示窗体前发生,可以使用此事件执行一些任务,如分配窗体使用的资源。,6.1.4 窗体位置及外观控制,6.1.5 单文档窗体和多文档窗体,单文档窗体:窗体体之间相互独立; 多文档窗体(Multi-Document Interface, MDI) 在一个主窗体中,可以包含一个或多个子窗体; 主窗体必须设置IsMDIContainer属性为true; 子窗体设置MdiParent属性,指向主窗体; 主窗体称为MDI父窗体,子窗体称为MDI子窗体; 若要设置主窗体中各子窗体的排列方式,可使用主窗体的LayoutMdi方法,其值设置为MdiLayout枚举值之一; 例如,M
18、icrosoft Word、Microsoft Excel等就是多文档界面 (MDI) 应用程序。,系统包含三种样式窗体: 单文档界面 (SDI): 例如,Microsoft Windows 中包括的“写字板”应用程序就是SDI类型的界面。在“写字板”中,只能打开一个文档;打开另一个文档自动关闭一个已经打开的文档。 例如,Microsoft Windows 中包括的“写字板”应用程序就是SDI类型的界面。在“写字板”中,只能打开一个文档;打开另一个文档自动关闭一个已经打开的文档。,6.1.5 单文档窗体和多文档窗体,(2)多文档界面(Multi-Document Interface, MDI)
19、是指在一个主窗体中可以包含一个或多个子窗体的窗体,主窗体称为MDI父窗体,子窗体称为MDI子窗体。 主窗体必须设置IsMDIContainer属性为true; 子窗体设置MdiParent属性,指向主窗体;,6.1.5 单文档窗体和多文档窗体,为了排列子窗体,用 LayoutMdi()方法为 MDI 父窗体设置 MdiLayout 枚举。其枚举值如下表所示。,6.1.5 单文档窗体和多文档窗体,补充例题3:MDI窗体用法,【例6-3】演示MDI窗体的基本用法以及如何显示和关闭子窗体运行效果如下(MDIExample):,补充例题3:MDI窗体用法,6.1.6 对话框,对话框用于与用户交互和检索
20、信息; 对话框(ShowDialog打开的窗体)都具有返回值; DialogResult枚举值:None、OK、Cancel、Yes和No。 对话框分为标准对话框和自定义对话框。 MessageBox对话框 利用静态Show方法来显示消息对话框; ColorDialog、FontDialog对话框 提供颜色、字体选择; 自定义窗体对话框 设计方法与设计一般窗体基本相同,但要做特殊的处理。,1、MessageBox对话框的Show方法,Show(string text) Text给出在消息框中显示的文本; Show(string text, string caption) caption指定消息
21、框的标题栏中显示的文本; Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) MessageBoxButtons枚举值有OK、OKCancel、YesNoCancel和YesNo。 MessageBoxIcon枚举值有None (不显示图标)、Hand(手形)、Question(问号)、Exclamation(感叹号)、Asterisk(星号)、Stop(停止)、Error(错误)、Warning(警告)和Information(信息)。,2、ColorDialog、FontDial
22、og对话框,提供颜色、字体选择的对话框。 调用方法:ShowDialog() 返回值:DialogResult类型 举例 ColorDialog colorDlg = new ColorDialog(); if (colorDlg.ShowDialog() = DialogResult.OK) textBox1.ForeColor = colorDlg.Color; ,ColorDialog、FontDialog对话框,默认情况下,“字体”对话框显示字体、字体样式和字体大小的列表框、删除线和下划线等效果的复选框、字符集的拉列表以及字体外观等选项。图标为“ ”。FontDialog组件常用属性、
23、方法和事件及说明如下页表所示。,6.1.6 对话框,6.1.6 对话框,6.1.6 对话框,6.1.6 对话框,自定义窗体对话框的设计方法与设计一般窗体基本相同,不同之处是还要对自定义窗体对话框作如下处理: 将窗体的【FormBorderStyle】属性更改为“FixedDialog” 将窗体的【MaximizeBox】属性、【MinimizeBox】属性和【ControlBox】属性设置为“False” 在窗体上放一个“确定”按钮,一个“取消”按钮。然后将窗体的【AcceptButton】属性设置为“确定”按钮,【CancelButton】属性设置为“取消”按钮。 在按钮事件中,设置Dial
24、ogResult类型的返回值,以便让对话框隐藏起来,6.1.6 对话框,【例6-4】自定义窗体对话框的用法。 设计视图如下:,运行效果如下:,补充:窗体间值的传递,1、通过构造函数 特点:传值是单向的(不可以互相传值),实现简单。 在窗体Form2中 int value1; string value2; public Form2 ( int value1 , string value2 ) InitializeComponent ( ); this.value1 = value1; this.value2 = value2; 在窗体Form1中这样调用 new Form2 ( 111 , “2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 窗体 控件 组件
链接地址:https://www.31doc.com/p-3548664.html