1、Windows窗体应用程序也是面向对象编程技术的一个重要组成部分。在包含丰富图形用户界面的应用程序开发中,使用可视化的Windows窗体编程会更加方便,而且它具有友好的交互功能。本章我们来给大家详细介绍Windows窗体编程的方法。Windows窗体应用程序的创建和使用都很容易掌握。本节我们来讲解使用Microsoft Visual Studio 2010集成开发环境创建Windows窗体应用程序Chapter22的方法,以及该Windows窗体应用程序的起始点、配置信息等。依次选择“开始”|“所有程序”|“Microsoft Visual Studio 2010”|“Microsoft Vi
2、sual Studio 2010”命令,打开“起始页-Microsoft Visual Studio”窗口。单击“最近项目”面板中的“创建”下的“项目”链接,弹出“新建项目”对话框,并执行以下具体步骤。(1)设置应用程序的版本为.NET Framework 4.0,即选中中间左上部.NET Framework 4.0列表项。(2)设置应用程序的模板为Windows 窗体应用程序。(3)设置应用程序的名称为Chapter22。(4)设置应用程序的位置为默认位置。(5)设置应用程序的解决方案为“创建新解决方案”,并选中“为解决方案创建目录”复选框。(6)设置应用程序的解决方案名称为Chapter2
3、2。(7)单击“确定”按钮即可创建名称为Chapter22的Windows窗体应用程序。应用程序起始点的信息存放在Program.cs文件中。双击“解决方案资源管理器”面板中的Program.cs节点,打开Program.cs文件。用来配置程序集信息的相关内容存放在文件AssemblyInfo.cs中。首先展开“解决方案资源管理器”面板中的Properties节点,然后双击AssemblyInfo.cs节点打开AssemblyInfo.cs文件。控件是一组可以直接通过拖拉来被重用的类库。Windows窗体开发时可以使用丰富的控件,通过控件的使用可以给用户提供强大的功能。控件执行OnPaint(
4、PainEventArgs e)方法,把结果展示在窗体上。.NET Framework的工具箱中封装了很多控件供编程者使用,如按钮控件、单选框控件、复选框控件等等。本节我们来学习Windows窗体编程的各种基本控件。标签控件主要用于显示用户不能编辑的文本,如标题或提示等。它可以作为基本信息的载体,也可以作为复杂信息的呈现体。标签控件不能接收焦点,但是可以作为其他控件的访问键。标签通过使用类Label来实现。【示例6-1】下面创建一个标签控件,其Name属性的值为lb,它将显示“这是一个标签控件”的文本。Label lb=new Label();/创建一个标签控件lb.Text=这是一个标签控件
5、;通过标签控件的TextAlign属性,开发人员可以设置文本在标签内的对齐方式。图片框控件主要用来显示图片,图片格式可为位图、GIF、JPEG、图元文件或图标。它显示的图片由Image属性或ImageLocation属性指定。【示例6-2】下面创建一个图片框控件,其Name属性的值为pb,它将显示地址为E:1.jpg的图片。PictureBox pb=new PictureBox();/创建一个图片框控件pb.ImageLocation=E:1.jpg;运行MainForm.cs窗体之后,单击“浏览”按钮可以设置pb控件显示的图片。文本框(TextBox)和富文本框(RichTextBox)都
6、用来获取用户输入或显示文本。其中,文本框控件一般用于输入比较简单的信息,例如用户名和密码;而富文本框则用于输入比较复杂的信息,例如评论或文章。通过Text属性可以获取或设置文本框的输入或显示的文本。【示例6-3】下面创建一个文本框控件,其Name属性的值为tb,它将显示“这是一个文本框”文本。TextBox tb=new TextBox();/创建一个文本框控件tb.Text=这是一个文本框;【示例22-4】下面创建一个富文本框控件,其Name属性的值为rtb,它将显示“这是一个富文本框”文本。RichTextBox rtb=new RichTextBox();/创建一个富文本框控件rtb.T
7、ext=这是一个富文本框;按钮控件主要用于提交用户的请求。当用户单击按钮,就调用该按钮的单击事件作出相应的操作。按钮可通过Text属性和Image、ImageList属性分别设置显示的文本和图像。【示例6-5】下面创建一个按钮控件,其Name属性的值为btn,它将显示“浏览”文本。Button btn=new Button();/创建一个按钮控件btn.Text=浏览;【示例6-6】下面为Name属性的值为btnBrowserPic的按钮(MainForm.cs窗体中的“浏览”按钮)设计了Click事件btnBrowserPic_Click(object sender,EventArgs e)
8、。该事件首先打开“打开”对话框(第22.4.3节介绍),用户可以从该对话框中选择一张图片,并在pb控件中显示该图片。程序代码如下:01private void btnBrowserPic_Click(object sender,EventArgs e)02 /创建浏览文件对话框的实例03 OpenFileDialog ofd=new OpenFileDialog();04 /打开对话框05 if(ofd.ShowDialog()=DialogResult.OK)06 /获取文件的全路径07 pb.ImageLocation=ofd.FileName;08 09单项按钮是在用户提供的两个或多个互
9、斥选项组成的选项集中选择一个选项。它由RadioButton类实现。复选框是用来指定某个条件是打开的还是关闭的,它由CheckBox类实现。对于同一组内的单项按钮,用户一次只能选择一个;而同一组的复选框,用户可以选择一个或多个。注意:单项按钮和复选框最大区别在于在单项按钮组中,用户一次只能选择一个单项按钮。但是在复选框组中,用户可以选择任意数量的复选框。在Windows窗体开发中,窗体用于向用户展示信息。通过编写各种事件响应的代码,可以响应用户的各种操作,比如鼠标点击操作。本节我们来介绍设计MainForm.cs窗体的方法,包括配置窗体的属性、添加控件、创建新窗口等。窗体也有自己的属性,我们可
10、以通过以下方式来设置。打开“解决方案资源管理器”面板,并将Form1.cs节点重命名为MainForm.cs节点。双击该节点打开MainForm.cs窗体的设计界面。单击MainForm.cs窗体,“属性”面板将显示该窗体的各种属性及其值。开发人员还可以通过“属性”面板配置该窗体的各种属性。在此,笔者将MainForm.cs窗体的Name属性的值设置为MainForm、Text属性的值设置为“Windows窗体编程”。MainForm窗体创建好了后,就可以在它上面添加控件,比如文本框、图片框等。选择“工具箱”中的某一个控件,并直接拖放到MainForm.cs窗体之上,就可以把该控件添加到Mai
11、nForm.cs窗体。在此,笔者向MainForm.cs窗体添加了多个控件,并设置了相应的事件,具体说明如下表所示。注意:MainForm.cs窗体添加了多个Label控件用来显示文本(如“名称:”、“照片:”、“简介:”等),上表未列举这些控件。序号控 件 类 型Name属性Text属性事 件1TextBoxtbName2PictureBoxpb3ButtonbtnBrowserPic浏览btnBrowserPic_Click(object sender,EventArgs e)4RichTextBoxrtbDesn5ComboBoxcbAge6ListBoxlboxRole7RadioBu
12、ttonrbMale男8RadioButtonrbFemale女9CheckBoxcb1唱歌cb_CheckedChanged(object sender,EventArgs e)10CheckBoxcb2跳舞cb_CheckedChanged(object sender,EventArgs e)11CheckBoxcb3运动cb_CheckedChanged(object sender,EventArgs e)12CheckBoxcb4学习cb_CheckedChanged(object sender,EventArgs e)13ListViewlvLove14TreeViewtv创建等待对
13、话框是创建一个新窗体,它用作等待对话框。下面介绍创建等待对话框(由WaittingForm.cs窗体实现)的具体步骤。(1)右击“解决方案资源管理器”面板中的Chapter22节点,依次选择“添加”|“Windows窗体”命令。(2)单击“Windows窗体”命令打开“添加新项-Chapter22”对话框。(3)选择“Windows窗体”图标,并设置名称为WaittingForm.cs。(4)单击“添加”按钮,即可将WaittingForm.cs窗体添加到Chapter22应用程序中。(5)添加WaittingForm.cs窗体之后,设计该窗体的FormBorderStyle属性的值为None
14、、BackColor属性的值为ControlLight。并在窗体上使用Label控件显示“主窗口正在加载数据,请等待”文本。添加窗体事件是指给窗体添加相应的事件代码,使得窗体一运行就执行相应的操作。打开MainForm.cs窗体的设计界面,并双击该窗体就可以为该窗体添加MainForm_Load(object sender,EventArgs e)事件。当系统加载MainForm.cs窗体时,将触发该事件。该事件的具体实现步骤如下:(1)创建WaittingForm.cs窗体的实例waitting。(2)调用Show()方法显示WaittingForm.cs窗体。(3)设置WaittingFo
15、rm.cs窗体为当前活动窗体。(4)调用Application类的DoEvents()方法处理应用程序的消息。(5)调用Thread类的Sleep()延时5秒钟。(6)关闭WaittingForm.cs窗体,并释放waitting实例的资源。(7)最终,显示MainForm.cs窗体。注意:当Chapter22应用程序运行之后,首先显示一个等待窗口(WaittingForm.cs窗体),直到该等待窗口消失之后,才显示该应用程序的主窗口(MainForm.cs窗体)。对话框是FormBorderStyle属性为FixedDialog的窗体,主要用于与用户交互和检索信息。Windows应用程序最为
16、常用的对话框有5种:颜色对话框、字体对话框、打开文件对话框、保存文件对话框和目录浏览对话框。本节我们来学习这几种常用的对话框。颜色对话框是用来实现选择颜色的功能。它由Windows窗体ColorDialog组件实现,它是一个预先设置的对话框。用户可以从该对话框的调色板中选择颜色,以及将自定义颜色添加到该调色板。注意:如果要显示该对话框,则必须调用该组件的ShowDialog()方法。颜色对话框包括7个常用属性,如获取颜色对话框中选择的颜色的Color属性、禁用“定义自定义颜色”按钮的AllowFullOpen属性等。这些常用属性的具体说明如下表所示。属 性描 述属 性描 述Color用户选定的
17、颜色FullOpen指示用于创建自定义颜色的控件是否可见AnyColor指示是否显示基本颜色集中可用的所有颜色ShowHelp指示是否显示“帮助”按钮CustomColors自定义颜色集SolidColorOnly指示是否限制用户只选择纯色AllowFullOpen指示用户是否可以使用自定义颜色用户单击“设置颜色”按钮,可以弹出“颜色”对话框。该功能由“设置颜色”按钮(btnColor控件)的btnColor_Click(object sender,EventArgs e)事件实现。具体步骤如下:创建ColorDialog类的实例cd。调用cd实例的ShowDialog()方法显示颜色对话框。
18、把lbMessage控件的文本颜色设置为用户选择的颜色(即cd实例的Color属性的值)。在“对话框”对话框中,单击“设置颜色”按钮可以弹出“颜色”对话框,并选择颜色。单击“确定”按钮,关闭“颜色”对话框。此时,lbMessage控件中的文本的颜色已经改变。字体对话框主要用来设置字体、大小、颜色等。它由Windows窗体ColorDialog组件实现,它也是一个预先设置的对话框。用户可以从该对话框中选择系统上当前安装的字体。字体对话框包括5个常用属性,具体说明如下表所示。属 性描 述属 性描 述Font用户选定的字体MinSize用户可选择的最小磅值Color用户选定的字体颜色ShowHelp
19、指示是否显示“帮助”按钮MaxSize用户可选择的最大磅值用户单击“设置字体”按钮,可以弹出“字体”对话框。该功能由“设置字体”按钮(btnFont控件)的btnFont_Click(object sender,EventArgs e)事件实现。具体步骤如下:创建FontDialog类的实例fd。调用fd实例的ShowDialog()方法显示颜色对话框。把lbMessage控件的文本字体设置为用户选择的字体(即fd实例的Font属性的值)。在“对话框”对话框中,单击“设置字体”按钮可以弹出“字体”对话框,并选择字体为“粗斜体”选项。单击“确定”按钮,关闭“字体”对话框。此时,lbMessage
20、控件中的文本的字体已经改变。打开文件对话框由Windows窗体OpenFileDialog组件实现,它也是预先配置的对话框。它与Windows使用的标准“保存文件”对话框相同。打开文件对话框包括5个常用属性,具体说明如下表所示。属 性描 述属 性描 述Multiselect是否允许选择多个文件SafeFileNames所有选定文件的文件名和扩展名的数组ReadOnlyChecked是否选定只读复选框ShowReadOnly是否包含只读复选框SafeFileName所选文件的文件名和扩展名用户单击“浏览文件”按钮可以弹出“打开”对话框,该功能由“浏览文件”按钮(btnFile控件)的btnFil
21、e_Click(object sender,EventArgs e)事件实现。具体步骤如下:(1)创建OpenFileDialog类的实例ofd。(2)设置ofd实例的Filter属性的值为“文本文件(*.txt)|*.txt|All files(*.*)|*.*”,即只选择文本文件。(3)设置ofd实例的默认扩展名为txt,即默认类型为文本文件。(4)调用ofd实例的ShowDialog()方法显示打开文件对话框。(5)在tbFile控件中显示被打开文件的路径(即ofd实例的FileName属性的值)。在“对话框”对话框中,单击“浏览文件”按钮可以弹出“打开”对话框,并选择“新建 文本文件”
22、。单击“打开”按钮,关闭“打开”对话框。此时,tbFile控件显示被打开文件的路径。保存文件对话框由Windows窗体SaveFileDialog组件实现,它与Windows使用的标准“保存文件”对话框相同。保存文件对话框包括2个常用属性,具体说明如下表所示。属 性描 述 CreatePrompt 如果用户指定不存在的文件,对话框是否提示用户允许创建该文件 OverwritePrompt 如果用户指定的文件名已存在,保存文件对话框是否显示警告用户单击“保存为”按钮可以弹出“另存为”对话框,该功能由“保存为”按钮(btnSave控件)的btnSave_Click(object sender,Ev
23、entArgs e)事件实现。具体步骤如下:(1)创建SaveFileDialog类的实例sfd。(2)设置sfd实例的Filter属性的值为“文本文件(*.txt)|*.txt|All files(*.*)|*.*”,即只选择文本文件。(3)设置sfd实例的默认扩展名为“txt”,即默认类型为文本文件。(4)调用sfd实例的ShowDialog()方法显示保存文件对话框。(5)打开用户所选择的文件,并保存为fs变量(类型为FileStream)。(6)读取rtbMessage控件的内容,并转换为元素类型为byte类型的数组data。(7)调用fs实例的Write()方法将data数组的内容写
24、入到用户选择的文件。(8)关闭fs实例。在“对话框”对话框中,单击“保存为”按钮可以弹出“另存为”对话框,并选择“新建 文本文件”文本文件。单击“保存”按钮,弹出对话框。该对话框询问用户是否要替换已存在的文件。如果单击“是”按钮,将替换被选择的文件。否则,取消这次保存文件的操作。目录浏览对话框用来显示一个用于浏览和选择文件夹的模式对话框。它由Windows窗体FolderBrowserDialog组件实现。目录浏览对话框的常用属性具体说明如下表所示。属 性描 述SelectedPath用户选定的路径ShowNewFolderButton指示是否显示“新建文件夹”按钮Description对话框
25、中在树视图控件上显示的说明文本RootFolder从其开始浏览的根文件夹用户单击“目录浏览”按钮,可以弹出“浏览文件夹”对话框。该功能由“目录浏览”按钮(btnFolder控件)的btnFolder_Click(object sender,EventArgs e)事件实现。具体步骤如下:(1)创建FolderBrowserDialog类的实例fbd。(2)调用fbd实例的ShowDialog()方法显示浏览文件夹对话框。(3)tbFolder控件显示用户所选文件夹的路径(即fbd实例的SelectedPath属性的值)。在“对话框”对话框中,单击“目录浏览”按钮可以弹出“浏览文件夹”对话框,并
26、选择“桌面”图标。单击“确定”按钮,关闭“浏览文件夹”对话框。此时,tbFolder控件显示用户所选文件夹的路径。对话框窗体用于与用户交互和检索信息。此处,笔者用DialogForm.cs窗体实现。DialogForm.cs窗体的标题为“对话框”,该窗体包括1个Label控件、2个TextBox控件、1个RichTextBox控件和5个Button控件。具体说明如下表所示。序号控 件 类 型Name属性Text属性事 件1LabellbMessage这是一段文本:我喜欢C#语言2TextBoxtbFile3TextBoxtbFolder4RichTextBoxrtbMessage5Button
27、btnColor设置颜色btnColor_Click(object sender,EventArgs e)6ButtonbtnFont设置字体b t n F o n t _ C l i c k(o b j e c t sender,EventArgs e)7ButtonbtnFile浏览文件b t n F i l e _ C l i c k(o b j e c t sender,EventArgs e)8ButtonbtnSave保存为btnSave_Click(object sender,EventArgs e)9ButtonbtnFolder浏览目录btnFolder_Click(obje
28、ct sender,EventArgs e)运行Chapter22 Windows窗体应用程序之后,选择“对话框”命令,可打开“对话框”对话框(DialogForm.cs窗体)。容器是指在这些控件上面可以放置其他控件。Windows系统中有三个常用的容器控件:面板、组合框和选项卡。本节我们来学习这三种容器控件。面板(Panel)控件用于为其他控件提供可识别的分组。开发Windows应用程序时,通常使用面板控件按功能细分窗体。在窗体设计时,所有控件都可以自由移动,当移动面板时,它包含的所有控件也将随着移动。默认情况下,面板控件不显示任何边框。如果要显示边框,则需要设置其BorderStyle属性
29、的值。特别地,面板控件不显示标题。面板控件包括以下3个常用属性。AutoSizeMode属性:指定控件的自动调整大小行为。BorderStyle属性:指定控件的边框样式。TabStop属性:指定用户能否使用Tab键将焦点放到该控件上。【示例6-7】下面创建一个面板控件,它的Name属性的值为pLeft,Dock属性的值为DockStyle.Left,宽度和高度分别为228和266。01 System.Windows.Forms.Panel pLeft=new System.Windows.Forms.Panel();02 pLeft.Name=pLeft;03 pLeft.Dock=Syste
30、m.Windows.Forms.DockStyle.Left;04 pLeft.Size=new System.Drawing.Size(228,266);05 pLeft.Location=new System.Drawing.Point(0,0);/设置起始位置06 pLeft.TabIndex=0;/设置TabIndex属性的值组合框控件是C#中用来组织其他控件形成一个控件组。当组合框移动时,该控件组同时移动,不会产生其他的位移。组合框控件最典型的用途是用作一组单项按钮的容器,并指定为一个逻辑组,组内的单项按钮互相排斥。组合框控件包括以下8个常用属性。AllowDrop属性:指定控件是否
31、允许使用拖放操作和事件。AutoSize属性:指定控件是否根据其内容调整大小。AutoSizeMode属性:当控件启用AutoSize属性时,指定控件的行为方式。DisplayRectangle属性:获取控件的维度的矩形。FlatStyle属性:获取或设置控件的平面样式外观。TabStop属性:指定用户能否使用Tab键将焦点放到该控件上。Text属性:控件的标题。UseCompatibleTextRendering属性:指定是否使用了兼容文本呈现控件的标题。【示例6-8】下面创建一个组合框控件,它的Name属性的值为gbMain,Dock属性的值为DockStyle.Fill,宽度和高度分别为
32、224和266。01 System.Windows.Forms.GroupBox gbMain=new 02 System.Windows.Forms.GroupBox();03 gbMain.Name=gbMain;04 gbMain.Text=选项:;/设置控件的标题05 gbMain.Dock=System.Windows.Forms.DockStyle.Fill;06 gbMain.Location=new System.Drawing.Point(0,0);/设置起始位置07 gbMain.Size=new System.Drawing.Size(224,266);08 gbMain
33、.TabIndex=0;/设置TabIndex属性的值09 gbMain.TabStop=false;注意:组合框控件和面板控件的最大区别在于组合框控件可以显示标题,而面板控件可以显示滚动条。TabControl控件主要用于窗体内容比较多的场合,通过一个个的“标签”分门别类的显示不同的内容。通过右击TabControl控件即可添加或删除选项卡。TabControl控件包括以下3个常用属性。SelectedIndex属性:当前选定的选项卡页的索引。SelectedTab属性:当前选定的选项卡页。TabPages属性:TabControl控件中选项卡页的集合。注意:调用选项卡页的Hide()方法不
34、能够隐藏选项卡。若要隐藏选项卡,则必须从TabControl控件的TabPages集合中隐藏该选项卡页控件。容器窗体是在容器控件上添加别的控件。在此,笔者用ContainForm.cs窗体实现,介绍了面板、组合框、选项卡等控件的使用方法。该窗体的标题为“容器”,它包括1个TabControl控件、3个Tabpage、1个TextBox控件、1个RichTextBox控件、1个PictureBox、1个GroupBox、3个RadioButton和2个Panel控件。具体说明如下表所示。序号控 件 类 型Name属性Text属性事 件1TabControltctc_SelectedIndexCh
35、anged(object sender,EventArgs e)2TabPagetp13TabPagetp24TabPagetp35TextBoxTextBox16RichTextBoxRichTextBox17PictureBoxpb8GroupBoxgbMain9RadioButtonrb1rb_CheckedChanged(object sender,EventArgs e)10RadioButtonrb2rb_CheckedChanged(object sender,EventArgs e)11RadioButtonrb3rb_CheckedChanged(object sender,
36、EventArgs e)12PanelpLeft13PanelpMain运行Chapter22 Windows窗体应用程序之后,单击“容器”命令即可打开“容器”对话框(ContainForm.cs窗体)。选择“选项卡二”单选按钮或者“选项卡二”选项卡,“容器”对话框有相应变化。选择“选项卡三”单选按钮或者“选项卡三”选项卡,“容器”对话框有相应变化。当用户选择“选项卡一”或“选项卡二”或“选项卡三”单选按钮时,都触发rb_CheckedChanged(object sender,EventArgs e)事件。该事件将当前选项卡设置为与被单选按钮相对应的选项卡(选项卡的名称和单选按钮的文本相同)
37、,具体步骤如下:(1)使用foreach语句处理pMain控件的所有子控件。(2)如果当前控件的类型为RadioButton控件,则获取该控件,并保存为rb变量。(3)如果rb控件被选中,则设置与该控件相对应的选项卡。当用户选择“选项卡一”或“选项卡二”或“选项卡三”选项卡时,都触发tc_SelectedIndexChanged(object sender,EventArgs e)事件。该事件将当前单选按钮设置为与选项卡相对应的单选按钮(单选按钮的文本和选项卡的名称相同),具体步骤如下:使用foreach语句处理pMain控件的所有子控件。如果当前控件的类型为RadioButton控件,则设置
38、与当前控件文本相同的单选按钮的Checked属性为true。菜单和工具栏是应用程序中必不可少的部分,它为快速访问程序的功能提供了遍历。菜单和工具栏也属于控件范畴,它的列表中包含了用于创建菜单和工具栏的控件。本节我们来学习菜单控件、工具栏控件、上下文菜单控件的使用方法。菜单通常位于程序标题栏的下方。添加主菜单使用的是MenuStrip控件,此控件将应用程序命令分组,从而使它们更容易访问。如果要为某一个窗体添加菜单控件,只要将菜单(MenuStrip)控件从“工具箱”面板中直接拖放到窗体上即可。在此,笔者向MainForm.cs窗体添加了一个菜单,并设置它的Name属性的值为msMain。msMa
39、in菜单包括以下3个子菜单。对话框:Name属性的值为tsmiDialog,单击该控件触发tsmiDialog_Click(ob-ject sender,EventArgs e)事件。容器:Name属性的值为tsmiContain,单击该控件触发tsmiContain_Click(ob-ject sender,EventArgs e)事件。数据网格视图:Name属性的值为tsmiDgv,单击该控件触发tsmiDgv_ Click(object sender,EventArgs e)事件。设计msMain菜单之后,可以在MainForm.cs窗体查看该菜单。单击msMain菜单的3个子菜单:“对
40、话框”、“容器”和“数据网格视图”,分别弹出“对话框”、“容器”和“数据网格视图”对话框。这些功能分别由它们的Click事件实现。工具栏通常位于主菜单的下方,提供的是主菜单中最常用的相关工具。工具栏由ToolStrip控件来实现,它可以在Windows窗体应用程序中承载菜单、控件和用户常用的工具条。如果要为某一个窗体添加工具栏,只要将工具栏(ToolStrip)控件从“工具箱”面板中直接拖放到窗体上即可。在此,笔者向MainForm.cs窗体添加了一个工具栏,并设置它的Name属性的值为tsMain。tsMain菜单包括以下3个图像按钮。“”按钮:Name属性的值为tsbDialog,单击此按
41、钮打开“对话框”对话框。“”按钮:Name属性的值为tsbContain,单击此按钮打开“容器”对话框。“”按钮:Name属性的值为tsbDGV,单击此按钮打开“数据网格视图”对话框。注意:单击上述3个图像按钮时,都触发tsMain控件的tsMain_ItemClicked(object sender,ToolStripItemClic-kedEventArgs e)事件。设计tsMain菜单之后,在MainForm.cs窗体可以查看该菜单。单击tsMain菜单的3个图像按钮,分别弹出“对话框”、“容器”和“数据网格视图”对话框。这些功能分别由tsMain控件的tsMain_ItemClick
42、ed(object sender,ToolStripItemClickedEventArgs e)事件实现。上下文菜单是C#中另外一种菜单,也叫弹出菜单或右键菜单。上下文菜单指的是在右击相应的控件时弹出的菜单,由ContextMenuStrip类型实现。如果要为某一个窗体添加上下文菜单,只要将上下文菜单(ToolStrip)控件从“工具箱”面板中直接拖放到窗体上即可。在此,笔者向MainForm.cs窗体添加了一个上下文菜单,并设置它的Name属性的值为cmsMain。cmsMain菜单包括以下4个菜单和1个分隔线。“剪切”菜单:Name属性的值为tsmiCut,单击此菜单触发tsmiCut_
43、Click(object sender,EventArgs e)事件。“复制”菜单:Name属性的值为tsmiCopy,单击此菜单触发tsmiCopy_Click(object sender,EventArgs e)事件。“粘贴”菜单:Name属性的值为tsmiPaste,单击此菜单触发tsmiPaste_Click(object sender,EventArgs e)事件。“-”分隔线。“选择所有”菜单:Name属性的值为tsmiAll,单击此菜单触发tsmiAll_Click(object sender,EventArgs e)事件。设计cmsMain菜单之后,在MainForm.cs窗体
44、查看该上下文菜单。右击rtbDesn控件,显示该上下文菜单。单击tsMain菜单的4个菜单:“剪切”、“复制”、“粘贴”和“选择所有”,分别实现剪切、复制、粘贴和选择所有rtbDesn控件中的文本的功能。这4个功能分别由它们的Click事件实现。按下F5键或者单击Microsoft Visual Studio 2010集成开发环境中的调试运行按钮即可运行Chapter22 Windows窗体应用程序。该应用程序运行之后,显示的第一个窗口为WaittingForm窗口,然后跳转为MainForm窗口。本章主要介绍了Windows窗体应用程序,如Windows窗体应用程序概述、Windows窗体基本控件、MainForm.cs窗体设计、菜单和工具栏、容器、对话框等。其中,重点是要掌握Windows窗体基本控件、菜单、工具栏、容器、对话框的使用方法,为后续编写功能强大的Windows应用程序奠定基础。