第2章 编制一个简单的C#应用程序
2.1 第一个控制台应用程序设计实例
控制台应用程序是利用C#语言开发的应用程序类型之一,因为不涉及Windows系统的组成元素,因而结构比较简单。下面介绍如何创建控制台应用程序。
【例2-1】 在控制台窗口中输出“Hello world!”字样。
具体步骤如下:
(1)建立项目
先启动Visual Studio.NET。选择“开始”→“程序”→“Visual Studio.NET 2008”→“ Microsoft Visual Studio 2008”菜单项。
通常,开始编写一个C#应用程序,首先应该建立一个项目。在起始页面的“项目”选项卡中单击“创建项目”按钮,或者通过选择“文件”→“新建”→“项目…”菜单项打开新建项目对话框,如图2.1所示。
图2.1 用菜单创建项目
(2)选择C#项目类型
在新建项目对话框的左侧项目类型选项组中选择Visual C#。右侧为模板选项组,Visual Studio为程序员提供了多种类型的模板,如Windows应用程序、类库等。这里选择“控制台应用程序”选项,如图2.2所示。
图2.2 新建项目对话框
(3)项目名称
在图2.2所示的新建项目对话框的下方输入项目名称、文件夹位置和解决方案名称。该项目名称为“welcome”。
设置完成后,单击“确定”按钮,Visual Studio将在指定的文件夹中创建解决方案文件,并在该文件夹下创建以项目名称命名的子文件夹,存储项目文件。
(4)打开项目
创建welcome项目后,可在起始页上的“最近的项目”列表中看到该项目的名称,如图2.3所示。再次打开Visual Studio时,直接单击该链接即可打开此项目。
图2.3 起始页窗口
或在起始页中单击打开项目,在打开项目对话框中的查找范围内选择项目所在目录,然后选中要打开的项目文件,如图2.4所示。
图2.4 打开项目对话框
(5)代码编辑器
打开项目文件,并进入代码编辑器窗口,如图2.5所示。
图2.5 代码编辑器窗口
(6)编写代码
打开Program .cs文件,系统自动添加如下代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace welcome { class Program { static void Main(string[] args) { } } }
用户在方法Main的大括号内添加如下代码:
Console.WriteLine("Hello world");
添加完代码后如图2.6所示界面。
图2.6 添加完代码后的代码编辑器窗口
(7)保存项目
在“文件”菜单中,单击“全部保存”选项,或在工具栏中单击“保存”按钮。
(8)运行程序
选择“调试”→“开始执行”菜单项,如图2.7所示。
图2.7 调试菜单界面
运行结果如图2.8所示。
图2.8 运行结果界面
2.2 第一个Windows应用程序实例
【例2-2】 创建一个Windows应用程序,在窗口中输出“你好,欢迎使用C#”字样。
具体步骤如下:
(1)运行Visual Studio 2008,创建一个Windows应用程序项目,在新建项目的模板中选中Windows窗体应用程序,在“名称”文本框中将项目改名为exwin-01,在“位置”文本框中输入项目保存的目录位置,本例保存在本地硬盘的“E:\ZM\c#example”文件夹,选中“创建解决方案的目录”复选框,然后单击“确定”按钮,如图2.9所示。
图2.9 创建Windows应用程序的新建项目界面
(2)在“解决方案资源管理器”中,单击Form1.cs,重命名Form1.cs为FormMain.cs(见图2.10)。在窗体设计器中选中窗体,然后在属性栏中分别修改窗体的Text属性、Size属性和FormBoardStyle属性,如图2.11所示为修改窗体的Text属性值,观察修改后窗体显示的效果。
图2.10 Form1.cs重命名
图2.11 修改窗体属性的值
(3)从工具箱中向设计窗体拖放一个Label控件,如图2.12所示。选中该控件,然后修改其Text属性为“大家好,欢迎使用C#”,修改完毕后窗体如图2.13所示。
图2.12 从工具箱中拖放控件到窗体中
图2.13 修改Label1控件的属性值
选择Label1对象,然后设置其Font属性为“隶书,5号字,斜体”,选择ForeColor属性为红色,再选择TextAlign属性值,观察显示效果,并思考如何使某行的信息居中显示。修改AutoSize属性为“False”,拖动该控件右下角改变其大小,观察变化。
按F5运行程序,运行界面如图2.14所示。可以看到,没有编写一句代码,就可以完成这样一个功能。
图2.14 运行界面
2.3 C#项目和解决方案
项目是一组要编译到单个程序集(在某些情况下是单个模块)中的源文件和资源。例如,项目可以是类库,或一个Windows GUI应用程序。解决方案是构成某个软件包(应用程序)的所有项目集。
一个解决方案中可以有多个项目,但一个解决方案中最多只有一个项目是含有Main方法的,而其他项目中可以有一些类、方法、接口等的定义,是为其他项目服务的。
例如,其中可能有一个用户界面,有某些定制控件和其他组件,它们都作为应用程序的库文件一起发布。不同的管理员甚至有不同的用户界面。每个应用程序的不同部分都包含在单独的程序集中,因此,在Visual Studio.NET看来,它们都是独立的项目。可以同时编写这些项目,使它们彼此连接起来。可以把它们当做一个单元来编辑。Visual Studio.NET把所有的项目看做一个解决方案,把该解决方案当做是可以读入的单元,并允许用户在其上工作。
2.4 应用程序起始点
前面简单介绍了一个创建Windows应用程序实例。利用这个程序了解一下应用程序的起始点。
在“解决方案资源管理器”窗口中双击Program.cs节点,打开Program.cs文件。该文件是“exwin-01”应用程序的入口点,因为它包含了Main( )方法,内容如下:
1.using System; //引用System命名空间 2.using System.Collections.Generic; 3.using System.Linq; 4.using System.Windows.Forms; 5. 6.namespace exwin_01 //创建exwin_01命名空间 7.{ 8. static class Program //创建静态类 9. { 10. /// <summary> 11. /// 应用程序的主入口点。 12. /// </summary> 13. [STAThread] 14. static void Main() //创建Main静态方法,即应用程序的入口点 15. { 16. Application.EnableVisualStyles(); //启用可视化样式 17. Application.SetCompatibleTextRenderingDefault(false); //设置呈现格式 18. Application.Run(new FormMain ()); //运行FormMain窗体 19. } 20. } 21.}
对程序的进一步说明:
第1~4行代码分别使用using关键字引用了4个命名空间(分别是System、System.Collections. Generic、System.Linq、System.Windows.Forms)。
第14行代码在类Program中定义了Main方法,该方法为应用程序的入口点,即应用程序运行后,调用的第一个方法。
第16行代码调用EnableVisualStyles( )方法,启用可视化样式。
第17行代码调用SetCompatibleTextRenderingDefault(false)方法,设置呈现格式。
第18行代码调用Run( )方法,运行FormMain窗体。
2.5 配置程序集信息
在.NET中使用的程序集包括完全自我说明的描述程序集的数据,这样当程序执行时不需要到其他目录或注册表中查询包含在程序集中对象的信息。
在“解决方案资源管理器”窗口中的单击Properties节点,然后单击AssemblyInfo.cs节点,打开AssemblyInfo.cs文件。该文件用来配置exwin-01应用程序的程序集信息,内容如下:
1.using System.Reflection; 2.using System.Runtime.CompilerServices; 3.using System.Runtime.InteropServices; 4.// 有关程序集的常规信息通过下列属性集 5.// 控制。更改这些属性值可修改 6.// 与程序集关联的信息 7.[assembly: AssemblyTitle("exwin-01")] //设置程序集的标题 8.[assembly: AssemblyDescription("")] //设置程序集的简介 9.[assembly: AssemblyConfiguration("")] //设置程序集的配置 10.[assembly: AssemblyCompany("AAA")] //设置程序集的公司 11.[assembly: AssemblyProduct("exwin-01")] //设置程序集的产品 12.[assembly: AssemblyCopyright("Copyright © AAA 2011")]//设置程序集的版权 13.[assembly: AssemblyTrademark("")] //设置程序集的商标 14.[assembly: AssemblyCulture("")] //设置程序集的文化 ……
说明:
第1~3行使用using关键字引用了3个命名空间。
第7~14行分别配置程序集的信息,如标题、公司名称、文化环境等。
习题2
1.使用Visual Studio.NET的“新建C#项目”创建一个名为“SimpleForm”的Windows表单应用程序,则在生成________文件中可设置该程序集的Copyright、Trademark等属性信息。
A.Form1.resx
B.SimpleForm.sln
C.SimpleForm.csproj
D.AssemblyInfo.cs
2.已知在某Windows Form应用程序中,主窗口类为FormMain,程序入口为静态方法Main:
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); … }
则在Main方法中打开主窗口的正确代码是________。
A.Application.Run(new FormMain ());
B.Application.Open(new FormMain ());
C.(new FormMain ()).Open();
D.(new FormMain ()).Run();
上机实验二
实验 VS2008开发环境下开发简单的.NET应用程序
实验目的:
熟悉VS2008开发环境,掌握如何在此开发环境下开发简单的.NET应用程序,以及调试程序的基本操作技巧。
实验要求:
(1)掌握工具箱、属性窗口、解决方案资源管理器等的用法和基本操作技巧。
(2)观察各种应用程序的程序结构及特点。
(3)观察生成的可执行文件的存放位置,掌握项目备份和恢复的方法。
(4)掌握利用断点进行程序调试的方法。
实验步骤:
(1)运行Visual Studio.NET 2008,创建一个Windows应用程序项目,在模板中选中Windows应用程序项,在“名称”文本框中将项目改名为“ex01-03”,在“位置”文本框中输入项目保存的目录位置,本实验例程保存在本地硬盘的“E:\zm\c#example”文件夹,选中“创建解决方案的目录”复选框,然后单击“确定”按钮,如图2.15所示。
图2.15 创建应用程序模板
(2)在“解决方案资源管理器”中,如图2.16所示。用鼠标右键单击Form1.cs图标,重命名Form1.cs为FormMain.cs。然后分别在属性栏中(见图2.17)修改窗体的Text属性、Size属性和FormBoardStyle属性,观察修改后窗体显示的效果。
图2.16 解决方案资源管理器
图2.17 属性界面
(3)单击Icon属性右边的“...”,导入一个本地资源类型的图片,观察运行后的图标。单击BackgroundImage属性右边的“...”,导入一个本地资源类型的图片。然后选择Form1.cs的设计窗体,分别选择不同的BackgroundImageLayout属性值,观察窗体的背景布局效果,如图2.18所示,然后删除该背景图片。
图2.18 加入背景图的界面
(4)从“工具箱”中(见图2.19)向设计窗体拖放一个Label控件,选中该控件,利用CTRL + C键和CTRL + V键,复制3个后,用鼠标左键将该对象按纵向排列,然后分别修改其Text属性为“编号”、“姓名”、“性别”、“年龄”,如图2.20、图2.21所示。
图2.19 工具箱
图2.20 加入控件后的窗体
图2.21 设置控件属性
(5)按住SHIFT键不放,单击Label1~Label4对象,然后设置其Font属性为“隶书,小四号字,粗斜体”,选择ForeColor属性为红色,再选择TextAlign属性值,观察显示效果,并思考如何使某行的信息居中显示。修改其AutoSize属性为“False”,拖动该控件右下角改变大小,观察变化如图2.22所示。
(6)选择“工具箱”,双击TextBox控件4次,观察窗体中添加的情况,然后分别拖动窗体中的4个TextBox对象,放在对应的Label对象右边,并分别修改其Name属性为“textBoxId”、“textBoxName”、“textBoxAge”、“textBoxBirthday”。
(7)设置textBoxName的Size属性为“160,21”,然后按住鼠标左键,同时选中4个TextBox对象,在快捷工具栏中分别选择“使宽度相同”、“使垂直间距相等”,观察变化(见图2.22)。再选择“顶部对齐”,观察4个对象是否重叠在一起。然后利用CTRL + Z组合键,取消这次操作。
图2.22 添加Label、TextBox控件并修改其属性
(8)按F5键编译并运行,依次按Tab键,观察光标焦点顺序是否和想象的一致。然后结束程序运行。
(9)选择“视图”→“Tab键顺序”菜单项,分别按照自己希望的顺序依次单击各个TextBox对象,完成后按Esc键结束Tab键顺序设置。注意:如果不希望某个控件用Tab键获取焦点,可以设置其TabStop属性为“False”。
(10)从“工具箱”中向设计窗口拖放一个Button控件,然后双击该对象,观察自动生成的代码,并在button1_Click事件中添加一行代码this.Close( );
(11)运行该应用程序,然后单击button1按钮结束程序运行。
(12)在FormMain.cs的代码编辑窗体中,利用鼠标选中下面的代码:
private void button1_Click(object sender,EventArgs e) { this.Close(); }
将上面的4行代码选中,然后单击快捷工具栏的“注释选中行”符号,将这几行代码作为注释行(见图2.23)。
图2.23 运用快捷工具栏的“注释选中行”后的界面
(13)运行应用程序,观察出错提示(见图2.24)。在提示的对话框中单击“否”按钮。注意:调试时只要出现编译错误,不要单击“是”按钮,因为继续运行没有意义。
图2.24 出错对话框
(14)切换到FormMain.cs的代码编辑窗体,选中刚才变为注释的行,单击快捷工具栏的“取消对选中行的注释”符号,然后再次运行,没有报错,单击button1按钮结束程序运行。
(15)在FormMain.cs的设计窗体中,修改button1按钮的Name属性为“buttonOK”,Text的属性为“确定”,然后切换到FormMain.cs的代码编辑窗体,修改button1_Click为buttonOK_Click,运行应用程序。
(16)切换到FormMain.cs的设计窗体,单击“确定”按钮,单击“属性”窗口中的雷电符号(即打开按钮的“事件”窗口),在“Click”事件右边的下拉列表中选择的仍是“button1_Click”。
(17)切换到FormMain.cs的代码编辑窗体,在button1_Click上方单击鼠标右键,在弹出的快捷菜单中选择“重构”→“重命名”菜单项,将button1_Click改为buttonOK_Click,重新运行程序,观察是否有编译错误,然后结束程序运行,查看按钮的单击事件是否仍为“button1_Click”事件,体会重构的作用。
(18)在“解决方案资源管理器”中,双击FormMain.Designer.cs,观察自动生成的代码,了解设计窗体与自动生成的代码之间的关系。注意:初学者暂不要修改自动生成的任何代码。
(19)在“解决方案资源管理器”中,双击Program.cs,观察Main方法内的代码。
(20)选择“文件”→“退出”菜单项,结束项目编辑。
(21)找到E:\zm\c#example,用鼠标右键单击该目录,从快捷菜单中选择“复制”命令,将该目录下的所有内容全部备份到分配给自己的网络映射驱动器空间中,或者直接备份到U盘中。注意:不要只备份某个文件,或某些文件,应将整个目录全部备份。
另外还要注意:再次打开这个项目前,仍需要先将该目录复制到本地硬盘中,不要在网络映射驱动器或U盘中直接打开。
(22)依次查看该文件夹下的各个子目录及子目录下的文件,体会哪些是源代码文件,哪些是自动生成的文件。