第5章Windows应用程序Windows窗体是用于MicrosoftWindows应用程序开发的基于.NET框架的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,得以开发丰富的Windows应用程序。另外,Windows窗体可作为多层分布式解决方案中的本地用户界面。在这一章中,将有一个简单的“学生信息管理系统”的例子贯穿始终,介绍如何建立Windows应用程序,如何使用Windows窗体的常用控件,如何使用菜单、对话框,以及怎样设计多文档界面和怎样实现打印与打印预览等。5.1Windows应用程序开发步骤【例5.1】设计一个小的加法器。1.建立项目在VisualStudio2005开发环境中选择“文件”菜单,选择“新建”选项中的“项目”,如图5.1所示2.界面设计在VisualStudio2005的主界面,系统提供了一个默认的窗体。通过工具箱向其中添加各种控件来设计应用程序的界面。具体操作是,用鼠标按住工具箱需要添加的控件,然后拖放到窗体中即可。3.设置属性名称属性设置值Label1text+Label2text=button1text计算TextBox1text空TextBox2text空TextBox3text空4.编写程序代码双击button1,进入代码编辑器。编写代码如下privatevoidbutton1_Click(objectsender,EventArgse){if(textBox1.Text==string.Empty||textBox2.Text==string.Empty){MessageBox.Show(输入不完整!);return;}inta=int.Parse(textBox1.Text);intb=int.Parse(textBox2.Text);intc=a+b;textBox3.Text=c.ToString();}5.生成解决方案在“生成”菜单,单击“生成解决方案”,或者按Ctrl+Shift+B快捷键。6.程序运行与调试按Ctrl+F5快捷键,程序运行结果如图5.3所示。如果运行出错或运行结果不正确,则查找错误,修正代码后再次运行。5.2窗体及其常用属性窗体是对象,对这些对象可以定义其外观属性、行为方法以及与用户的交互的事件。通过设置窗体的属性,编写响应其事件的代码,可自定义该对象以满足应用程序的要求。与.NET框架中的所有对象一样,窗体是类的实例。用“Windows窗体设计器”创建的窗体是类,它是用来创建窗体的模板。该框架使用户可以从现有窗体继承,添加功能或修改现有行为。。1.Visible属性窗体的可见性通常由Visible属性控制。在事件中,如果希望Windows应用程序的主窗体在应用程序启动时不可见,将会发现将它的Visible属性设置为假的方法无效,因为通常启动窗体的生存期决定了应用程序的生存期,只要将应用程序的启动变为一个模块,这样就可以随意使窗体可见(和不可见),因为当“关闭”模块时,应用程序的生存期也随之结束。2.TopMost属性TopMost属性控制窗体是否为昀顶端的窗体。请注意,即使昀顶端的窗体不处于活动状态,它也会浮在其他非顶端窗体之前。在设计时要使窗体成为Windows应用程序中昀顶端的窗体,只要在“属性”窗口中将TopMost属性设置为true。3.FormBorderStyle属性当确定Windows窗体的外观时,有几种边框样式可供选择,如表5.2所示。通过更改FormBorderStyle属性,可控制和调整窗体的大小。另外,设置FormBorderStyle属性还会影响标题栏如何显示及标题栏上出现什么按钮.表5.2窗体的边框风格设置说明无没有边框或与边框相关的元素,用于启动窗体固定三维当需要三维边框效果时使用。不可调整大小,可在标题栏上包括控件菜单栏、标题栏、昀大化和昀小化按钮。用于创建相对于窗体主体凸起的边框固定对话框用于对话框。不可调整大小,可在标题栏上包括控件菜单栏、标题栏、昀大化和昀小化按钮。用于创建相对于窗体主体凹进的边框固定单线边框不可调整大小。可包括控件菜单栏、标题栏、昀大化和昀小化按钮。只能使用昀大化和昀小化按钮改变大小。用于创建单线边框固定工具窗口显示不可调整大小的窗口,其中包含“关闭”按钮和以缩小字体显示的标题栏文本。该窗体不在Windows任务栏中出现。用于工具窗口可调整大小该项为默认项,可调整大小,经常用于主窗口。可包括控件菜单栏、标题栏、昀大化和昀小化按钮。鼠标指针在任何边缘处可调整大小可调整大小的工具窗口用于工具窗口。显示可调整大小的窗口,其中包括“关闭”按钮和以缩小字体显示的标题栏文本。该窗体不在Windows任务栏中出现注意:所有上述边框样式(除“无”设置外),都在标题栏的右侧有一个“关闭”按钮。注意:所有上述边框样式(除“无”设置外),都在标题栏的右侧有一个“关闭”按钮。4.Location属性Location属性值可指定窗体在计算机屏幕上的显示位置。它以像素为单位指定窗体左上角的位置。还需要设置StartPosition属性,以指示显示区域的边界。Windows应用程序的StartPosition属性的默认设置是“WindowsDefaultLocation”,该设置通知操作系统在启动时根据当前硬件计算该窗体的昀佳位置。另一种选择是将StartPosition属性设置为Center,然后在代码中更改窗体的位置。5.3Windows常用控件控件名称控件含义控件名称控件含义Label标签ListBox列表框LinkLabel链接标签ListView列表视图Button按钮ComboBox组合框TextBox文本框StatusBar状态栏RadioButton单选按钮ToolBar工具栏CheckBox复选框GroupBox分组框PictureBox图片框Timer定时器大多数控件属性都派生于System.Windows.Forms.Control类,所以它们都有一些共同的属性,如表5.4所示。属性含义Anchor设置控件的哪个边缘锚定到其容器边缘Dock设置控件停靠到父容器的哪个边缘BackColor获取或设置控件的背景色Cursor获取或设置当鼠标指针位于控件上时显示的光标Enabled设置控件是否可以对用户交互做出响应Font设置或获取控件显示文字的字体ForeColor获取或设置控件的前景色Height获取或设置控件的高度Left获取或设置控件的左边界到容器左边界的距离Name获取或设置控件的名称Parent获取或设置控件的父容器Right获取或设置控件的右边界到容器左边界的距离Tabindex获取或设置在控件容器上控件的Tab键的顺序TabStop设置用户能否使用Tab键将焦点放到该控件上Tag获取或设置包括有关控件的数据对象Text获取或设置与此控件关联的文本Top获取或设置控件的顶部距离其容器的顶部距离Visible设置是否在运行时显示该控件Width获取或设置控件的宽度控件能对用户或应用程序的某些行为做出响应,这些行为称为事件。Control类的常见事件如表5.5所示。事件含义Click单击控件时发生DoubleClick双击控件时发生DragDrop当一个对象被拖到控件上,用户释放鼠标时发生DragEnter当被拖动的对象进入控件的边界时发生DragLeave当被拖动的对象离开控件的边界时发生DragOver当被拖动的对象在控件的范围时发生KeyDown在控件有焦点的情况下,按下任一个键时发生,在KeyPress前发生KeyPress在控件有焦点的情况下,按下任一个键时发生,在KeyUp前发生KeyUp在控件有焦点的情况下释放键时发生GetFocus在控件接收焦点时发生LostFocus在控件失去焦点时发生MouseDown当鼠标指针位于控件上,并按下鼠标键时发生MouseMove当鼠标指针移到控件上时发生MouseUp当鼠标指针位于控件上,并释放鼠标键时发生Paint重绘控件时发生Validated在控件完成验证时发生Validating在控件正在验证时发生Resize在调整控件大小时发生5.3.2标签与按钮1.标签Windows窗体的Label控件用于显示用户不能编辑的文本或图像。标签中显示的标题包含在Text属性中,文本在标签内的对齐方式通过Alignment属性设置。Windows窗体的LinkLabel控件和Label控件有许多共同之处,凡是使用Label控件的地方,都可以使用LinkLabel控件。除了具有Label控件的所有属性、方法和事件以外,LinkLabel控件还有用于超级链接和链接颜色的属性。LinkArea属性设置激活链接的文本区域。LinkColor、VisitedLinkColor和ActiveLinkColor属性设置链接的颜色。单击链接后,通过更改链接的颜色来指示该链接已被访问。LinkClicked事件确定选定链接文本后将要进行的操作。【例5.2】使用Label和LinkLabel控件制作“学生信息管理系统”的欢迎界面。在项目StudentMIS中新建窗体,命名为Welcome,从工具箱中拖曳2个Label和1个LinkLabel控件到窗体上名称属性设置值Welcometext欢迎使用Label1text学生信息管理系统Label2text南京师范大学LinkLabel1text管理登录表5.6控件属性在LinkClicked事件处理程序中,调用Show方法以打开登录窗体,并隐藏自身,同时将LinkVisited属性设置为true。privatevoidlinkLabel1_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse){linkLabel1.LinkVisited=true;LoginloginForm=newLogin();loginForm.Show();this.Hide();}2.按钮Windows窗体的Button控件允许用户的单击操作。每当用户单击按钮时,即调用Click事件处理程序。Click事件代码执行所需要的操作。按钮上显示的文本包含在Text属性中。文本的外观受Font属性和TextAlign属性控制。按钮(Button)控件还可以使用Image和ImageList属性显示图像。在任何Windows窗体上都可以指定某个Button控件为“接受”按钮(也称“默认”按钮)。每当用户按Enter键时,即单击“默认”按钮,而不管当前窗体上其他哪个控件具有焦点。在设计器中指定“接受”按钮的方法是:选择按钮所驻留的窗体,在“属性”窗口中将窗体的AcceptButton属性设置为Button控件的名称。也可以用编程方式指定“接受”按钮,在代码中将窗体的AcceptButton属性设置为适当的Button控件。例如:privatevoidSetDefault(ButtonmyDefaultBtn){this.AcceptButton=myDefaultBtn;}在任何Windows窗体上都可以指定某个Button控件为“取消”按钮。每当用户按Esc键时,即单击“取消“按钮,而不管窗体上其他哪个控件具有焦点。通常设计这样的按钮,允许用户快速退出操作而无须执行任何动作.在设计器中指定“取消”按钮的方法是:选择按钮所驻留的窗体后,在“属性”窗口中将窗体的CancelButton属性设置为Button控件的名称。也可以用编程方式指定“取消”按钮,将窗体的CancelButton属性设置为适当的Button控件。例如:privatevoidSetCancelButton(ButtonmyCancelBtn){this.CancelButton=myCancelBtn;}Button控件昀常用的事件是Click,还有MouseEnter、MouseDown和MouseUp事件等。Button控件没有双击事件,如果用户尝试双击B