(精品)第六讲 窗体、控件和组件2.ppt
第六讲第六讲窗体、控件和组件2回顾 q属性通过使用访问器读写类中的字段,对字段进行保护。q属性分为以下三种不同的类型:q读/写属性q只读属性q只写属性q可以在类中定义索引器,允许使用下标对该类对象中的数据进行访问q索引器必须总是命名为 this,因为对它们的访问是通过其所属的对象进行的q委托包含对方法而不是方法名称的引用qC#中的事件允许一个对象将发生的事件或修改通知其他对象第6章 窗体、控件和组件6.1 窗体与对话框6.2 控件共有的基本操作6.3 容器类控件和组件6.4 文本操作类控件6.5 选择操作类控件6.6 图像操作类控件和组件6.7 菜单、工具栏与状态栏6.8 视图操作类控件6.9 其他常用控件4目标q理解 Windows 窗体q使用基本控件如标签、文本、按钮、列表框和组合框q掌握窗体的常用属性和方法5简介 3-1GUI界面控件6简介 3-2 各种控件属性放置控件的区域7简介 3-3WinForms应用程序可能存在多个窗体,用于获取用户输入的数据和向用户显示数据System.Windows.Forms 简单而强大 改善了接口和基类 IntelliSense 新的管理数据提供程序 安全 灵活的控件 通晓数据 向导8创建 WinForms应用程序 6-1“开始”“程序”“Microsoft Visual Studio.NET 2003”“Microsoft Visual Studio.NET 2003”9创建 WinForms应用程序 6-2设计窗口 10创建 WinForms应用程序 6-3using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;namespace SampleProject/Form1 的摘要说明。/public class Form1:System.Windows.Forms.Form/必需的设计器变量./提供了大量绘图工具的访问权限基础核心命名空间ArrayList、BitArray、Hashtable、Stack、StringCollection 和 StringTable 类 大量窗体和控件从 System.Windows.Forms.Form 派生Visual Studio.NET 生成的代码11创建 WinForms应用程序 6-4private System.ComponentModel.Container components=null;public Form1()/Windows 窗体设计器支持所必需的/InitializeComponent();/TODO:在 InitializeComponent 调用之后添加任何构造函数代码/构造函数调用 InitializeComponent()方法private void InitializeComponent()ponents=new System.ComponentModel.Container();this.Size=new System.Drawing.Size(300,300);this.Text=Form1;项目的容器12创建 WinForms应用程序 6-5/清理所有正在使用的资源。/protected override void Dispose(bool disposing)if(disposing)if(components!=null)components.Dispose();base.Dispose(disposing);释放系统资源13创建 WinForms应用程序 6-6STAThreadstatic void Main()Application.Run(new Form1();程序的主入口点 14WinForms 中的常用控件 2-1可视化界面组件统称为控件System.Windows.Forms.Control System.Windows.FormsControlButtonBaseButtonCheckBoxLabelListControlComboBoxListBoxTextBoxBaseTextBoxRadioButton6.1 窗体与对话框1、窗体应用程序的启动和停止使用Application类提供的静态方法来启动、停止应用程序。Application类提供的方法:qRun方法:用于在当前线程上启动应用程序消息循环,并显示窗体。qExit方法:用于停止消息循环。qDoEvents方法:用于在程序处于某个循环中时处理消息。6.1.2 窗体的创建、显示与隐藏1、如何在代码中打开一个新窗体 Form2 fm=new Form2();fm.Show();/或者fm.ShowDialog();2、如何在代码中关闭一个窗体 用法1:fm.Close();用法2:this.Close();用法3:Application.OpenFormsForm1.Close();3、如何隐藏一个打开的窗体 (1)隐藏当前窗体:this.Hide();(2)隐藏其它窗体:Application.OpenFormsForm1.Hide();4、如何重新显示隐藏的窗体 (1)显示当前窗体:this.Show();(2)显示其它窗体:Application.OpenFormsForm1.Show();17窗体容器简介 2-1 图标系统按钮System.Windows.FormsControlScrollableControlContainerControlForm标题栏控件18窗体容器简介 2-2l SDI 单文档界面l MDI 多文档界面l 模式窗口19显示另一窗体被调用的窗体类 窗体实例=new 被调用的窗体类();窗体实例.Show();private void cmdShow_Click(object sender,System.EventArgs e)frmA A=new frmA();A.Show();6.1.2 窗体的创建、显示与隐藏【例6-1】演示窗体的基本用法以及如何显示和关闭窗体。部分运行效果如图:6.1.3 窗体常用的属性常用属性:qName:获取或设置窗体的名称,代码中通过该属性来访问窗体。qBackColor:获取或设置窗体的背景色。qForeColor:获取或设置窗体上文本的前景色。qLocation:获取或设置以屏幕坐标表示的代表窗体左上角的坐标位置。qSize:指定窗体的高度和宽度。qText:设置控件上所要显示的文本,如标签、按钮和复选框等控件上的文字。22窗体的常用方法和事件 方法方法ActivateLayoutMdiShowDialog事件事件ActivatedClosedClosingLoad窗体常用的属性和外观控制StartPostion:获取或设置运行时窗体的起始位置,一般在构造函数中设置此属性。例如:this.StartPosition=FormStartPosition.Manual;this.Location=new Point(screenX,screenY);通过设置窗体的【ControlBox】属性为“True”或者“False”,可以控制是否显示最大化、最小化以及关闭按钮。除此之外,还可以通过设置窗体的【FormBorderStyle】属性控制窗体的边框样式。6.1.4 窗体位置及外观控制【例6-2】演示如何控制窗体的显示位置以及如何控制窗体的外观形状。设计视图如下:运行效果如下:运行效果如下:6.1.5 单文档窗体和多文档窗体Windows的窗体分为单文档窗体和多文档窗体。多文档窗体(Multi-Document Interface,MDI)是指在一个主窗体中可以包含一个或多个子窗体的窗体,主窗体称为MDI父窗体,子窗体称为MDI子窗体。6.1.5 单文档窗体和多文档窗体【例6-3】演示MDI窗体的基本用法以及如何显示和关闭子窗体。6.1.6 对话框q对话框用于与用户交互和检索信息。q对话框分为标准对话框和自定义对话框。1MessageBox对话框 调用MessageBox类的静态Show方法来显示消息对话框。返回值是MessageBoxResult枚举的值,其中每个值都等同于消息对话框可以显示的按钮之一。Show方法提供了多种重载形式,常用的重载形式有:qpublic static DialogResult Show(string text)qpublic static DialogResult Show(string text,string caption)qpublic static DialogResult Show(qstring text,string caption,MessageBoxButtons buttons,MessageBoxIcon icon)6.1.6 对话框qText:在消息框中显示的文本。qcaption:在消息框的标题栏中显示的文本。qbuttons:MessageBoxButtons枚举值之一,指定在消息框中显示哪些按钮。枚举值有OK、OKCancel、YesNoCancel和YesNo。qicon:MessageBoxIcon枚举值之一,指定在消息框中显示哪个图标。枚举值有None(不显示图标)、Hand(手形)、Question(问号)、Exclamation(感叹号)、Asterisk(星号)、Stop(停止)、Error(错误)、Warning(警告)和Information(信息)。qShow方法的返回值是DialogResult枚举值之一。DialogResult枚举值有:None(消息框未返回值)、OK、Cancel、Yes和No。通用对话框qOpenFileDialogqSaveFileDialogqPrintDialogqFontDialogqColorDialog6.1.6 对话框6.1.6 对话框2.ColorDialog:提供颜色选择。方法:ShowDialog()返回值:DialogResult类型3.FontDialog:提供字体选择。方法:ShowDialog()返回值:DialogResult类型用法如下:ColorDialog colorDlg=new ColorDialog();if(colorDlg.ShowDialog()=DialogResult.OK)textBox1.ForeColor=colorDlg.Color;6.1.6 对话框q自定义窗体对话框的设计方法与设计一般窗体基本相同,不同之处是还要对自定义窗体对话框作如下处理:q将窗体的【FormBorderStyle】属性更改为“FixedDialog”。q将窗体的【MaximizeBox】属性、【MinimizeBox】属性和【ControlBox】属性设置为“False”。q在窗体上放一个“确定”按钮,一个“取消”按钮。然后将窗体的【AcceptButton】属性设置为“确定”按钮,【CancelButton】属性设置为“取消”按钮。q在按钮事件中,设置DialogResult类型的返回值,以便让对话框隐藏起来。6.1.6 对话框【例6-4】自定义窗体对话框的用法。设计视图如下:运行效果如下:运行效果如下:6.2 控件共有的基本操作6.2.1 控件中常用的属性和方法1.常用基本属性 除了书上讲的属性外,注意以下属性的用法:1)(Name):指定控件的名称,它是控件在当前应用程序中的唯一标识,代码通过该属性来访问控件2)Enabled:决定控件是否可用,取值为true时可用,取值为false时不可用3)Anchor属性:保持控件与边框的距离不变4)Dock属性:让控件始终紧靠边框6.2.1 控件中常用的属性和方法2.将窗体中控件的背景色设置为“Transparent”,则该控件相对于其父容器是透明的。【例6-5】将图像和文字叠加在同一幅背景图上,让其看起来像是一幅图。未设置未设置BackColor属性时的设计界面属性时的设计界面 设置设置BackColor属性后的界面效果属性后的界面效果6.2.1 控件中常用的属性和方法3.按住键同时选中多个控件,然后利用“布局”快捷工具栏中的快捷方式可以快速让各控件对齐。4.利用布局工具栏中的“键顺序”按钮,可以在设计界面下调整焦点顺序。6.2.2 控件的锚定和停靠1Anchor属性【Anchor】属性定义控件的定位点位置。当控件锚定到某个窗体时,如果用户调整该窗体的大小,该控件将维持它与定位点位置之间的距离不变。2.Dock属性【Dock】属性的用途是使控件与窗体边缘对齐。此属性指定控件在窗体中的驻留位置。【Dock】属性设置为下列值:qLeft停靠到窗体的左侧。qRight停靠到窗体的右侧。qTop停靠到窗体的顶部。qBottom停靠到窗体底部。qFill占据窗体中的所有剩余空间。qNone不在任何位置停靠,它显示在由Location属性指定的位置。6.2.3 常用的鼠标事件和键盘事件1.鼠标事件qClick 单击鼠标左键时触发qMouseDoubleClick 双击鼠标左键时触发qMouseEnter 鼠标进入控件可见区域时触发qMouseMove 鼠标在控件区域内移动时触发qMouseLeave 鼠标离开控件可见区域时触发2.键盘事件qKeyDown 按下键盘上某个键时触发qKeyUp 释放键盘上的按键时触发qKeyPress 在KeyDown之后KeyUp之前触发,非字符键不会触发该事件。6.2.3 常用的鼠标事件和键盘事件【例6-6】演示鼠标和键盘事件的触发条件,触发顺序,并显示各个事件所传递的参数内容。设计界面如下:40WinForms 中的常用控件 2-2 标签按钮组合框列表框文本框41标签属性说明Text该属性用于设置或获取与该控件关联的文本方法说明 Hide隐藏控件,调用该方法时,即使 Visible 属性设置为 True,控件也不可见 Show 相当于将控件的 Visible 属性设置为 True 并显示控件事件说明 Click用户单击控件时将发生该事件TextBox属性/方法qTextBox 控件允许用户在应用程序中输入文本。此控件具有标准 Windows 文本框控件所没有的附加功能,包括多行编辑和密码字符屏蔽。q可以使用 Multiline 和 ScrollBars 属性,从而能够显示或输入多行文本。q通过将 MaxLength 属性设置为一个特定的字符数,可以限制输入到 TextBox 控件中的文本数量。q使用 PasswordChar 属性屏蔽在控件的单行版本中输入的字符。43文本框属性说明MaxLength 可在文本框中输入的最大字符数 Multiline 表示是否可在文本框中输入多行文本 Passwordchar 机密和敏感数据,密码输入字符 ReadOnly 文本框中的文本为只读Text 检索在控件中输入的文本方法说明 Clear删除现有的所有文本 事件说明KeyPress用户按一个键结束时将发生该事件 44按钮属性说明Enabled确定是否可以启用或禁用该控件方法说明PerformClick Button 控件的 Click 事件 事件说明Click单击按钮时将触发该事件45列表框属性属性ItemsSelectionMode SelectedIndex SelectedItemSelectedItems Text 方法方法ClearSelected事件事件SelectedIndexChanged 46使用列表框private void frmUserAdd_Load(object sender,System.EventArgs e)this.lstCurrDeptName.Items.Add(软件部);this.lstCurrDeptName.Items.Add(硬件部);this.lstCurrDeptName.Items.Add(财务部);this.lstCurrDeptName.Items.Add(人事部);private void cmdOK_Click(object sender,System.EventArgs e)/注意SelectedIndex的值,第一个应该为0if(this.lstCurrDeptName.SelectedIndex=0)MessageBox.Show(this.lstCurrDeptName.Text+已经选择上.,当前选择的值);47组合框属性说明DropDownStyle ComboBox 控件的样式MaxDropDownItems 下拉区显示的最大项目数方法说明Select在 ComboBox 控件上选定指定范围的文本48使用组合框private void frmUserAdd_Load(object sender,System.EventArgs e)this.cboDesig.Items.Add(总裁);this.cboDesig.Items.Add(副总裁);this.cboDesig.Items.Add(首席执行官);this.cboDesig.Items.Add(经理);/默认的选择是产品部this.cboDesig.SelectedIndex=1;private void cboDesig_SelectedIndexChanged(object sender,System.EventArgs e)MessageBox.Show(选择的是第“+(this.cboDesig.SelectedIndex+1).ToString(),选择的信息);MessageBox.Show(选择的职务是“+this.cboDesig.Text,选择的信息);49消息框窗口 2-1MessageBox.Show(“消息文本);消息框用于显示消息Abort,Cancel,Ignore,No,None,Ok,Retry 和 Yes if(MessageBox.Show(“保存文件”,“保存,MessageBoxButtons.YesNo,MessageBoxIcon.Information,MessageBoxDefaultButton.Button1)=DialogResult.Yes)/保存文件所用的代码/保存后的 MessageBox50消息框窗口 2-2重载方法重载方法Show(string text);Show(string text,string caption);Show(string text,string caption,MessageBoxButtons buttons);Show(string text,string caption,MessageBoxButtons buttons,MessageBoxIcon icon);51应用程序示例 3-1 解决方案资源管理器属性窗口工具箱52应用程序示例 3-2private void btnAdd_Click(object sender,System.EventArgs e)private void btnAdd_Click(object sender,System.EventArgs e)this.txtEmpName.Enabled=true;this.txtAddress.Enabled=true;this.cboDesignation.Enabled=true;this.lstCurrDeptName.Enabled=true;private void btnCancel_Click(object sender,System.EventArgs e)this.txtEmpName.Text=;this.txtAddress.Text=;this.cboDesignation.Text=“经理;private void btnExit_Click(object sender,System.EventArgs e)string str=;for(int ctr=0;ctr oldValue)grpGeneral.Top=grpGeneral.Top-(int)(vScrollMultiplier*vAbsPos);picLogo.Top=picLogo.Top-(int)(vScrollMultiplier*vAbsPos);grpGender.Top=grpGender.Top-(int)(vScrollMultiplier*vAbsPos);应用程序示例 9-7检查滚动方向96应用程序示例 9-8btnNext.Top=btnNext.Top-(int)(vScrollMultiplier*vAbsPos);elseif(vsbPersonal.Value oldValue)grpGeneral.Top=grpGeneral.Top+(int)(vScrollMultiplier*vAbsPos);picLogo.Top=picLogo.Top+(int)(vScrollMultiplier*vAbsPos);grpGender.Top=grpGender.Top+(int)(vScrollMultiplier*vAbsPos);btnNext.Top=btnNext.Top+(int)(vScrollMultiplier*vAbsPos);oldValue=vsbPersonal.Value;检查滚动方向(续)97应用程序示例 9-9 q编写以下自定义方法以便计算垂直滚动量private void SetVerticalScrollMultiplier(Control ctrl)float hsb=(float)(vsbPersonal.Height-ctrl.Height);float ticks=(float)(vsbPersonal.Maximum-vsbPersonal.Minimum);vScrollMultiplier=hsb/ticks;6.7 菜单与工具栏6.7.1 MenuStrip控件MenuStrip控件用于设计菜单。菜单的组成:6.7.1 MenuStrip控件qMenuStrip控件的常用属性 (1)Dock:指示菜单栏在窗体中停靠的位置,默认值为Top。(2)Items:菜单栏上显示的各菜单项。qMenuItem菜单项的常用属性(1)DisplayStyle:菜单项上的显示样式。(2)Image:指定在该菜单项上显示的图标。(在C:Program FilesMicrosoft Visual Studio 8Common7VS2005ImageLibrary下有一个.zip文件,内有各种动画文件、图像文件和图标文件,例如展开后在目录bitmapscommandspngformat下有打开、保存等图像。)(3)ShortcutKeys:快捷键。qMenuItem菜单项的常用事件Click事件6.7.2 ContextMenuStrip控件q用于制作右键快捷菜单q使用该控件的关键是将需要显示快捷菜单的控件的ContextMenuStrip属性设置为添加的ContextMenuStrip控件对象。q除了是右键弹出外,其他用法与MenuStrip相同。6.7.3 ToolStrip控件1.ToolStrip控件的作用是为Windows应用程序添加工具栏。工具栏一般是由多个按钮、标签等排列组成,通过这些项可以快速地执行程序提供的一些常用命令,比使用菜单选择更加方便快捷。2.ToolStrip控件的常用属性和事件与MenuStrip控件基本相同,工具栏上各项的属性和事件与MenuStrip控件中菜单项基本相同。6.7.4 StatusStripqStatusStrip控件的作用是向窗体中添加状态栏,状态栏一般由文本提示信息组成。qStatusStrip控件一般由ToolStripStatusLabel对象组成,每个这样的对象都可以显示文本、图标或者同时显示文本和图像。6.7.4 StatusStrip【例6-16】演示菜单与工具栏相关控件的用法。设计界面设计界面 运行界面运行界面6.8 视图类控件6.8.1 列表视图控件(ListView)qListView(列表视图)控件用列表的形式显示一组数据,每项数据都是一个ListItem类型的对象,称之为项,同时每个项还可能会有多个描述的子项。q一般使用ListView来显示分类查询及其详细信息。q常见属性:表6-17。6.8.1 列表视图控件(ListView)【例6-17】演示ListView控件的用法。设计界面设计界面 运行界面运行界面6.8.2 TreeView控件q常用属性uNodes:TreeView控件的节点集合uSelectedNode:当前选定的树节点uImageIndex:获取或设置默认的图像列表的索引值uSelectedImageIndex:节点选定时显示的图像列表的索引值q举例说明使用方法q设计模式下编辑树节点q代码模式下编辑树节点6.8.2 TreeView控件【例6-18】演示TreeView控件的用法。设计界面如下:6.9其他常用控件1、选项卡控件(TabControl)TabControl控件用于创建带有多个选项卡(TabPages)的窗口,每个选项卡都相当于一个对话窗口容器,可以在其中独立地存放其他控件对象。常用属性:uImageList属性:获取或设置当前TabControl控件中的各个标签页使用的图标集合。uMultiLine属性:获取或设置是否可以创建多行选项卡。uTabPages属性:获取该选项卡控件中选项卡页的集合。6.9.1 选项卡控件(TabControl)【例6-19】演示TabControl控件的用法。设计界面设计界面 运行界面运行界面6.9.2 面板复合控件2、面板复合控件(SplitContainer)SplitContainer控件是由两个Panel面板和一个Split拆分条组成的复合体,两个Panel之间的拆分条可以拖动。6.9.2 面板复合控件【例6-20】演示SplitContainer控件的基本用法。运行效果如下:6.9.3 任务栏图标组件(NotifyIcon)3、任务栏图标组件(NotifyIcon)NotifyIcon组件主要用于显示通知区域中的图标。NotifyIcon是一个比较特殊的组件,只有运行时才能显示。常用属性:【Icon】属性设置出现在状态区域的图标。【Visible】属性控制是否让图标显示出来。【Text】属性来指定将鼠标指针放置在图标上时显示的提示信息。6.9.3 任务栏图标组件(NotifyIcon)【例6-21】演示NotifyIcon控件的基本用法。运行效果:运行效果:设计效果:设计效果:114总结qWinForms可用于 Windows 窗体应用程序开发qWindows 窗体控件是从 System.Windows.Forms.Control 类派生的类q标签控件用于显示用户不能编辑的文本或图像q按钮控件提供用户与应用程序交互的最简便方法q组合框控件是列表框控件和文本框控件的组合,用户可以键入文本,也可以从所提供的列表中选择项目q窗体提供了收集、显示和传送信息的界面,是 GUI的重要元素q消息框显示消息,用于与用户交互