前面的章节我们使用了控制台程序来阐释C#和CLR 。虽然控制台应用程序实现起来很简单,但是我们现在该把注意力转到学习C#语言最重要的目的上来了:创建Windows和Web应用程序。
早期的Windows,程序都是运行在桌面上的,几乎与世隔绝。慢慢地,开发人员发现,将程序延伸到网络上,用户界面在一台机器上,而数据库在另一台,很有益处。程序的这种责任分离就导致了两层或称客户机/服务器程序开发的出现。再后来,当开发人员开始使用Web服务器存放能够代表客户机处理数据库访问的业务对象时,三层或多层方式也就应运而生了。
当Web刚刚出现的时候,Windows程序和Web程序之间是泾渭分明的。Windows程序运行在桌面或局域网上,Web程序运行在远程服务器上,通过浏览器访问。这种区别现在随着Windows程序逐渐向Web服务延伸变得越来越模糊。许多新程序都由客户机上运行的业务逻辑、数据库服务器和远程位于Web上的第三方计算机组成。传统的桌面程序如Excel 或Outlook 现在可以无缝地集成通过Web连接获取的数据,而Web程序也可以把一些处理分布到客户端组件中去。
Windows 程序 和Web 程序之间剩下的主要区别也许在于这几点:谁拥有用户界面?程序是用浏览器显示用户界面,还是用桌面上运行的可执行文件内置的界面?
提示:即使是“谁拥有用户界面”的区别也是很模糊的,因为基于浏览器的界面可能有运行在本地的组件,而基于桌面的应用程序也会有嵌入的Web浏览器!
Web 程序优势极多,先从显而易见的说起:可以通过与服务器连接的任何浏览器访问。而且,更新在服务器上进行,无需将新的DLL(dynamic link library,动态连接库)分发给使用者。
另一方面,即使程序搬到网上没有什么好处,你也会发现,采用Web程序的方式可以更好地控制程序的外观,要不然就是可以获得更好地性能。
.NET为创建Windows程序和Web程序分别提供了一套紧密相关但又可以区分的工具。两者都是以窗体(译注1)为基础的,这有一个前提:许多程序都有要通过窗体和控件(如按钮、列表框、文本框等)与用户交互的用户界面。
创建Web程序的工具称为Web Forms ,我们将在第15章讲述。创建 Windows程序的工具就称为Windows Forms,这正是本章的主题(译注2)。
下面,我们将学习如何使用Visual Studio提供的工具创建Windows窗体。这个应用程序将使用许多前面学到的C#技术。
创建一个简单的Windows窗体
Creating a Simple Windows Form
Windows Forms 是创建Windows程序的工具。.NET框架为Windows程序开发提供了丰富的支持,其中心就是Windows Forms框架。这并不奇怪,Windows Forms从取得广泛成功的VB环境借用了窗体这一概念,从而很好地支持了快速开发。所以有人认为,C#是第一个将VB的快速开发工具与C系列语言面向对象和高性能相接合的开发环境。
使用Visual Studio设计器
Using the Visual Studio Designer
虽然可以使用任何编辑器(甚至是记事本)创建Windows程序,并从命令行编译,但是既然已经有了事半功倍的Visual Studio.NET,这样做就显得毫无意义了。
要开始开发一个新的Windows程序,首先打开Visual Studio,然后选择FileàNewà Project。在New Project窗口,创建一个新的C# Windows 应用程序,将它命名为ProgCSharp- WindowsForm,如图13-1所示。
Visual Studio会按要求创建一个Windows窗体程序,而且更好的是,还会将我们带入设计环境,如图13-2。
Design窗口显示了一个空白的Windows窗体(Form1)。还有Toolbox窗口,可以选择

图13-1:创建Windows Form程序

图13-2:设计环境
Windows图形组件和控件。如果Toolbox没有显示,可以点击“Toolbox”,或者在Visual Studio菜单中选择View Toolbox。 还可以使用快捷键Ctrl-Alt-X显示Toolbox(注1)。
显示Toolbox之后,可以直接将一个标签和一个按钮拖到窗体上,如图13-3所示。

图13-3:Windows窗体开发环境
在继续之前,我们再熟悉一下环境。Toolbox中充满了我们可以添加到Windows窗体程序的控件。在右上角,可以看到Solution Explorer,这是一个显示项目中所有文件的窗口。在右下角是Properties窗口,显示了当前选中项的所有属性。在图13-3中,选中了标签(label1),Properties窗口显示了它的属性。
可以使用Properties窗口设置各种控件的属性。例如,要在label1中添加文本,可以在其Text属性右边的方框中输入单词"Hello World"。如果想改变HelloWorld标签中文字的字体,可以点击图13-4右下角所示Font属性。(同样也可以为按钮提供文本,通过在Properties窗口中选择button1,并在其Text属性中输入"Cancel"即可。)
这些步骤每一步往往都比在代码中修改这些属性(虽然这样做肯定也是可行的)要容易。
在按需要完成窗体布局后,剩下的就是为Cancel按钮创建点击事件的处理方法了。双击Cancel按钮将生成事件处理方法,注册它,IDE将进入代码页(存放窗体源代码的页面),

图13-4:修改字体
其中可以输入事件处理逻辑,如图13-5所示。

图13-5:双击Cancel按钮后
光标已经就位,只需输入一行代码:
Application.Exit();
可以看到,在输入这行代码时,Intellisense会给你提示。输入A的时候,将显示出第一个
可能的以A开头的对象。继续输入Appl,然后点句点:将会为你填入Application类(注2),然后Application对象的方法和属性也出现了。输入Ex,然后输入分号。变,变!一行代码就完成了。
提示:在IDE中,光标在不停闪烁,寻找当前代码位置非常容易。当然,书里的图没办法体现这种效果了。
Visual Studio将为我们生成创建和初始化各组件所需的所有代码。
请注意,代码文件 (Form1.cs) 只有using指令、构造方法和事件处理方法。曾经有老版本C#编程经验的读者可能会奇怪初始化和设置控件的其他代码(这里并没有列出!)都到哪里去了。注意到类定义中有一个关键字partial了吗?这表示类定义的其他部分包含在另一个文件中。如果点击Show All Files按钮(图13-6中圈出的部分),将看到设计器已经添加了另一个文件Form1.Designer.cs。

图13-6:显示所有文件
文件Form1.Designer.cs中存有所有Visual Studio生成的代码。






