1第6章窗体、控件和组件6.1窗体与对话框6.2控件共有的基本操作6.3容器类控件和组件6.4文本操作类控件6.5选择操作类控件6.6图像操作类控件和组件6.7菜单、工具栏与状态栏6.8视图操作类控件6.9其他常用控件26.1窗体与对话框Windows窗体已经对Windows开发产生了影响。Windows客户应用程序开发起来非常快速和高效,它们可以为用户提供丰富的体验。创建新Windows窗体(也称为窗口或对话框)非常方便,采用把控件从工具箱拖放到窗体设计器上的方式。3Program.cs代码:4分析:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1//命名空间{staticclassProgram//Program类{[STAThread]//指示应用程序的默认线程模型是单线程单元(STA)。由于很多COM在.NET环境下如果使用多线程的话,会导致引用的COM不能正常运行,而如果不声明程序为STAThread的话,.NET就会自动使用多线程来提高效率,这样就会导致不可预知的后果。staticvoidMain()//应用程序的主入口点{Application.EnableVisualStyles();//为应用程序启用可视样式Application.SetCompatibleTextRenderingDefault(false);//设置控件显示文本的默认方式:使用GDI方式显示文本Application.Run(newForm1());}}}5Application类:提供static方法和属性以管理应用程序,例如启动和停止应用程序、处理Windows消息的方法和获取应用程序信息的属性。主要方法:Run在当前线程上启动应用程序消息循环,并可以选择使某窗体可见。Exit或ExitThread停止消息循环。DoEvents在您的程序处于某个循环中时处理消息。publicstaticvoidRun(FormmainForm)在当前线程上开始运行标准应用程序消息循环,并使指定窗体可见。publicstaticvoidExit()通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口。publicstaticvoidDoEvents()处理当前在消息队列中的所有Windows消息。6Form1的初始代码7分析:WinForm(Form1类)组成:界面:Form1.Designer.cs:是VS对窗体的设计、生成代码,VS自动生成的文本文件,里面有窗体的设计、生成代码,最好不要来这里写代码。Code:Form1.cs:是用户对窗体的操作代码,里面通常有窗体事件代码。在这里写窗体的操作代码。8usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form//partial是局部类型{publicForm1(){InitializeComponent();//在Form1.Designer.cs中}}}96.1.2窗体的创建、显示与隐藏1、如何在代码中打开一个新窗体Form2fm=newForm2();fm.Show();//非模式显示fm.ShowDialog();//模式显示2、如何在代码中关闭一个窗体用法1:fm.Close();用法2:this.Close();用法3:Application.OpenForms[Form1].Close();Application.OpenForms:已“打开”的窗体的集合3、如何隐藏一个打开的窗体(1)隐藏当前窗体:this.Hide();(2)隐藏特定窗体:Application.OpenForms[Form1].Hide();4、如何重新显示隐藏的窗体(1)显示当前窗体:this.Show();(2)显示特定窗体:Application.OpenForms[Form1].Show();106.1.2窗体的创建、显示与隐藏【例6-1】演示窗体的基本用法以及如何显示和关闭窗体。部分运行效果如图:116.1.3窗体常用的属性常用属性:Name:获取或设置窗体的名称,代码中通过该属性来访问窗体。BackColor:获取或设置窗体的背景色。ForeColor:获取或设置窗体上文本的前景色。Location:获取或设置以屏幕坐标表示的代表窗体左上角的坐标位置。Size:指定窗体的高度和宽度。Text:设置窗体标题栏上所要显示的文本。12窗体常用的属性和外观控制StartPostion:获取或设置运行时窗体的起始位置,一般在构造函数中设置此属性。例如:this.StartPosition=FormStartPosition.Manual;this.Location=newPoint(screenX,screenY);ControlBox:通过设置窗体的【ControlBox】属性为“True”或者“False”,可以控制是否显示最大化、最小化以及关闭按钮。FormBorderStyle:属性控制窗体的边框样式。13常用方法Close():窗体关闭,释放所有资源。如窗体为主窗体,执行此方法,程序结束。Hide():隐藏窗体,但不破坏窗体,也不释放资源,可用方法Show()重新打开。Show():显示窗体。Form类常用事件當WindowsForm啟動時,會以下列順序引發主要表單的启动事件:Form..::.LoadForm..::.ActivatedForm..::.Shown當WindowsForm關閉時,會以下列順序引發主要表單的關閉事件:Form..::.ClosingForm..::.FormClosingForm..::.ClosedForm..::.FormClosedForm..::.Deactivate146.1.4窗体位置及外观控制【例6-2】演示如何控制窗体的显示位置以及如何控制窗体的外观形状。设计视图如下:运行效果如下:156.1.5单文档窗体和多文档窗体Windows的窗体分为单文档窗体和多文档窗体。多文档窗体(Multi-DocumentInterface,MDI)是指在一个主窗体中可以包含一个或多个子窗体的窗体。主窗体称为MDI父窗体,子窗体称为MDI子窗体。MDI父窗体:.IsMdiContainer属性为true的formMDI子窗体:.MdiParent属性为MDI父窗体名称步骤:(1)首先要设定主窗体是一个MDI窗体的容器,语句如下:this.IsMdiContainer=true;(2)在主窗体上面新建一个MDI窗体。关键是要设定此MDI窗体的父窗体。FormfrmTemp=newForm();//新建一个窗体frmTemp.MdiParent=this;//定义此窗体的父窗体,从而此窗体成为一个MDI窗体frmTemp.Show();//把此MDI窗体显示出来166.1.5单文档窗体和多文档窗体【例6-3】演示MDI窗体的基本用法以及如何显示和关闭子窗体。176.1.6对话框对话框用于与用户交互和检索信息。对话框分为标准对话框和自定义对话框。1.MessageBox对话框调用MessageBox类的静态Show方法来显示消息对话框。返回值是MessageBoxResult枚举的值,其中每个值都等同于消息对话框可以显示的按钮之一。Show方法提供了多种重载形式,常用的重载形式有:publicstaticDialogResultShow(stringtext)publicstaticDialogResultShow(stringtext,stringcaption)publicstaticDialogResultShow(stringtext,stringcaption,MessageBoxButtonsbuttons,MessageBoxIconicon)186.1.6对话框其中:Text:在消息框中显示的文本。caption:在消息框的标题栏中显示的文本。buttons:MessageBoxButtons枚举值之一,指定在消息框中显示哪些按钮。枚举值有OK、OKCancel、YesNoCancel和YesNo。icon:MessageBoxIcon枚举值之一,指定在消息框中显示哪个图标。枚举值有None(不显示图标)、Hand(手形)、Question(问号)、Exclamation(感叹号)、Asterisk(星号)、Stop(停止)、Error(错误)、Warning(警告)和Information(信息)。Show方法的返回值:是DialogResult枚举值之一。DialogResult枚举值有:None(消息框未返回值)、OK、Cancel、Yes和No。19例如:DialogResultdr1=MessageBox.Show(提示对话框,我的对话框,MessageBoxButtons.YesNo,MessageBoxIcon.Information,MessageBoxDefaultButton.Button1,MessageBoxOptions.DefaultDesktopOnly);if(dr1==DialogResult.Yes)MessageBox.Show(你单击了是);elseMessageBox.Show(你单击了否);}206.1.6对话框216.1.6对话框2.ColorDialog:提供颜色选择。方法:ShowDialog()返回值:DialogResult类型3.FontDialog:提供字体选择。方法:ShowDialog()返回值:DialogResult类型用法如下:ColorDialogcolorDlg=newColorDialog();FontDialogfontDlg=newFontDialog();textBox1.Text=武汉理工大学;if(colorDlg.ShowDialog()==DialogResult.OK){textBox1.ForeColor=colorDlg.Color;}if(fontDlg.ShowDialog()==DialogResult.OK){textBox1.Font=fontDlg.Font;}226.1.6对话框自定义窗体对话框的设计方法与设计一般窗体基本相同,不同之处是还要对自定义窗体对话框作如下处理:①将窗体的【FormBorderStyle】属性更改为“FixedDialog”。②将窗体的【MaximizeBox】属性、【MinimizeBox】属性和【ControlBox】属性设置为“False”。③在窗体上放一个“确定”按钮,一个“取消”按钮。然后将窗体的【AcceptButton】属性设置为“确定”按钮,【CancelButton】属性设置为“取消”按钮。④在按钮事件中,设置DialogResult类型的返回值,以便让对话框隐藏起来:this.DialogResult=DialogResult.OK;this.DialogResult=DialogResult.Cancel;236.1.6对话框【例6-4】自定义窗体对话框的用法。设计视图如下:运行效果如下:246.2控件共有的基本操作控件是带有可视化表示形式的组件。Sys