C#第6章窗体、控件和组.ppt

上传人:牧羊曲112 文档编号:6502398 上传时间:2023-11-07 格式:PPT 页数:144 大小:3.06MB
返回 下载 相关 举报
C#第6章窗体、控件和组.ppt_第1页
第1页 / 共144页
C#第6章窗体、控件和组.ppt_第2页
第2页 / 共144页
C#第6章窗体、控件和组.ppt_第3页
第3页 / 共144页
C#第6章窗体、控件和组.ppt_第4页
第4页 / 共144页
C#第6章窗体、控件和组.ppt_第5页
第5页 / 共144页
点击查看更多>>
资源描述

《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!);,主线程体执行完了,进程退出。控制台窗口也随之消失。,窗体应用程序,窗体应用程序,为什么一直存在而不消失(除非显式点击关闭按钮)?“窗体”大概可以分为前台和后台两个部分。从前台来讲,“窗体”是一个可见的窗口”;从后台来讲,“窗体”是一个消息循环。,p

3、rotected 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 消息提供了应用程序与应用程序以及应用程序与Windows系统之间进行通讯的手段。Wind

4、ows 中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。Windows 应用程序创建的每个窗口都在系统核心注册一个相应的窗口函数,窗口函数程序代码形式上是一个巨大的switch 语句,用以处理由消息循环发送到该窗口的消息,窗口函数由Windows 采用消息驱动的形式直接调用,而不是由应用程序显示调用的,窗口函数处理完消息后又将控制权返回给Windows。,窗体应用程序与控制台应用程序,控制台

5、程序没有消息循环(假如不在控制台程序中使用窗体),主线程代码依次执行后就结束 控制台程序适于代码验证和代码功能演示,执行一段代码,然后在控制台输出结果。窗体应用程序在后台使用消息循环来运作,前台使用窗体控件来提供用户交互界面。,Windows应用程序中的Program.cs文件,特性描述,使应用程序能够与COM组件进行互操作;,启动应用程序,显示窗体Form1,6.1 窗体与对话框,1、窗体应用程序的启动和停止使用Application类提供的静态方法来启动、停止应用程序。Application类提供的方法:Run方法:调用 Run 以便在当前线程上启动应用程序消息循环,并可以选择使某窗体可见

6、。Exit或ExitThread方法:用于停止消息循环。DoEvents方法:用于在程序处于某个循环中时处理消息。调用 AddMessageFilter 以向应用程序消息泵添加消息筛选器来监视 Windows 消息。IMessageFilter 可以阻止引发某事件或在调用某事件处理程序前执行特殊操作。,当运行 Windows 窗体时,它将创建新窗体,然后该窗体等待处理事件。该窗体在每次处理事件时,均将处理与该事件关联的所有代码。所有其他事件在队列中等待。在代码处理事件时,应用程序并不响应。例如,当将另一窗口拖到该窗口前面时,该窗口不重新绘制。如果在代码中调用 DoEvents,则您的应用程序可

7、以处理其他事件。例如,如果您有向 ListBox 添加数据的窗体,并将 DoEvents 添加到代码中,那么当将另一窗口拖到您的窗体上时,该窗体将重新绘制。如果从代码中移除 DoEvents,那么在按钮的单击事件处理程序执行结束以前,您的窗体不会重新绘制。,6.1 窗体与对话框,窗体的常用方法和事件,6.1.2 窗体的创建、显示与隐藏,1、如何在代码中打开一个新窗体 Form2 fm=new Form2();fm.Show();/或者fm.ShowDialog();注意Show()和ShowDialog()区别;2、如何在代码中关闭一个窗体 用法1:fm.Close();用法2:this.Cl

8、ose();用法3:Application.OpenFormsForm1.Close();OpenForms是当前应用程序中,所有已创建、未释放的窗体的集合;若当前窗体是应用程序的主窗体,则在关闭当前窗体的同时,直接退出应用程序;,3、如何隐藏一个打开的窗体(1)隐藏当前窗体:this.Hide();(2)隐藏其它窗体:Application.OpenFormsForm1.Hide();隐藏窗体是使窗体不可见,但该窗体所占用的资源并没有被释放,随时可以通过调用该窗体的Show方法将其显示。4、如何重新显示隐藏的窗体(1)显示当前窗体:this.Show();(2)显示其它窗体:Applicat

9、ion.OpenForms“Form1”.Show();/显示Form1窗体,6.1.2 窗体的创建、显示与隐藏,5.选择启动窗体 启动窗体可以根据需要进行设置或更改,在“解决方案资源管理器”中打开Program.cs文件,若要使项目中的Form2窗体成为启动窗体,在Main方法中将Form1修改为Form2即可,代码如下:static void Main()Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form2();,6.1.

10、2 窗体的创建、显示与隐藏,6关闭应用程序Application.Exit();退出当前应用程序,关闭该应用程序中的所有窗体;关闭窗体时,该窗体所占用的资源也会被释放,6.1.2 窗体的创建、显示与隐藏,关闭多个窗体(Application.OpenForms),int count=Application.OpenForms.Count;for(int i=count-1;i=0;i-)if(Application.OpenFormsi.Name=Form2)Application.OpenFormsi.Close();,但是不能使用如下形式:for(int i=0;i count;i+)(A

11、pplication.OpenFormsi.Name=Form2)Application.OpenFormsi.Close();原因在于每关闭一个窗体之后通过Application.OpenForms所获取属于应用程序的打开窗体的集合就会发生变化,导致索引引用超出范围。,关闭多个窗体(Application.OpenForms),6.1.2 窗体的创建、显示与隐藏,【例6-1】演示窗体的基本用法以及如何显示和关闭窗体。部分运行效果如图:,C#中的InitializeComponent()方法,在每一个窗体生成的时候,都会针对于当前的窗体定义InitializeComponent()方法,该方法

12、实际上是由系统生成的对于窗体界面的定义方法。在每一个Form文件建立后,都会同时产生程序代码文件.CS文件,以及与之相匹配的.designer.cs文件,业务逻辑以及事件方法等被编写在.CS文件之中,而界面设计规则被封装在.Designer.CS文件里。,在.designer.cs代码之中,可以很容易发现InitializeComponent()方法和Dispose()方法,前者为界面设计的变现内容,后者为表单释放系统资源时候执行编码。InitializeComponent()方法反映了窗体设计器中窗体和控件的属性。如果更改InitializeComponent()方法中的相关属性参数,相应的

13、变化在窗体设计器界面上也会显示出来。Form1.Designer.cs 里的是定义(函数名后面有大括号包含定义内容)Form1.cs 里的是调用(函数名后面分号结尾),C#中的InitializeComponent()方法,注意:InitializeComponent()方法写在前面和后面是有区别的。InitializeComponent()方法是用来初始化窗体组件的,在InitializeComponent之前,窗体的各个控件还没有进行初始化,比如说窗体上有一个TextBoxUserName,在InitializeComponent()之前它还只是一个TextBox类型的变量而已,如果在In

14、itializeComponent()之前调用这个TextBox的属性或方法,就会出错。,C#中的InitializeComponent()方法,6.1.3 窗体常用的属性,HelpButton属性 如果当ControlBox=true;MaxmizeBox=false;MinimizeBox=false;而 HelpButton=true 时就可以看到有个帮助的按钮出现在关闭按钮旁边。,6.1.3 窗体常用的属性,6.1.4 窗体常用属性,设置窗体属性的途径有2种:在设计模式下利用【属性】窗口设置窗体属性。在代码编辑模式下设置窗体属性。补充例题2(FormSetExample),6.1.4

15、窗体位置及外观控制,StartPostion:获取或设置运行时窗体的起始位置,一般在构造函数中设置此属性。注意位置语句必须写在构造函数中。例如:this.StartPosition=FormStartPosition.Manual;this.Location=new Point(screenX,screenY);通过设置窗体的【ControlBox】属性为“True”或者“False”,可以控制是否显示最大化、最小化以及关闭按钮。除此之外,还可以通过设置窗体的【FormBorderStyle】属性控制窗体的边框样式.,设置窗体起始位置,需要首先了解计算机屏幕的坐标系。和通常的坐标系起始点不同,

16、计算机屏幕坐标系原点位于屏幕左上角。其X轴水平向右,Y轴垂直向下。以计算机屏幕分辨率为800600为例,其X轴最大值为800像素,Y轴最大值为600像素。,6.1.4 窗体位置及外观控制,6.1.4 窗体位置及外观控制,【例6-2】演示如何控制窗体的显示位置以及如何控制窗体的外观形状。设计视图如下:,运行效果如下:,load()事件在第一次显示窗体前发生,可以使用此事件执行一些任务,如分配窗体使用的资源。,6.1.4 窗体位置及外观控制,6.1.5 单文档窗体和多文档窗体,单文档窗体:窗体体之间相互独立;多文档窗体(Multi-Document Interface,MDI)在一个主窗体中,可以

17、包含一个或多个子窗体;主窗体必须设置IsMDIContainer属性为true;子窗体设置MdiParent属性,指向主窗体;主窗体称为MDI父窗体,子窗体称为MDI子窗体;若要设置主窗体中各子窗体的排列方式,可使用主窗体的LayoutMdi方法,其值设置为MdiLayout枚举值之一;例如,Microsoft Word、Microsoft Excel等就是多文档界面(MDI)应用程序。,系统包含三种样式窗体:单文档界面(SDI):例如,Microsoft Windows 中包括的“写字板”应用程序就是SDI类型的界面。在“写字板”中,只能打开一个文档;打开另一个文档自动关闭一个已经打开的文档

18、。例如,Microsoft Windows 中包括的“写字板”应用程序就是SDI类型的界面。在“写字板”中,只能打开一个文档;打开另一个文档自动关闭一个已经打开的文档。,6.1.5 单文档窗体和多文档窗体,(2)多文档界面(Multi-Document Interface,MDI)是指在一个主窗体中可以包含一个或多个子窗体的窗体,主窗体称为MDI父窗体,子窗体称为MDI子窗体。主窗体必须设置IsMDIContainer属性为true;子窗体设置MdiParent属性,指向主窗体;,6.1.5 单文档窗体和多文档窗体,为了排列子窗体,用 LayoutMdi()方法为 MDI 父窗体设置 MdiL

19、ayout 枚举。其枚举值如下表所示。,6.1.5 单文档窗体和多文档窗体,补充例题3:MDI窗体用法,【例6-3】演示MDI窗体的基本用法以及如何显示和关闭子窗体运行效果如下(MDIExample):,补充例题3:MDI窗体用法,6.1.6 对话框,对话框用于与用户交互和检索信息;对话框(ShowDialog打开的窗体)都具有返回值;DialogResult枚举值:None、OK、Cancel、Yes和No。对话框分为标准对话框和自定义对话框。MessageBox对话框利用静态Show方法来显示消息对话框;ColorDialog、FontDialog对话框提供颜色、字体选择;自定义窗体对话框

20、设计方法与设计一般窗体基本相同,但要做特殊的处理。,1、MessageBox对话框的Show方法,Show(string text)Text给出在消息框中显示的文本;Show(string text,string caption)caption指定消息框的标题栏中显示的文本;Show(string text,string caption,MessageBoxButtons buttons,MessageBoxIcon icon)MessageBoxButtons枚举值有OK、OKCancel、YesNoCancel和YesNo。MessageBoxIcon枚举值有None(不显示图标)、Han

21、d(手形)、Question(问号)、Exclamation(感叹号)、Asterisk(星号)、Stop(停止)、Error(错误)、Warning(警告)和Information(信息)。,2、ColorDialog、FontDialog对话框,提供颜色、字体选择的对话框。调用方法:ShowDialog()返回值:DialogResult类型举例ColorDialog colorDlg=new ColorDialog();if(colorDlg.ShowDialog()=DialogResult.OK)textBox1.ForeColor=colorDlg.Color;,ColorDial

22、og、FontDialog对话框,默认情况下,“字体”对话框显示字体、字体样式和字体大小的列表框、删除线和下划线等效果的复选框、字符集的拉列表以及字体外观等选项。图标为“”。FontDialog组件常用属性、方法和事件及说明如下页表所示。,6.1.6 对话框,6.1.6 对话框,6.1.6 对话框,6.1.6 对话框,自定义窗体对话框的设计方法与设计一般窗体基本相同,不同之处是还要对自定义窗体对话框作如下处理:将窗体的【FormBorderStyle】属性更改为“FixedDialog”将窗体的【MaximizeBox】属性、【MinimizeBox】属性和【ControlBox】属性设置为“

23、False”在窗体上放一个“确定”按钮,一个“取消”按钮。然后将窗体的【AcceptButton】属性设置为“确定”按钮,【CancelButton】属性设置为“取消”按钮。在按钮事件中,设置DialogResult类型的返回值,以便让对话框隐藏起来,6.1.6 对话框,【例6-4】自定义窗体对话框的用法。设计视图如下:,运行效果如下:,补充:窗体间值的传递,1、通过构造函数特点:传值是单向的(不可以互相传值),实现简单。在窗体Form2中 int value1;string value2;public Form2(int value1,string value2)InitializeComp

24、onent();this.value1=value1;this.value2=value2;在窗体Form1中这样调用 new Form2(111,222).Show();/这样就把111,222,这2个值传送给了Form2,2.通过静态变量特点:传值是双向的,实现简单。例如:比如在窗体Form1中定义一个静态成员value在窗体Form1中这样调用 From1.value=f2;/给静态成员赋值new Form2().Show();/显示Form2在窗体Form2中 this.Text=From1.value;/取回app.value的值From1.value=Form2;/给app.val

25、ue赋值,以便其他窗体调用,补充:窗体间值的传递,3.通过窗体的公有属性值特点:实现简单在窗体Form2中定义一个公有属性Form2Value,获取和设置textBox1的文本值public string Form2Value get return this.textBox1.Text;set this.textBox1.Text=value;在窗体Form1中这样调用 Form2 f2=new Form2();f2.Form2Value=Ok;/给Form2的textBox1赋值Okf2.ShowDialog();,补充:窗体间值的传递,4.通过窗体的公有属性值和Owner属性特点:实现简单

26、,灵活在窗体Form1中public int Form1Value=1;Form2 f2=new Form2();f2.ShowDialog(this);/把Form1作为Form2的所有者传递给Form2在窗体Form2中/Form2的所有者是Form1Form1 f1=(Form1)this.Owner;/取到Form1的值是1MessageBox.Show(f1.Form1Value.ToString();/给Form1的Form1Value赋值222f1.Form1Value=222;,补充:窗体间值的传递,5.通过窗体的公有属性值和Application.OpenForms属性 说明

27、:Application.OpenForms属性:获取属于应用程序的打开窗体的集合。(此属性在.NET Framework2.0版中)public int Form1Value=1;Form2 f2=new Form2();f2.Show();在窗体Form2中string formName=Form1;Form fr=Application.OpenForms formName;if(fr!=null)Form1 f1=(Form1)fr;/取到Form1的值是1 MessageBox.Show(f1.Form1Value.ToString();/给Form1的Form1Value赋值222

28、 f1.Form1Value=222;,补充:窗体间值的传递,6.通过事件在窗体Form2中定义公有属性Form2Value,获取和设置textBox1的文本值并且还定义一个accept事件public string Form2Value get return this.textBox1.Text;set this.textBox1.Text=value;,补充:窗体间值的传递,6.通过事件(续)public event EventHandler accept;private void button1_Click(object sender,EventArgs e)if(accept!=nul

29、l)accept(this,EventArgs.Empty);/当窗体触发事件,传递自身引用,补充:窗体间值的传递,6.通过事件(续)在窗体Form1中Form2 f2=new Form2();f2.accept+=new EventHandler(f2_accept);f2.Show();void f2_accept(object sender,EventArgs e)/事件的接收者通过一个简单的类型转换得到Form2的引用 Form2 f2=(Form2)sender;/接收到Form2的textBox1.Text this.textBox1.Text=f2.Form2Value;,补充:

30、窗体间值的传递,6.2 控件共有的基本操作,控件和组件相同点:均指可重复使用并且可以和其他对象进行交互的对象。区别:在于控件提供了用户界面功能,而组件不提供用户界面。每个控件都是一个组件,但只有提供用户界面功能的组件才称为控件。,6.2.1 控件常用属性和基本操作,1.常用基本属性1)(Name):指定控件的名称,它是控件在当前应用程序中的唯一标识,代码通过该属性来访问控件2)Enabled:决定控件是否可用,取值为true时可用,取值为false时不可用3)Anchor属性:保持控件与边框的距离不变4)Dock属性:让控件始终紧靠边框P115,6.2.1 控件中常用的属性和方法,2.控件透明

31、处理将窗体中控件的背景色设置为“Transparent”,则该控件相对于其父容器是透明的。(1)Label(2)Button【例6-5】将图像和文字叠加在同一幅背景图上,让其看起来像是一幅图。,未设置BackColor属性时的设计界面 设置BackColor属性后的界面效果,6.2.1 控件中常用的属性和方法,3控件的对齐方式和显示顺序(1)当控件的【AutoSize】属性为“False”时,利用控件的【Size】属性可以精确控制控件(2)多个控件,可以按住键同时选中多个控件,然后利用“布局”快捷工具栏中的快捷方式可以快速让各控件对齐。,4控件的焦点顺序调整焦点(Focus)是指当前处于活动状

32、态的窗体或控件。(1)利用布局工具栏中的“键顺序”按钮,可以在设计界面下调整焦点顺序。(2)如果希望在代码中让焦点在运行开始就处于某个控件上,在窗体的Shown事件中调用Focus方法来实现。textBox1.Focus();,6.2.1 控件中常用的属性和方法,Tab键顺序是在按Tab键时,焦点在控件之间移动的顺序。选择:窗体设计界面下,“视图”“Tab键顺序”查看各控件的TabIndex属性值可以顺序单击各控件改变其Tab顺序,6.2.1 控件中常用的属性和方法,控件的Tab键顺序决定了用户使用Tab键切换时的顺序。默认情况下,控件的Tab键顺序就是控件添加到窗体的中的顺序。选择“视图|T

33、ab键顺序”命令把窗体设计器切换到Tab键顺序选择模式,再次选择该命令可以回到设计模式。在Tab顺序选择模式中,可以单击各个控件把它们的Tab键顺序设置成单击控件的顺序也可以通过属性窗口设置各个控件的TabIndex属性来改变Tab键顺序位于分组框中的控件的TabIndex也按照这个规则来修改。,6.2.2 控件的锚定和停靠,1Anchor属性【Anchor】属性定义控件的定位点位置。当控件锚定到某个窗体时,如果用户调整该窗体的大小,该控件将维持它与定位点位置之间的距离不变。使用Anchor属性使控件的位置相对于窗体某一边固定,改变窗体大小时,控件的位置将会随之改变而保持这个相对距离不变。使用

34、属性窗口改变Anchor属性时,单击控件周围的上下左右的某个方框使之变成深灰色,就表示控件相对于窗体这条边的距离固定,例如:如果一个TextBox控件锚定于窗体的左、右和底边缘,那么当用户调整该窗体的大小时,该TextBox控件将在水平方向上自动调整大小,以确保TextBox控件与该窗体右边和左边的距离不变。,6.2.2 控件的锚定和停靠,6.2.2 控件的锚定和停靠,2.Dock属性【Dock】属性的用途是使控件与窗体边缘对齐,即窗体停靠在某一边上。此属性指定控件在窗体中的驻留位置。【Dock】属性设置为下列值:(1)Left停靠到窗体的左侧。(2)Right停靠到窗体的右侧。(3)Top停

35、靠到窗体的顶部。(4)Bottom停靠到窗体底部。(5)Fill占据窗体中的所有剩余空间。(6)None不在任何位置停靠,它显示在由Location属性指定的位置。举例说明,6.2.3 常用的鼠标事件和键盘事件,Windows应用程序的设计是基于事件驱动的。事件:是指由系统事先设定的、能被控件识别和响应的动作。比如单击鼠标、按下某个键。事件驱动:事件驱动指程序不是完全按照代码文件中代码的排列顺序从上到下依次执行,而是根据用户操作触发相应的事件来执行对应的代码。一个控件可以响应多个事件,设计Windows应用程序的很多工作就是为各个控件编写需要的事件代码。,但是一般只需要对必要的事件编写代码。在

36、程序运行时由控件识别这些事件,然后去执行相应的代码。没有编写代码的事件是不会影响任何操作的。每一个控件都有对应的若干事件,不同的控件所具有的事件也不尽相同。鼠标事件和键盘事件是绝大多数控件都有的两大类事件。,6.2.3 常用的鼠标事件和键盘事件,6.2.3 常用的鼠标事件和键盘事件,1.鼠标事件Click 单击鼠标左键时触发MouseDoubleClick 双击鼠标左键时触发MouseEnter 鼠标进入控件可见区域时触发MouseMove 鼠标在控件区域内移动时触发MouseLeave 鼠标离开控件可见区域时触发2.键盘事件KeyDown 按下键盘上某个键时触发KeyUp 释放键盘上的按键时

37、触发KeyPress 在KeyDown之后KeyUp之前触发,非字符键不会触发该事件。,6.2.3 常用的鼠标事件和键盘事件,3.注意(1)KeyPress事件或鼠标事件处理程序没有提供对应的参数,判断键盘输入稍微有点麻烦,所以一般在KeyDown事件或者KeyUp事件中对用户按键进行处理。(2)如果希望使键盘消息在到达窗体上的任何控件之前先被窗体接收,需要将窗体的KeyPreview属性设置为true。,KeyPress事件和KeyDown、KeyUp事件,KeyPress事件事件参数类为KeyPressEventArgs,只能捕获单个字符,可区分大小写,不经常使用;参数KeyChar 按下

38、的键对应的字符;KeyDown、KeyUp事件事件参数类为KeyEventArgs,可以获取组合按键,不区分大小写,用户使用较为方便灵活;参数KeyCode 获取单个按键的键代码;参数KeyData 获取组合键(Ctrl/Shift/Alt+按键)的键代码;参数KeyValue KeyCode的整数形式;参数Modifiers 获取Ctrl、Shift、Alt 键的代码,6.2.3 常用的鼠标事件和键盘事件,【例6-6】演示鼠标和键盘事件的触发条件,触发顺序,并显示各个事件所传递的参数内容。设计界面如下:,补充例题E01:窗体与控件,窗体属性背景图片:BackgroundImage、Backg

39、roundImageLayout;窗体边框:FormBorderStyle;KeyPreview属性、StartPosition属性;小熊图片按钮其他图片PictureBox背景颜色:透明设置;滚动文字Panel+Labeltimer控件文字滚动的时间控制音乐选项CheckBox,本章综合举例1实现要点,窗体的KeyPreview属性,如果希望使键盘消息在到达窗体上的任何控件之前先被窗体接收,需要将窗体的KeyPreview属性设置为true。当窗体和窗体上的控件同时有键盘事件时若KeyPreview属性为False,则只执行控件的键盘事件;若KeyPreview属性为true,则先执行窗体的

40、键盘事件,再执行控件的键盘事件;举例:,textBox1_KeyDown事件中:label1.Text+=textBox1;,Form1_KeyDown事件中:label1.Text+=“Form;,若KeyPreview属性=false,则结果为“textBox1”;,若KeyPreview属性=true,则结果为“FormtextBox1”;,补充例题E01:事件(1/2),Form1_KeyDown事件隐藏窗体中的所有PictureBox控件;判断按键显示对应的控件,并播放音效,按F1显示所有隐藏的控件;Form1的MouseDown、MouseMove、MouseUp事件自动上移窗体、

41、选中窗体移动、定位窗体;PictureBox_MouseDown事件将引发该事件的PictureBox中的图片缩小至原来的80%;随机选择sounds中的某个音效;PictureBox_MouseUp事件将引发该事件的PictureBox中的图片恢复原来的大小;,补充例题E01:事件(2/2),PictureBox5的MouseEnter、MouseClick、MouseLeave事件更换图片、播放音效、恢复图片;PictureBox13的MouseEnter、MouseLeave事件改变鼠标的显示形状;Label1的MouseEnter、MouseLeave事件通过停止、启动timer计时,

42、暂停、恢复文字的滚动;Button1_Click事件显示MessageBox对话框;,背景音乐播放,SoundPlayer类:播放*.WAV格式的音乐文件;SoundPlayer类的常用方法Play方法:播放音乐文件;PlayLooping方法:循环播放音乐文件;Stop方法:停止播放音乐文件;点击动物时随机声音的播放Random随机数生成器Properties.Resource资源使用方法,补充例题4:“有本事就点我!”,运行效果(ClickMeExample):利用鼠标事件MouseEnter实现。,6.3.1 分组控件(Panel、GroupBox),分组控件:用于对不同的控件进行分组,

43、为其他控件提供组合容器。Panel控件GroupBox控件不同:Panel控件不能显示标题但可以有滚动条而GroupBox控件可显示标题,通过Text属性定义,但不能显示滚动条。设计时当移动单个GroupBox控件时,它包含的所有控件将一起移动。,GroupBox,把控件添加到分组框GroupBox中的方法有两个:直接从工具箱中拖动目标控件到分组框中先把需要的控件剪切到剪贴板中,然后选中分组框控件并从剪贴板中复制这些控件。也可以将它们拖放到分组框中。,分组框属性Text属性,为分组框设置标题BackColor属性,设置分组框背景颜色BackgroundImage属性,设置分组框背景图像TabS

44、top属性,分组框一般不接收焦点,它将焦点传递给其包含控件中的第一个项;可以设置这个属性来指示分组框是否接收焦点。AutoSize属性,设置分组框是否可以根据其内容调整大小。AutoSizeMode属性,获取或设置启用 AutoSize 属性时 分组框的行为方式。属性值为 AutoSizeMode枚举值:GrowAndShrink,根据内容增大或缩小;GrowOnly(默认),可以根据其内容任意增大,但不会缩小至小于它的 Size 属性值。Controls属性,分组框中包含的控件的集合。可以使用这个属性的Add,Clear等方法。P117,GroupBox,分组框控件 GroupBox,分组框

45、事件AutoSizeChanged事件,在AutoSize属性发生改变时触发。Click和DoubleClick事件。TabStopChanged事件,在TabStops属性改变时触发。KeyUp/KeyPress/KeyDowm事件,当分组框拥有焦点同时用户松开/按下某个键时触发。,面板控件 Panel,如下情况下经常使用面板控件子控件要以可见的方式分开提供不同的BackColor属性使用滚动条以允许多个控件放置在同一个有限空间。面板属性类似GroupBox的属性AutoScroll属性,设置面板滚动条是否可用,默认情况下是禁用falseBorderStyle属性,设置面板边框风格,有Non

46、e(默认),FixedSingle,Fixed3D三种。BackColor、BackgroundImage属性,6.3.2 工具提示组件(ToolTip),ToolTip组件用于在用户指向控件时显示相应的提示信息。工具提示会弹出一个长方形的小窗口,该窗口在用户将指针悬停在一个控件上时显示有关该控件用途的简短说明。该组件可与任何控件关联。属性窗口中设置提示信息在代码中利用ToolTip组件的SetToolTip方法直接设置其他控件的操作提示信息。如果将一个ToolTip控件置于窗体上,则该控件可以为多个控件所用。,6.3.2 工具提示组件(ToolTip),6.3.2 工具提示组件(ToolTi

47、p),SetToolTip 方法,它使工具提示文本与指定的控件相关联。其声明如下:public void SetToolTip(Control control,string caption)其中,参数 control 是要将工具提示文本与其关联的控件;caption 是指针位于控件上方时要显示的工具提示文本。如果想窗体中添加一个ToolTip组件,则该窗体上的其他控件会自动在属性窗口中添加一个toolTip1上的ToolTip属性,可以通过该属性设置各个控件的操作信息。,6.3.2 工具提示组件(ToolTip),6.3.3 错误提示组件(ErrorProvider),ErrorProvide

48、r组件可以对窗体或控件上的用户输入进行验证。同时它也是典型的关联型(绑定)的验证控件,用以验证并显示控件关联的数据源如DataSet中存在的错误。用MessageBox消息框,一旦用户关闭了消息框,就再也看不见错误信息。用户可能无法记忆所有的错误内容因而也就无法方便的纠正所有错误从而要多次弹出错误消息框。,ErrorProvider会记录所有的错误并能够准确定位在错误发生的窗体或控件上,显示一个红色图标,当鼠标悬停在该图标上方时还能够自动弹出ToolTip提示以显示错误内容。这样操作人员可以根据错误发生的位置以及具体内容从容的修改错误,直到这些小图标全部消失。,6.3.3 错误提示组件(Err

49、orProvider),ErrorProvider属性,ErrorProvider常规用法ErrorProvider的一种最简单使用方法就是当用户向某控件比如TextBox中输入无效数据时显示错误提示,这种情况下甚至不需要设置 DataSource,只需要设置ContainerControl属性值为当前Form并使用SetError方法进行简单编码即可,如下所示。要提示错误信息,必须在使用TextBox的Text时才会出现错误信息。【例】单击textbox1的Validating事件,并将代码改为如下内容,6.3.3 错误提示组件(ErrorProvider),protected void t

50、extBox1_Validating(object sender,System.ComponentModel.CancelEventArgs e)try int x=Int32.Parse(textBox1.Text);errorProvider1.SetError(textBox1,);catch(Exception e)errorProvider1.SetError(textBox1,Not an integer value.);,6.3.3 错误提示组件(ErrorProvider),6.3.4 定时组件(Timer),4、Timer组件:功能:主要用于设置某个时间间隔,并在每次到达设置

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号