第6章 C#开发Windows应用程序
6.1 建立Windows应用程序 我们将在本节先迅速建立一个Windows应用程序,从而学习一下建立Windows应用程序的基本步骤。 步骤:具体如下
1、启动Visual Studio.NET,如6-1所示。 图6-1 启动界面
2、单击“新建项目”按钮,打开“新建项目”对话框,界面如图6-2所示。 图6-2 “新建项目”窗口
3、打开VS.NET设计Windows GUI程序设计的主界面,如图6-3所示。
在VS.NET主界面中,主要包含五大部分: 工具箱:C#作为一门支持组件式开发的现代化编程语言,提供了功能强大、种类丰富的组件箱,即工具箱,这极大地方便了程序员进行常规任务的软件开发工作。
窗体设计器:作为窗口的主要载体,窗体是程序员进行Windows窗口设计的主要容器,VS 窗体设计器:作为窗口的主要载体,窗体是程序员进行Windows窗口设计的主要容器,VS.NET提供的窗体设计器允许程序员“所见即所得”的设计软件界面,开发人员可以方便地将各种控件以鼠标拖放的方式放入窗体中。 属性窗口:属性窗口是VS.NET提供的众多工具性窗口中最重要的窗口之一,程序员通过它可以方便地设置软件界面中各种组件的属性值。图 6-4 VS.NET主窗口各部分 上述几部分在VS.NET中的分布情况见图6-4。
图6-4 VS.NET主窗口各部分
4、双击工具箱上的“Button”控件,将它添加到窗体上,并将它移动到窗体中央,然后通过属性窗口修改该按钮的Text属性为:“问候”。如图6-5所示。 图6-5 “问候”窗口
5、用鼠标双击“问候”按钮,打开代码设计窗口,并写下一段代码。 图6-6 “代码设计器”窗口
6、按F5编译并运行该程序,效果如图6-7示。 图6-7 程序运行后的窗口
7、用鼠标单击“问候”按钮,将出现如图6-8界面。 图6-8 单击“问候”按钮后的界面
6.2 使用Windows Forms控件 Windows GUI软件的开发工作,在很大程度上要依赖各种控件来完成一些常规的功能,对于软件开发的初学者来说,要首先掌握Windows Forms的各种控件,下面我们就开始学习Windows GUI软件设计的常用控件。
6.2.1 Button控件 Button控件是程序员在开发Windows GUI程序时最常用的控件之一,它主要用来执行用户的单击功能,至于完成什么功能,那就完全由编写该程序的程序员决定了。 Button控件最重要的属性是Text属性,最重要的事件是Click事件,通常Text属性会直观地描述该Button控件的功能,而Click事件的代码框架,程序员只需在VS.NET的设计状态,用鼠标双击窗体上的Button控件即可获得。 案例:学习Button控件的使用方法 目标:掌握Button控件的Text属性和Click事件的要领 步骤:具体如下
1、启动VS.NET,建立名称为“ButtonTest”的解决方案,然后在窗体上添加Button控件,并修改该控件的Text属性为“ButtonTest”,界面如图6-9所示。
2、在设计状态用鼠标双击“ButtonTest”按钮,产生如下代码框架: private void button1_Click(object sender, System.EventArgs e) { //程序员编写的响应代码就放在此处 } 上述代码框架即为按钮button1的鼠标单击事件Click的响应代码框架,为了响应该按钮的鼠标单击事件,我们只需把有关代码放在上述框架中即可。 3、添写如下一段响应代码: MessageBox.Show("努力学习C#!"); }
4、按F5编译并运行ButtonTest解决方案,程序运行后,按下ButtonTest按钮,将会出现如图6-10所示的界面。
6.2.2 Label控件 Label控件主要用来在软件界面上显示一段静态信息,这段静态信息经常是说明性或提示性的文字,也可用来显示不用更改,只需刷新的信息,比如当前系统的日期和时间等内容。 关于Label控件的常用属性及说明见表6-1。
表6-1 Label控件的常用属性 属性名 含 义 样例值 Name 控件名称 lblName AutoSize 含 义 样例值 Name 控件名称 lblName AutoSize 如果为True,控件大小将根据内容自动调整;如果为False,则由用户决定其大小 True BackColor 控件背景色 Control ForeColor 控件前景色 ControlText Location 控件的位置坐标x,y 16,16 Size 控件的大小width,height 180,20 Text 控件的内容 姓名 Visible 如果为True,控件可见;如果为False,则控件不可见
目标:掌握Label控件常用属性的使用方法 步骤: 1、启动VS.NET,建立名称为“LabelTest”的解决方案,在窗体上添加Label控件和Button控件,并将上述控件的有关属性按表6-2所示设置,设置后的界面如图6-11所示。 图6-11 LabelTest设计界面
表 6-2 LabelTest方案的有关控件属性设置 控件类型 属性名 设置值 Label Name lblTime AutoSize False BackColor Desktop ForeColor ActiveCaptionText Location 16,24 Size 232,24 Text (空) Visible True Button butGetTime 获得当前系统时间
2、双击按钮,添加如下代码: private void butGetTime_Click (object sender, System.EventArgs e) { this.lblTime.Text= System.DateTime.Now.ToString(); }
3、单击F5编译并运行LabelTest,再单击“获得当前系统时间”按钮,如图6-12所示界面。
6.2.3 LinkLabel控件 LinkLabel控件非常类似网页上的超级链接,它有很多属性类似于Label控件,可以显示静态信息,但是我们要把注意力放在LinkLabel控件的Link功能上,也就是说,当用户用鼠标单击该控件时,它将产生一个事件,程序员写的响应代码就写在该事件里,该事件的名称是LinkClicked。
案例:练习使用LinkLabel控件 目标:掌握Label控件的LinkClicked事件的使用方法 步骤: 1、启动VS.NET,建立名为“LinkLabelTest”的解决方案,在窗体上添加LinkLabel控件,并将上述控件的有关属性按表6-3所示设置,其它属性不变,设置后的界面如图6-13所示。
表 6-3 LinkLabelTest方案有关控件的属性设置 控件类型 属性名 设置值 LinkLabel Name lnkSina Text 新浪网 图6-13 LinkLabelTest设计界面
2、用鼠标双击LinkLabel控件,VS 2、用鼠标双击LinkLabel控件,VS.NET将自动生成关于LinkClicked事件的代码框架,我们只需把有关代码写在该框架内,当程序运行时,用户只要用鼠标单击该LinkLabel控件,我们写的代码块就会自动运行。 具体代码样例如下: private void lnkSina_LinkClicked (object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e) { MessageBox.Show("您准备访问新浪网!"); }
3、按F5编译并运行本程序后,再用鼠标单击“新浪网”后,将显示如图6-14所示的界面。 图6-14 LinkLabelTest运行界面
6.2.4 TextBox控件 TextBox控件的主要功能是为运行的程序提供输入数据,用户可以通过它输入各种字符数据,程序在接收到数据后再进行相关处理。 TextBox控件的常用属性见表6-4。 表6-4 TextBox控件的常用属性 属性名 含 义 样例值 CharacterCasing 指示所有字符应保持不变还是应转换为大写或小写 Normal Lines TextBox中的文本行,作为字符串值的数组 MaxLength 指定TextBox中可输入的最大字符数 32767 Multiline 指定TextBox是否可以跨越多行 True ReadOnly 控制能否更改TextBox的文本 ScrollBars 指示TextBox显示哪些滚动条 None WordWrap 指示TextBox是否自动换行
案例:练习TextBox控件在输入数据方面的作用 步骤: 1、启动VS.NET,建立名称为“TextBoxTest”的解决方案,该方案拟实现对两个数据的求和运算。这需要在窗体上添加两个TextBox来输入整数数据,再添加一个Button来完成求和运算,结果放在一个Label里。由于TextBox控件接收的数据按文本处理,所以如果想进行算术运算,必须写代码将接收来的文本数据转换成数值型数据, 控件的属性设置如表6-5所示,如图6-15所示。
表 6-5 TextBoxTest方案有关控件的属性设置 控件类型 属性名 设置值 TextBox Name txtNum1 Text (空) txtNum2 Label lblResult BorderStyle FixedSingle Button butSum 求和
2、双击“求和”按钮,进入Button控件的Click事件代码框架,添加如下代码段: 图 6-15 TextBoxTest设计界面 2、双击“求和”按钮,进入Button控件的Click事件代码框架,添加如下代码段: private void butSum_Click(object sender, System.EventArgs e) { int ret=int.Parse(this.txtNum1.Text)+ int.Parse(this.txtNum2.Text); this.lblResult.Text=ret.ToString(); }
3、按下F5编译并运行TextBoxTest方案,在两个TextBox控件里输入整数再单击“求和”按钮,程序运行结果如图6-16所示。 图 6-16 TextBoxText运行界面
6.2.5 CheckBox控件 CheckBox控件主要用在用户进行多项选择的场合,如果用户选中该控件,则它处于打√状态,再单击一次,它的状态就切换到未选中状态。 CheckBox控件的常用属性如表6-6所示。 表6-6 CheckBox控件的常用属性 属性名 含 义 样例值 AutoCheck 使CheckBox在单击时自动更改状态 True Checked 指示CheckBox是已经选中还是未选中 CheckState 指示CheckBox的复选状态 Unchecked ThreeState 控制用户是否可以选择CheckBox的不确定状态 False
案例:练习CheckBox控件的使用方法 目标:掌握通过CheckBox进行多项选择编程的技巧 步骤: 1、启动VS.NET,建立名为“TextBoxTest”的解决方案,属性设置参见表6-7,界面如图6-17。 图 6-17 CheckBoxTest设计界面
表 6-7 CheckBoxTest方案有关控件的属性设置 控件类型 属性名 设置值 Label Name lblTip Text 请选择你的爱好: CheckBox chkBooks 看书 chkWeb 上网 chkGame 玩游戏 chkStreet 逛街 chkShopping 购物 lblFavor (空) Button butShowFavor 显示你的爱好
2、用鼠标双击“显示你的爱好”按钮,产生Click事件代码框架,编写如下代码: private void butShowFavor_Click(object sender, System.EventArgs e) { string str="你的爱好:"; if(this.chkBooks.Checked) str+=" 看书"; if(this.chkWeb.Checked) str+=" 上网"; if(this.chkGame.Checked) str+=" 玩游戏"; if(this.chkStreet.Checked) str+=" 逛街"; if(this.chkShopping.Checked) str+=" 购物"; this.lblFavor.Text=str; } 图 6-16 TextBoxText运行界面
3、按F5编译并运行CheckBoxTest方案,先选择自己的爱好,再单击按钮,产生如图6-18所示的界面:
表6-8 RadioButton控件的常用属性 RadioButton控件主要用在用户进行单项选择的场合,如果用户选中某项选择,则其它选项将自动处于未选中状态。RadioButton控件的常用属性如表6-8所示。 表6-8 RadioButton控件的常用属性 属性名 含 义 样例值 AutoCheck 使RadioButton在单击时自动更改状态 True Checked 指示RadioButton是已经选中
表 6-9 RadioButtonTest方案有关控件的属性设置 步骤: 1、启动VS.NET,建立名为“RadioButtonTest”的解决方案,属性设置参见表6-9。 表 6-9 RadioButtonTest方案有关控件的属性设置 控件类型 属性名 设置值 Label Name lblSex Text 性别: RadioButton rbMale 男 rbFemale 女 Button butSex 你的性别
图 6-19 RadioButtonTest设计界面 按照表6-9设置完属性后,具体界面如图6-19所示。 图 6-19 RadioButtonTest设计界面
2、用鼠标双击“你的性别”按钮,产生Click事件代码框架,编写如下代码: private void butSex_Click(object sender, System.EventArgs e) { string str="你的性别是:"; if(this.rbMale.Checked) str+="男"; if(this.rbFemale.Checked) str+="女"; MessageBox.Show(str); }
图 6-20 RadioButtonTest运行界面 3、按F5编译并运行RadioButtonTest方案,单击RadioButton进行性别选择,并单击按钮,界面如图6-20所示。 图 6-20 RadioButtonTest运行界面
6.2.7 GroupBox控件 GroupBox控件在软件界面设计中的作用很重要,它是一个容器控件,可以容纳其它控件,在软件界面设计布局中主要有两大功能:一是分组功能,它可以把完成同一功能的多个控件组合在一起;二是装饰功能,如果软件界面上的控件很多,通过若干个GroupBox控件的分组,整个界面就会显得整洁有序、条理清楚。
表 6-11 GroupBoxTest方案有关控件的属性设置 步骤: 1、启动VS.NET,建立名为“GroupBoxTest”的解决方案,控件具体属性设置如表6-11所示。 表 6-11 GroupBoxTest方案有关控件的属性设置 控件类型 属性名 设置值 GroupBox Name groupBox1 Text 个人爱好 CheckBox chkBooks 看书 chkGame 玩游戏 chkStreet 逛街 chkWeb 上网
2、按表6-11设置完GroupBoxTest方案的属性,界面如图6-21所示,由于GroupBox控件无需编码,只需在VS 2、按表6-11设置完GroupBoxTest方案的属性,界面如图6-21所示,由于GroupBox控件无需编码,只需在VS.NET设计状态用鼠标进行拖放操作即可,所以本案例不再演示运行状态。 图 6-21 GroupBoxTest设计界面
6.2.8 ComboBox控件 ComboBox控件在功能上既有文本框的数据输入功能,又有列表框的条目选择功能,从软件界面设计的角度来讲,ComboBox控件能满足用户从多个条目选择的要求,而且还节省界面空间。ComboBox控件的常用属性如表6-12所示。 表6-12 ComboBox控件的常用属性 属性名 含 义 样例值 DropDownStyle 控制ComboBox的外观和功能 DropDown Items ComboBox中的项,它是个字符串集合 Sorted 控制是否对列表部分中的项进行排序 False
表 6-13 ComboBoxTest方案有关控件的属性设置 步骤: 1、启动VS.NET,建立名为“ComboBoxTest”的解决方案,属性设置参见表6-13。 表 6-13 ComboBoxTest方案有关控件的属性设置 控件类型 属性名 设置值 ComboBox Name cmbCities Text (空) Label lblChoice BorderStyle FixedSingle
2、选中ComboBox控件,按下F4,打开属性窗口,选择items属性,用鼠标单击右侧窗口,打开字符串集合编辑器,输入各直辖市名称,界面如图6-22所示。 图 6-22 字符串集合编辑器界面
3、双击ComboBox控件,创建SelectedIndexChanged事件的代码框架,该代码框架在用户选择不同的条目时将自动触发,编写如下代码: private void cmbCities_SelectedIndexChanged (object sender, System.EventArgs e) { this.lblChoice.Text= this.cmbCities.Text; }
图 6-23 ComboBoxTest方案运行界面 4、按F5编译并运行程序,当用户选择不同的直辖市时,下面的Label控件将自动反映用户的选择,界面如图6-23所示。 图 6-23 ComboBoxTest方案运行界面
6.2.9 ListBox控件 ListBox控件主要用在枚举多个条目的场合。同ComboBox控件相比,它占用的界面空间比较大,但是所容纳的内容一目了然,在界面空间不紧张的情况下适合采用。 ListBox控件的常用属性如表6-14所示。 表6-14 ListBox控件的常用属性 属性名 含 义 样例值 Items 列表框中的项 ScrollAlways Visible 指示列表框中是否显示滚动条 True SelectionMode 指示列表框是单项选择、多项选择还是不可选择 One
表 6-15 ListBoxTest方案有关控件的属性设置 步骤: 1、启动VS.NET,建立名为“ListBoxTest”的解决方案,在本方案中,拟通过列表框显示系统字体列表。 ListBoxTest方案的界面各控件属性设置见表6-15所示。 表 6-15 ListBoxTest方案有关控件的属性设置 控件类型 属性名 设置值 ListBox Name lbFonts Items (空) Label lblFonts Text 字体列表: AutoSize True
按表6-15设置完有关控件属性后,界面如图6-24所示。 图 6-24 ListBoxTest方案设计界面
2、用鼠标双击窗体,打开窗体的Load事件,当窗体启动时,Load事件将自动调用,当Load事件里的代码运行完毕后,窗体才可见。 private void Form1_Load(object sender, System.EventArgs e) { Graphics g=this.CreateGraphics(); FontFamily[] ff=FontFamily.GetFamilies(g); for(int i=0;i<ff.Length;i++) { this.lbFonts.Items.Add(ff[i].Name); }
3、按F5编译并运行ListBoxTest方案,运行界面如图6-25所示。
6.2.10 StatusBar控件 StatusBar控件在Windows GUI程序设计中使用的非常普遍,它的主要用途是反馈程序的运行状态信息,也经常用来为用户提供使用软件的提示性信息。 StatusBar控件的常用属性如表6-16所示。 表6-16 StatusBar控件的常用属性 属性名 含 义 样例值 Panels StatusBar中的面板,它是一个集合属性 ShowPanels 确定StatusBar是显示面板,还是显示单行文本 True
案例:练习StatusBar控件的使用方法 步骤: 1、启动VS.NET,建立名为“StatusBarTest”的解决方案,在本方案中,拟通过StatusBar来显示当前的系统日期和时间。 2、用鼠标双击工具箱里的StatusBar控件,将它添加到窗体上,然后按F4打开属性窗口,确保选中StatusBar控件的Panels属性,接着用鼠标单击右侧按钮,打开StatusBarPanel集合编辑器,我们要为StatusBar控件添加两个面板,它们的属性如表6-17所示。
表 6-17 StatusBarTest方案有关控件的属性设置 控件类型 属性名 设置值 StatusBarPanel Name sbpDate Alignment Center Text (空) sbpTime
图 6-26 StatusBarPanel集合编辑器 按表6-17设置完有关控件属性后,集合编辑器的界面如图6-26所示。 图 6-26 StatusBarPanel集合编辑器
图 6-27 StatusBarTest方案设计界面 利用集合编辑器编辑完StatusBar控件的面板集合后,按下“确定”按钮,StatusBarTest方案的设计界面如图6-27所示。 图 6-27 StatusBarTest方案设计界面
3、用鼠标双击窗体,打开Load事件的代码框架,并编写如下代码: private void Form1_Load(object sender, System.EventArgs e) { sbpDate.Text=System.DateTime. Now.ToLongDateString(); sbpTime.Text=System.DateTime. Now.ToLongTimeString(); }
图 6-28 StatusBarTest方案运行界面 4、按F5编译并运行StatusBarTest方案,该方案的运行界面如图6-28所示。 图 6-28 StatusBarTest方案运行界面
表 6-18 StatusBarTest方案修改后有关控件的属性设置 在上述案例中,显示时间的代码可以加以改进,使之每秒都能更新当前的系统时间。针对上述案例作如下修改: 1、在窗体上添加一个Timer控件和一个Label控件,属性设置如表6-18所示。 表 6-18 StatusBarTest方案修改后有关控件的属性设置 控件类型 属性名 设置值 Label Name lblCurrentTime Text (空) Timer Enabled True
2、用鼠标双击Timer控件,产生Tick事件的代码框架,在该框架内编写如下代码: private void timer1_Tick(object sender, System.EventArgs e) { lblCurrentTime.Text=System. DateTime.Now.ToLongTimeString(); }
图 6-29 StatusBarTest方案运行界面2 3、按F5编译并运行程序,界面如图6-29所示。 图 6-29 StatusBarTest方案运行界面2
6.3 使用菜单 菜单是Windows GUI软件界面中最重要的元素之一,软件的所有功能都可以通过菜单来使用,菜单主要分两种,主菜单和上下文菜单。下面对这两种菜单进行介绍。
6.3.1 创建主菜单 主菜单就是通常所说的下拉菜单,它部署在窗口的顶部,构成界面的顶级菜单体系,每个顶级菜单条又包含多级子菜单。 在VS.NET开发环境中,主菜单的设计采用组件的方式,即向窗体添加一个主菜单设计控件,然后通过该控件提供的菜单设计器来完成主菜单的设计。 案例:练习MainMenu控件的使用方法 目标:掌握通过MainMenu控件设计主菜单的编程技巧 步骤: 1、启动VS.NET,建立名为“MainMenuTest”的解决方案,在本方案中,拟设计一套在很多软件中都常用的菜单体系。
图 6-30 MainMenuTest菜单设计界面(一)
图 6-31 MainMenuTest菜单设计界面(二) 3、用鼠标单击“请在此处输入”的蓝色区域,则将出现如图6-31所示的菜单设计界面。 图 6-31 MainMenuTest菜单设计界面(二)
表 6-19 MainMenuTest方案中菜单条属性设置 4、设计一个菜单体系,各级菜单名称和内容如表6-19所示。 表 6-19 MainMenuTest方案中菜单条属性设置 控件类型 菜单Name属性 菜单Ttex属性 MenuItem mnuFile 文件(&F) mnuNew 新建(&N) mnuOpen 打开(&O)… mnuSep1 - mnuExit 退出(&X) mnuEdit 编辑(&E) mnuCut 剪切(&T) mnuCopy 复制(&C) mnuPaste 粘贴(&P)
图 6-32 MainMenuTest方案运行界面 5、按照表6-19所示设置完属性后,通过属性窗口设置窗体Form1的Menu属性为mainMenu1,程序运行后的菜单界面如图6-32所示。 图 6-32 MainMenuTest方案运行界面
6.3.2 创建上下文菜单 上下文菜单也称为快捷菜单,通常是由用户用鼠标右键单击弹出,所以也称右键菜单。 案例:练习ContextMenu控件的使用方法 目标:掌握通过ContextMenu控件设计上下文菜单的技巧 步骤: 1、启动VS.NET,建立名为“ContextMenuTest”的解决方案,在本方案中,拟设计一个右键菜单。
表 6-20 ContextMenuTest方案中菜单条属性设置 2、通过工具箱向窗体添加ContextMenu控件,并确保窗体的ContextMenu属性设置为刚才添加的ContextMenu控件的名字contextMenu1。 3、设计上下文菜单的条目如表6-20所示。 表 6-20 ContextMenuTest方案中菜单条属性设置 控件类型 菜单Name属性 菜单Ttex属性 MenuItem mnuCut 剪切(&T) mnuCopy 复制(&C) mnuPaste 粘贴(&P)
图 6-33 ContextMenuTest设计界面 4、按照表6-20设置完菜单属性后,程序的设计界面如图6-33所示。 图 6-33 ContextMenuTest设计界面
图 6-34 ContextMenuTest运行界面 5、按F5编译并运行程序,然后右键单击窗体,界面如图6-34所示。 图 6-34 ContextMenuTest运行界面
6.4 对话框 对话框是Windows GUI程序中常用的一种窗口,它是软件同用户进行交流的重要渠道。下面我们重点讲解模态对话框和非模态对话框。
6.4.1 模态和非模态对话框 模态对话框与非模态对话框的区别,不在于对话框本身,而在于对话框的打开方式。如果一个对话框的打开方式是模态的,那么用户就只能操纵该对话框,在它被关闭之前,用户不能对程序进行其它操作。而如果一个对话框的打开方式是非模态的,那么用户可以响应该对话框,也可以暂时不关闭它,而是操纵程序的其它功能。 案例:练习对话框的不同打开方式 目标:掌握对话框的模态和非模态打开技巧
表 6-21 DialogTest方案中控件属性设置 步骤: 1、启动VS.NET,建立名为“DialogTest”的解决方案。 2、通过工具箱向窗体添加两个Button控件,属性按表6-21设置。 表 6-21 DialogTest方案中控件属性设置 控件类型 菜单Name属性 菜单Ttex属性 Button Name butModal Text 模态对话框 butModeless 非模态对话框
按照表6-21设置完控件属性后,程序的设计界面如图6-35所示。 图 6-35 DialogTest方案设计界面
3、用鼠标单击“项目->添加Windows窗体…”菜单,添加一个新窗体,名称为“Test.cs”。 4、用鼠标双击“模态对话框”按钮和“非模态对话框”按钮,产生两段代码框架,分别在其中编写如下代码: private void butModal_Click(object sender, System.EventArgs e) { Test t=new Test(); t.ShowDialog(); } private void butModeless_Click(object sender, System.EventArgs e) t.Show(); 代码说明: (1)ShowDialog()方法以模态方式打开对话框; (2)Show()方法以非模态方式打开对话框。
5、按F5编译并运行程序,当单击“模态对话框”按钮时,程序以模态方式打开一个对话框,此时我们用鼠标单击该对话框以外的地方,程序不会响应,界面如图6-36所示; 图 6-36 模态对话框
如果用鼠标单击“非模态对话框”按钮,程序则以非模态方式打开一个对话框,此时我们用鼠标单击该对话框以外的地方,程序会立即响应我们的单击事件,而刚才打开的对话框会失去焦点,界面如图6-37所示。 图 6-37 非模态对话框
6.4.2 通用对话框 1、OpenFileDialog对话框 (1)常用方法 ShowDialog()方法 本方法用于以模态方式显示“打开文件”对话框。 OpenFile()方法 本方法用于打开用户选定的文件。 (2)常用属性 FileName 本属性用于获取或设置一个包含在文件对话框中选定的文件名的字符串。 Title 本属性用于获取或设置文件对话框标题。
6.4.2 通用对话框 2、SaveFileDialog对话框 SaveFileDialog对话框是“保存文件”对话框,如果软件提供保存文件的功能,我们经常需要允许用户确定文件保存的位置和名称,此时正需要使用SaveFileDialog对话框。 (1)常用方法 ShowDialog()方法 本方法用于以模态方式显示“保存文件”对话框。 OpenFile()方法 本方法用于打开用户选定的具有读/写权限的文件。 (2)常用属性 FileName 本属性用于获取或设置一个包含在文件对话框中选定的文件名的字符串。 Title 本属性用于获取或设置文件对话框标题。 Filter 本属性用于获取或设置当前文件名筛选器字符串,该字符串决定对话框的“另存为文件类型”或“文件类型”框中出现的选择内容。
6.4.2 通用对话框 3、FontDialog对话框 FontDialog对话框为用户提供了当前系统的字体选择,我们通过该对话框可以设置字体的名称、大小、风格等。 (1)常用方法 ShowDialog()方法 本方法用于以模态方式显示“字体”对话框。 (2)常用属性 Font 本属性用于获取或设置选定的字体。 MaxSize 本属性用于获取或设置用户可选择的最大磅值。 MinSize 本属性用于获取或设置用户可选择的最小磅值。
6.4.2 通用对话框 4、ColorDialog对话框 ColorDialog对话框为用户提供了颜色选择功能。如果软件需要允许用户对某些颜色进行修改的话,那么程序员就可以通过ColorDialog对话框来展示该项功能了。 (1)常用方法 ShowDialog()方法 本方法用于以模态方式显示“颜色”对话框。 (2)常用属性 Color 本属性用于获取或设置用户选定的颜色值。 CustomColors 本属性用于获取或设置对话框中显示的自定义颜色集。 FullOpen 本属性用于获取或设置一个值,该值指示用于创建自定义颜色的控件在对话框打开时是否可见。
案例:学习几种通用对话框的使用方法 目标:掌握OpenFileDialog、SaveFileDialog、FontDialog和ColorDialog的使用技巧 步骤: 1、启动VS.NET,建立名为“CommonDialogTest”的解决方案。 2、通过工具箱向窗体添加四个Button控件和一个Label控件,属性按表6-22设置。
表 6-22 CommonDialogTest方案中控件属性设置 控件类型 菜单Name属性 菜单Ttex属性 Button Name butOpen Text 打开文件... butSave 保存文件... butFont 字体... butColor 颜色... Label lblInfo BorderStyle Fixed3D Font 宋体, 10.5pt, style=Bold (空)
图 6-38 CommonDialogTest设计界面 3、通过工具箱想窗体添加一个OpenFileDialog控件、一个SaveFileDialog控件、一个FontDialog控件和一个ColorDialog控件。具体界面如图6-38所示。 图 6-38 CommonDialogTest设计界面
4、用鼠标分别双击上述四个按钮,产生它们关于鼠标单击事件的代码框架,并分别编写如下代码: //打开文件 private void butOpen_Click(object sender, System.EventArgs e) { //模态显示“打开文件”对话框 this.openFileDialog1.ShowDialog(); //在Label控件中显示用户要打开的文件的名称 this.lblInfo.Text="您要打开的文件名:"+this.openFileDialog1.FileName; }
//保存文件 private void butSave_Click(object sender, System.EventArgs e) { //模态显示“保存文件”对话框 this.saveFileDialog1.ShowDialog(); //在Label控件中显示用户要保存的文件的名称 this.lblInfo.Text="您要保存的文件名:"+this.saveFileDialog1.FileName; }
//字体 private void butFont_Click(object sender, System.EventArgs e) { //模态显示“字体”对话框 this.fontDialog1.ShowDialog(); //在Label控件中显示用户选中的字体的名称 this.lblInfo.Text="您选中的字体:"+this.fontDialog1.Font.Name; }
//颜色 private void butColor_Click(object sender, System.EventArgs e) { //模态显示“颜色”对话框 this.colorDialog1.ShowDialog(); //在Label控件中显示用户选中颜色值 this.lblInfo.Text="您选中的颜色:"+this.colorDialog1.Color.ToString(); } 注意:在上述四段代码中,每段代码运行完后,都会在名称为lblInfo的Label控件中显示运行结果。
5、按F5编译并运行程序,然后单击“打开文件”按钮,出现如图6-39所示的界面,然后选择要打开的文件,再单击“打开”按钮。 图 6-39 “打开文件”对话框
6、单击“保存文件”按钮,出现如图6-40所示的界面,然后选择合适的驱动器和文件夹,在“文件名”文本框输入要保存的文件名,再单击“保存”按钮。 图 6-40 “保存文件”对话框
7、单击“字体”按钮,出现如图6-41所示的界面,选择一种字体后,再单击“确定”按钮,Label控件将显示选中的字体。 图 6-41 “字体”对话框
8、单击“颜色”对话框,出现如图6-42所示的界面,选择一种颜色后,再单击“确定”按钮,Label控件将显示选中的颜色值。 图 6-42 “颜色”对话框
本章小结 本章主要介绍如何通过C#语言进行Windows应用程序开发。首先介绍通过VS.NET开发Windows GUI程序的基本开发步骤,然后用大量的篇幅通过多个案例讲解基本Windows Forms控件的使用技巧、常用属性和常用事件;接着阐述主菜单和上下文菜单的设计方法,最后讲解模态对话框、非模态对话框和通用对话框的开发方法。 通过本章的学习,读者应掌握用C#语言在VS.NET环境下开发Windows GUI应用程序的基本技能。