第9章创建Windows窗体应用程序•从本章开始,我们将告别控制台程序,进入Windows应用程序开发。Windows程序以其可视化、易操作的特性成为了桌面应用软件开发的首选。.NETFramework提供了丰富的类库,使开发桌面应用程序变得很容易。在C#中,Windows应用程序(即WinForms)是面向对象应用技术的重要组成部分,所有的Windows应用都是基于面向对象技术构建的。通过本章,读者将学习以下内容:•创建Windows应用程序。•熟悉System.Windows.Forms命名空间中类的使用。•认识Windows窗体,熟悉窗体的属性和事件。•学会使用常用的窗体控件,包括消息框、标签、按钮、文本框等。•通过颜色选择器、图片管理器和字体编辑器三个完整实例熟练掌握窗体控件的用法。9.1认识Windows窗体应用程序•在.NET中,Windows应用程序也就是WinForms应用程序,是构建C/S应用程序的首选,也是.NET战略的核心应用之一。本节将带领读者开发第一个WinForms应用程序,并理解WinForms程序体系结构,理解.NET提供的WinForms常用命名空间。9.1.1创建第一个Windows应用程序•【本节示例参考:\源代码\chapter9\9.1.1\WinExample】9.1.2Windows编辑窗口布局•【本节示例参考:\源代码\chapter9\9.1.1\WinExample】•Windows程序开发环境如图9.4所示。Windows窗体程序开发环境跟控制台界面不一样。中间编辑区有一个可视化窗体,左边有工具箱,右边有解决方案管理器和属性窗口。属性窗口会根据编辑区选择控件的不同而改变。•VisualStudio2008IDE提供了丰富的窗口布局方式,读者可以根据自己的爱好自行定制窗口布局。选择需要布局的窗口,然后选择菜单栏“窗口”命令,可以设置不同的布局方式,如图9.5所示。9.1.3认识Windows窗体•【本节示例参考:\源代码\chapter9\9.1.1\WinExample】•熟悉了Windows窗体应用程序的创建以后,再回过头来了解一下什么是窗体。窗体程序的应用非常广泛,对于Windows操作系统用户来说,对窗体程序就更加熟悉不过了,如图9.8列举了一些Windows窗体软件界面。9.1.4用对象思考:窗体•【本节示例参考:\源代码\chapter9\9.1.4\WinExample】•System.Windows.Forms命名空间包含用于创建基于Windows的应用程序的类,以充分利用MicrosoftWindows操作系统中提供的丰富的用户界面功能。WinForms应用程序使用两个.NET框架的基本类:Form类和Application类。Form类管理应用程序的窗体和窗体上的控件,Application类管理应用程序对Windows消息的接收和传递。•窗体在WinForms中是一个由Form类创建的对象,窗体有很多有用的属性和事件,同时,窗体间可以跳转,可以传值,可以实现模式窗体。在后面的Windows开发中,控件都是承载在窗体之上的,所以,深入了解窗体的功能,会对以后的开发带来很大的帮助。创建所有用户界面都可以通过可视化编程工具完成。9.2向Windows窗体添加控件•由WinForms创建的窗体并没有什么内容,要开发丰富多彩的WinForms程序,需要添加众多的程序控件。VisualStudio自带有丰富的窗体控件,程序员也使用可以自定义的用户控件。在本节中,读者将了解.NET是怎样支持控件,并实现丰富多彩的窗体应用程序的。9.2.1Windows窗体控件概括•【本节示例参考:\源代码\chapter9\9.2.1\UserRegisterSystem】•所有Windows窗体控件都是从System.Windows.Forms.Control类派生出来的类。该类包括在System.Windows.Forms命名空间中。Control类定义控件的基类,控件是具有可视形式的组件。Control类实现向用户显示信息的类的基本功能,它通过键盘和指向装置来接受用户输入的信息,常用的控件Label、Button、ListControl以及PictureBox等类都直接或间接地派生自Control类。Control类的层次结构如图9.17所示。•Windows窗体遵循面向对象的方法,用于构建WinForms的窗体以及各种控件都以类的形式提供,添加控件的方式前面已经讲到,最简单的方式就是直接拖拽控件到窗体界面。可以调用的控件都在Windows窗体的工具箱中,如图9.18所示是一个拥有许多基本控件的窗体,在下面的章节中将详细讲解每一种控件的用法。9.2.2窗体控件命名规则•每个控件都有一个Name属性,用以在代码中惟一标示该对象。常见的控件命名方法是:控件名简写+英文描述,英文描述首字母大写。主要控件的简写对照如表9.3所示。9.2.3使用消息框(MessageBox)•【本节示例参考:\源代码\chapter9\9.2.3\MessageBoxExample】•在系统中,我们经常会遇到消息框,消息框常常用来显示消息,并提供选择按钮供用户确认信息。消息框是一个MessageBox对象。该对象的Show()方法用于提示消息框,Show()方法有20多种重载方式。下面通过一个程序实例来了解MessageBox的用法。9.2.4使用按钮(Button)•【本节示例参考:\源代码\chapter9\9.2.4\ButtonExample】•按钮(Button)在工具箱中的图标如图9.22所示,是应用程序交互的最好的方式,用户通过单击按钮来触发Click事件。按钮的主要属性有:•(1)Text:设置按钮的文本。•(2)TextAlign:设置按钮的文本对齐方式。•(3)DialogResult:单击按钮时,返回给窗体的值,如“Yes”,“No”或“Cancel”。9.2.5使用标签(Label)•【本节示例参考:\源代码\chapter9\9.2.5\LabelExample】•标签(Label)在工具箱中的图标如图9.24所示,链接标签(LinkLabel)在工具箱中的图标如图9.25所示。标签用于显示用户不能编辑的文本,如标题或提示等,Label控件也可以用于显示图像。链接标签用于显示超级链接的效果。标签的主要属性有:•(1)Text:设置标签的文本。•(2)AutoSize:设置标签是否自动大小,自动大小即根据标签文本的大小来确定标签大小。•(3)Image:设置控件上显示的图像。9.2.6使用文本框(TextBox)•【本节示例参考:\源代码\chapter9\9.2.6\TextBoxExample】•文本框(TextBox)在工具箱中的图标如图9.27所示,富文本框(RichTextBox)在工具箱中的图标如图9.28所示。文本框和富文本框用于获取用户输入或显示文本,两个控件通常用于可编辑文本。RichTextBox控件允许用户输入和编辑文本的同时提供了比普通的TextBox控件更高级的格式特征。文本框(TextBox)的主要属性有:9.3创建丰富多彩的窗体应用程序•通过WinForms可以创建各种功能的桌面应用程序,在上一节读者了解了几个常用的控件的用法,WinForms工具箱还提供了非常丰富的控件,对各个控件的编程步骤都非常相似,即添加控件、设置属性、添加事件。本节将通过几个实用的应用程序实例,向读者展示更多的控件及用法。9.3.1颜色选择器•【本节示例参考:\源代码\chapter9\9.3.1\ColorChangeApp】•本节将设计一个颜色选择器,可以通过选择单选按钮分别选择红、绿、蓝三原色,通过滚动条调整颜色的RGB值,还可以通过颜色对话框选择颜色,最后可以通过滚动条设置窗体的透明度效果。程序运行的效果如图9.31所示。现在按步骤来完成该程序的创建。9.3.2图片管理器•【本节示例参考:\源代码\chapter9\9.3.2\PictureManageApp】•设计一个图片管理器,可以打开一幅图片并在图片框中预览,然后单击“保存”按钮,将图片存储在电脑中。窗体右下角展示了一个图片轮番切换的效果。程序运行的效果如图9.32所示。现在按步骤来完成该程序的创建。9.3.3字体编辑器•【本节示例参考:\源代码\chapter9\9.3.2\FontChangeApp】•在Word等Office办公软件中,经常会通过一个字体编辑器来编辑字体,字体编辑器是一个非常通用的软件组件。下面的例子将完成一个简单的字体编辑器。效果如图9.33所示。设计一个字体编辑器,可以改变字体的大小、颜色和删除线、下划线的效果。并通过示例直观的展示在读者面前,也通过字体对话框来设置字体样式。下面按步骤来完成该程序的创建。9.4小结•本章带领读者告别了DOS界面的控制台程序,进入可视化桌面应用程序世界。从创建第一个Windows应用程序开始,到几个完整实例的学习,使读者对WinForms应用程序开发有了一个直观的认识。通过本章,我们学习了以下内容。•(1)开发WinForms有一个全新的编程环境,VisualStudio2008IDE提供了可视化的界面和丰富的窗口布局方式。•(2)System.Windows.Forms命名空间包含用于创建基于Windows的应用程序的类,WinForms应用程序使用两个.NET框架的基本类:Form类和Application类。•(3)可以通过Form类创建窗体对象。•(4)工具箱提供了丰富的控件资源,可以利用这些控件创建多彩的应用程序。本章习题•一、选择题•1.要使文本框控件能够显示多行而且能够自动换行,应设置它的()属性•A.MaxLength和Multline•B.Multline和WordWrap•C.PassWordChar和Multline•D.MaxLength和WordWrap•2.已知在某WindowsForm应用程序中,主窗口类为Form1,程序入口为静态方法From1.Main。如下所示:•则在Main方法中打开主窗口的正确代码是•A.Application.Run(newForm1());•B.Application.Open(newForm1());•C.(newForm1()).Open();•D.(newForm1()).Run();•3.WindowsForm应用程序中,要求下压按钮控件Button1有以下特性:正常情况下,该按钮是扁平的,当鼠标指针移动到它上面时,按钮升高。那么,在程序中,属性Button1.FlatStyle的值应设定为•A.System.Windows.Forms.FlatStyle.Flat•B.System.Windows.Forms.FlatStyle.Popup•C.System.Windows.Forms.FlatStyle.Standard•D.System.Windows.Forms.FlatStyle.System•二、简答题•仿照Windows操作系统自带的计算器,用WinForms创建一个计算器程序,实现加、减、乘、除功能。