CSHARP属性

第5章 使用常用控件
Visual C# 2008提供了很多用于开发Windows和Web应用程序的控件,本章在介绍完焦点与Tab键序后,结合一些Windows应用程序实例介绍了部分常用控件的常用属性、方法、事件及其具体应用。
本章的大部分实例都将界面设计和程序代码编写结合起来,在编写少量代码的基础上,开发出具有一定功能的Windows应用程序,通过对这些实例的学习,您将能够对Windows应用程序的设计有进一步的了解和认识。
5.1 焦点与Tab键序
众所周知,在Windows环境下向计算机输入数据时,首先需要选定待输入的位置,输入完一条项目(数据)后,可以通过用鼠标单击或者使按下键盘的【Tab】键来改变待输入的位置。在Visual C# 2008中,称待输入的位置对应的对象具有焦点,而焦点在对象间移动的顺序称为Tab键序。
5.1.1 焦点
在学习Visual C# 2008的控件之前,首先要了解与控件紧密相关的焦点的概念。焦点是控件接收鼠标或键盘输入的能力。当对象具有焦点时,可以接收用户的输入,例如:为登录QQ而输入QQ密码时,焦点就在等待输入QQ密码的文本框上。
只有当控件的Enabled和Visible属性值均为True时,才可以接收焦点。Enabled属性决定控件是否响应由用户产生的事件,如键盘、鼠标事件;Visible属性决定控件是否可见。但是并非所有的控件都具有接收焦点的能力,如:GroupBox、PictureBox、Timer等控件都不能接收焦点。
5.1.2 设置焦点
在程序运行时,不管是使用鼠标单击选择对象还是使用快捷键选择对象,都可以使对象获得焦点。
然而在程序代码中,则需要使用Focus()方法使对象获得焦点,使用Focus()方法的语法格式为:
<对象>.Focus();
如:“txtQQPassword.Focus();”,该代码的功能是将焦点赋予文本框txtQQPassword。大多数控件得到和失去焦点时的外观是不相同的,如:
(1)按钮控件得到焦点后周围会出现一个虚线框;
(2)文本框得到焦点后会出现闪烁的光标。
5.1.3 Tab键序
Tab键序是指当用户按下键盘的【Tab】键时,焦点在对象(控件)间移动的顺序,每个窗体都有自己的Tab键序。
默认状态下的Tab键序跟添加控件的顺序相同。例如在窗体上先后添加了3个命令按钮Button1、Button2和Button3,则程序启动后Button1首先获得焦点,当用户按下Tab键时,焦点依次转移向Button2、Button3,然后再回到Button1,如此循环。具有焦点的控件有两个控制Tab键序的属性,分别是TabIndex和TabStop属性。
1. TabIndex属性
TabIndex属性决定控件接收焦点的顺序,Visual C# 2008按照控件添加的顺序依次将0、1、2、3、…… 分配给相应控件的TabIndex属性。用户在运行程序时按下Tab键, 焦点将根据TabIndex属性

值在控件之间转移。如果希望更改Tab键序,可以通过设置TabIndex 属性来更改。
例如希望焦点直接从Button1转移到Button3,然后再到Button2,则应该将Button2和Button3的TabIndex属性值互换。
注意:不能获得焦点的控件及无效或不可见的控件,不具有TabIndex属性,因而不包含在Tab键序中,按Tab键时这些控件将被跳过。
2. TabStop属性
TabStop属性决定焦点是否能够在该控件上停留。它有True和False两个属性值,默认为True;如果设为False,则焦点不能停在该控件上。
例如希望Button2不能接收焦点,只要将Button2的TabStop属性设为False即可,(代码为:Button2.TabStop = false;),这样在按Tab键时将跳过Button2控件,但是它仍然保留在Tab键序中的位置。
5.2 Form
窗体(Form)是Windows应用程序界面的最大容器,它可以容纳其他的一些控件,使用它和其他的Windows控件可以设计出美观的用户界面,下面将介绍窗体的生成方法及其常用的属性、方法和事件。
5.2.1 生成Form
每当用户创建一个新的Windows应用程序时,Visual C# 2008会自动生成一个名为Form1的窗体。前面介绍过,默认窗体的大小可以通过鼠标的拖拽方法改变,也可以通过窗体的Size属性来修改。
很多情况下,一个窗体满足不了应用程序的要求,如图书馆管理系统,既要对图书的基本情况进行管理,又要对读者以及读者借(还)书等信息进行管理,这时仅使用一个窗体是不合理的。
当需要多个窗体时,可以通过【项目】→【添加Windows窗体】菜单命令来为应用程序添加一个新的窗体,如图5-1所示。

图5-1 添加窗体
然后在【名称】后面的文本框中输入新窗体的名称(如frmMain.cs),再单击【添加】按钮,新的窗体即生成了,同时可以看到窗体设计器上方多出了表示一个新生成的窗体的选项卡。
5.2.2 Form常用的属性、方法与事件
在Visual C# 2008中,一切都是对象,窗体当然也不例外,下面就介绍窗体的一些常用的属性、方法和事件。
说明:为了方便介绍Form的常用属性、方法和事件,假定有一个名为frmMain的窗体,在应用程序中用作主窗体。
1. MaximizeBox和MinimizeBox属性
窗体的MaximizeBox和MinimizeBox属性用于确定窗体标题栏的右上角的最大化、最小化按钮是否可用。它们均有两个值:True和False。True表示最大化、最小化按钮可用,为默认值;False表示不可用。如图5-2表示窗体的最大化按钮不可用的情况,即将其MaximizeBox属性设置成了False。

图5-2 最大化按钮不可用
可以直接在窗体对象的属性窗口中找到“MaximizeBox”属性,然后直接在其中进行设置,如图5-3所示。

图5-3 设置MaximizeBox属性
也可以在程序运行时,使用代码来

设置窗体的MaximizeBox属性,其结果与在属性窗口中直接设置一致。例如:
//*************************************************************************
this.MaximizeBox = false;
//*************************************************************************
2. Size属性
窗体的Size 属性又分成Width和Height两个属性(分别表示窗体的宽度和高度),用于设置窗体的大小,以像索为单位。一般情况下可以通过鼠标的拖拽来控制窗体的大小,但如果要精确控制窗体的大小,则应该使用Size属性。如将Size属性值设为“300, 200”,则表示该窗体的宽为300像素、高为200像素。
3. StartPosition属性
窗体的StartPosition属性用于确定窗体第一次出现时的位置。它提供了5个属性值:默认的属性值为Manual:表示窗体的初始位置由Location属性确定;CenterScreen:表示窗体的初始位置为屏幕中心;WindowsDefaultLocation:窗体定位在Windows的默认位置,其尺寸在窗体大小中指定;WindowsDefaultBounds:窗体定位在Windows的默认位置,其边界也由Windows默认确定;CenterParent:窗体在其父窗体中居中。
4. AutoSizeMode属性
窗体的AutoSizeMode属性用于确定用户界面元素自动调整自身大小的模式,它有“GrowOnly”和“GrowAndShrink”两个值,“GrowOnly”为默认值,此时用户可以使用鼠标托拽来改变窗体的大小,而设为“GrowAndShrink”时,用户不可以使用鼠标托拽来改变窗体的大小。
5. Icon属性
窗体的Icon属性用于设置窗体左上角的小图标,可以直接在属性窗口中设置,设置的方法在第2章中已经介绍过。当然也可以通过代码来设置,使用代码设置的语法为:
System.Drawing.Bitmap.FromFile(IconPath)
说明:“IconPath”表示Icon图标的存放路径。
6. Font属性
窗体的Font属性用于设置窗体上字体的样式、字形、大小等。若选择Font属性,单击该属性右边的 按钮,将弹出【字体】对话框如图5-4所示。

图5-4 【字体】对话框
7. Text属性
窗体的Text属性用于设置窗体标题栏显示的文本,其默认值为“Form”加上一个整数,如“Form1”、“Form2”等。
8. Enabled属性
窗体的Enabled属性用于确定窗体是否响应用户的事件。它有True和False两个值,其默认值为True,如果设为False,则除了可以移动该窗体的位置、调整大小、关闭或者最大化最小化外,不能操作窗体内的控件等,这些控件对用户的操作完全不予响应。使用代码设置该属性的示例为:
//*************************************************************************
frmMain.Enabled = true; // 或者frmMain.Enabled = false;
//*************************************************************************
9. Visible属性
窗体的Visible属性表示窗体是否可见,它有True和False两个值

,默认值为True;如果设为False,则窗体不可见。使用代码设置该属性的示例为:
//*************************************************************************
frmMain.Visible= true; // 或者frmMain.Visible= false;
//*************************************************************************
10. ControlBox属性
窗体的ControlBox属性用于控制当程序运行时,窗体的标题栏中是否显示关闭、最大化和最小化按钮,是否显示系统图标和系统菜单。它有True和False两个属性值,图5-5分别表示该属性值为True和False的情况。

图5-5 具有与不具有系统菜单的窗体
11. Show()方法和Hide()方法
窗体的Show()方法用于显示窗体,而窗体的Hide()方法用于隐藏窗体,如下面的代码分别用于显示和隐藏窗体frmMain:
//*************************************************************************
frmMain.Show();
frmMain.Hide();
//*************************************************************************
12. Load事件
窗体的Load事件即窗体载入事件,当窗体载入时触发该事件。例如运行应用程序时,窗体frmMain显示,则触发了frmMain的Load事件。
13. Activated事件
窗体的Activated事件即激活事件,当窗体被激活时触发该事件。例如在不同窗体之间进行切换时,变成活动窗体触发了该窗体的Activated事件。
14. Click事件
窗体的Click事件即单击事件,单击该窗体时触发该事件。
15. FormClosed事件和FormClosing事件
窗体的FormClosed和FormClosing都是窗体的关闭事件,但两者有着本质的区别,FormClosed事件在窗体关闭后的那一刻被触发,而FormClosing事件则是当窗体正要关闭的时候被触发。
5.3 Button控件
命令按钮(Button)是一种很常用的控件,主要用于接收用户的单击(Click)事件。当用户用鼠标单击或用Enter键按下命令按钮时,都会触发Click事件,从而执行相应的代码,达到某种特定操作的目的。
命令按钮具备控件所共有的基本属性,这里不在赘述,仅介绍一下Text属性。Text属性用于设置显示在命令按钮上的文本,可以在文本前面加上“&”字符来设置快捷键(热键)。例如:将按钮的Text属性设为“&OK”,该按钮的效果为: ,则“O”将被作为热键,按下Alt+O将触发命令按钮的Click事件。
5.4 Label控件
标签控件有两种,一种是普通标签(Label),它主要用于显示不希望被用户修改的静态文本,因为Label控件不能由用户直接对其进行编辑,另一种是带链接的标签(LinkLabel),它主要用于设计链接。
本节介绍Label控件常用的属性和事件,LinkLabel将在后面介绍。前面在介绍窗体时介绍过的如Text、Enabled、Visible和Font等属性,Label控件同样具有这些属性,且其用法也类似,这里不再重复介绍。
1. Aut

oSize属性
Label控件的AutoSize属性控制Label 控件是否根据显示的文本自动调整控件的大小。它有 True 和False两个属性值,默认值为True;如果设为False,表示控件的大小不会随文本的改变而变化。
2. BorderStyle属性
Label控件的BorderStyle属性用于设置标签边框的样式。它有3个属性值:None,表示没有边框;FixedSingle,标签具有单线边框;Fixed3D,标签具有3D样式的边框,设为该样式的标签具有立体感。
3. Click、DoubleClick事件
Label控件的Click为单击事件,单击标签是触发;DoubleClick为双击事件,双击标签时触发该事件。
4. MouseHover事件
Label控件的MouseHover事件为鼠标悬停事件,当在鼠标指针悬停在Label控件上时触发MouseHover 事件。
5.5 TextBox控件
文本框(TextBox)控件,与标签控件一样,它也能显示文本。但是,TextBox控件的文本可以由用户直接对其进行编辑,这是它与标签控件最明显的区别。从人机对话的角度来看,大多数程序,都用文本框控件来接收信息,而常用标签框控件来向用户反馈信息。文本框常用的属性、方法和事件如下:
说明:为了方便介绍TextBox控件的常用属性、方法和事件,假定有一个名为txtCsharp的文本框控件,用于显示一些与Visual C# 2008相关的信息。
1. Text属性
TextBox控件的Text属性用于返回或设置文本框的文本内容。设置时可以使用属性窗口,也可以使用代码,代码示例如下:
//*************************************************************************
txtCsharp.Text = "Visual C# 2008"; // 设置txtCsharp的文本内容
//*************************************************************************
2. MaxLength属性
TextBox控件的MaxLength属性用于控制文本框输入字符串的最大长度是否有限。默认值为32767,表示该文本框中的字符串最大长度为32767;若设为其它大于0的整数,则该整数表示该文本框能够输入的最大字符串长度。设置时可以使用属性窗口,也可以使用代码,代码示例如下:
//*************************************************************************
txtCsharp.MaxLength = 100; // txtCsharp中最多只能接收100个字符
//*************************************************************************
3. MultiLine属性
TextBox控件的MultiLine属性控制文本框中的文本内容是否多行显示。它有True和False两种属性值,默认为False,表示以单行形式显示文本;如果为True,则文本内容以多行形式显示。
4. ScrollBars属性
TextBox控件的ScrollBars属性设置文本框是否有垂直或水平滚动条。它有四种属性值:None,没有滚动条;Horizontal,文本框有水平滚动条;Vertical,文本框具有垂直滚动条;Both,文本框既有水平滚动条又有垂直滚动条。设置时

可以使用属性窗口,也可以使用代码,代码示例如下:
//*************************************************************************
txtCsharp.ScrollBars = ScrollBars.Both; // txtCsharp具有水平和垂直滚动条
//*************************************************************************
注意:显然,只有当MultiLine(多行显示)属性为True时,将ScrollBars属性设置为1、2或3才有效。
5. PasswordChar属性
TextBox控件的PasswordChar属性设置是否在文本框中显示用户键入的字符。如果将该属性值设为某一字符,那么无论用户键入什么,在文本框中均显示该字符。
例如:将该属性设为“*”,则在文本框中只显示“*”,即最终用户无法知道文本的内容,可以起到显示保密信息(如用户密码)的作用。设置时可以使用属性窗口,也可以使用代码,代码示例如下:
//*************************************************************************
txtCsharp.PasswordChar = "*"; // 设置txtCsharp的密码字符为"*"
//*************************************************************************
注意:只有当MultiLine属性为False时,该属性才有效。
6. SelectedText属性
TextBox控件的SelectedText属性用于返回在文本框中选择的文本。要在程序运行时操作当前选择的文本,可以通过该属性来处理。例如要将txtCsharp中所选择的文本替换为“Visual C# 2008”,可以使用以下代码:
//*************************************************************************
txtCsharp.SelectedText = "Visual C# 2008";
//*************************************************************************
说明:如果要删除选择的文本,只需将空字符串("")赋给它就行了。
7. ReadOnly属性
TextBox控件的ReadOnly属性用于设置文本框中的文本内容是否只读。它有True和False两个值,默认值为False,即文本内容是可读写的;如果设为True,则该文本框的文本内容只读,不可编辑,同时该文本框变成灰色。设置时可以使用属性窗口,也可以使用代码,代码示例如下:
//*************************************************************************
txtCsharp.ReadOnly = true; // txtCsharp是只读的
//*************************************************************************
8. SelectionStart属性
TextBox控件的SelectionStart属性用于返回或设置用户在文本框中选择的文本内容的第一个字符的位置。字符位置的编号(索引号)从0开始,当没有选择文本时,返回当前鼠标指针的位置。
9. SelectionLength属性
TextBox控件的SelectionLength属性用于返回或设置文本框中被选择的文本长度。当没有选择文本时,该属性值为0。
若文本框txtCsharp显示文本信息 ,即其Text属性值为“欢迎使用Visual C# 2008 Express Edition!”,则语句:
//*********

****************************************************************
txtCsharp.SelectionStart = 8; // 在txtCsharp中选择文本的第一个字符的位置为8
txtCsharp.SelectionLength = 16; // 在txtCsharp中选择文本的长度为16
//*************************************************************************
因为索引号从0开始,故索引号为8的字符是“Visual”中的“a”字符,从“a”字符开始选择长度为16的字符串,故上述代码执行后,文本框中被选取的文本为“al C# 2008 Expre”,即:
10. SelectAll()方法
TextBox控件的SelectAll()方法用于选择指定文本框中的所有文本内容。若文本框txtCsharp显示文本信息 ,则语句:
//*************************************************************************
txtCsharp.SelectAll();
//*************************************************************************
执行后的结果为:
11. TextChanged事件
TextBox控件的TextChanged事件为文本改变事件,当文本框的文本内容发生改变时触发该事件,如:
//*************************************************************************
private void txtCsharp_TextChanged(object sender, EventArgs e)
{
… …
}
//*************************************************************************
12. KeyDown事件
TextBox控件的KeyDown事件在用户按下一个ASCII字符键时发生,该事件被触发时,被按键的ASCII码将自动传递给事件过程参数e的KeyValue属性,通过访问该参数,即可获知用户按下了哪个键。如:
//*************************************************************************
if(e.KeyValue == 13) // 等价于:if(e.KeyCode == Keys.Enter)
//*************************************************************************
上述两个语句是等价的,常用于判断用户是否按了Enter键(Enter键的十进制ASCII码值为13)。
13. KeyPress和KeyUp事件
TextBox控件的KeyPress事件在用户按下和松开一个键时被触发,KeyUp事件则是在用户松开一个键时被触发。所以当用户按下并松开一个键时,则会在对象上依次触发KeyDown、KeyUp和KeyPress事件。
5.6 ListBox控件
如果需要向用户提供包含一些选项和信息的列表,由用户从中进行选择,可以使用列表框(ListBox)和组合框(ComboBox),两者在使用中是有区别的。
(1)列表框:任何时候都能看到多个选项;
(2)组合框:平时只能看到一个选项,单击组合框右端的下拉箭头 可以打开多个选项的列表。
本节介绍列表框控件,组合框控件将在下一节进行详细的介绍。
5.6.1 ListBox的常用属性、方法和事件
列表框控件通过显示多个选项,供用户选择其中一项,达到与用户对话的目的。如果选项较多,超出控件显示范围,则会自动加上垂直滚动条。列表框控件常用的属性、方法和事件如下。
说明:

为了方便介绍ListBox控件的常用属性、方法和事件,假定有一个名为lstMonth的列表框控件,用于选择月份。
1. Items属性
列表框的Items属性( )表示列表框的列表项的集合,单击右边的 按钮可以编辑该列表框的列表项,如图5-6所示(列表项1~12为列表框lstMonth的列表项,表示一年中的12个月)。

图5-6 列表框的列表项字符串编辑器
2. SelectedIndex属性
列表框的SelectedIndex属性返回选中的列表项的索引号。列表框中的每一个列表项都对应着一个索引号,第一项对应的索引号为0、第二项的为1、第三项的为2、第四项的为3、……,依此类推。例如:
//*************************************************************************
if(lstMonth.SelectedIndex == 8) // 索引号8表示第9项
{
MessageBox.Show("该月属于秋季"); // 9月份为秋季
}
//*************************************************************************
3. SelectedItem属性
列表框的SelectedItem属性用于返回选中的列表项的文本内容。例如:
//*************************************************************************
if(lstMonth.SelectedItem.ToString() == "6") // 选中6月份
{
MessageBox.Show("该月属于夏季"); // 6月份为夏季
}
//*************************************************************************
4. Count属性
列表框的Count属性用于返回列表框中列表项的个数。因此,可以推断表达式“lstMonth.Items.Count-1”表示列表中最后一项的索引号。
5. Sorted属性
列表框的Sorted 属性控制列表项是否按字母实现排序。它有True和False两个值,默认为False,按列表项的添加顺序排序;如果设为True,则按字母顺序排序。
6. Add()方法
列表框的Add()方法把一个项目加入到列表框中,它有一个字符串类型的参数。其语法格式为:
ListBox.Items.Add(<字符串表达式>)
<字符串表达式>表示要添加的列表项。当Sorted属性为False时,用Add()方法添加的项被放置在末尾;当Sorted属性为True时,则按字母顺序排序。
例如,希望在如图5-6所示的列表框lstMonth中添加一个列表项“13”,则可以使用如下代码实现:
//*************************************************************************
lstMonth.Items.Add("13");
//*************************************************************************
7. Insert()方法
列表框的Insert()方法把一个项目加入到列表框中的指定索引处,它有一个整型和一个字符串型的参数。其语法格式为:
ListBox.Items.Insert(<索引号>,<字符串表达式>)
例如下面的语句表示将“13”作为列表项的第3项(索引号为2,即表示第3项)添加到列表框lstMonth中。
//*************************************************************************
lstMonth.Items.Insert(2, "13");
//*************************

************************************************
注意:Insert()方法只有在Sorted属性为False时才能把列表项添加到指定的位置。这是很容易理解的,因为Sorted属性为True,表示列表项按字母排序,因而无法给新增的列表项指定插入的位置。
8. Clear()方法
列表框的Clear()方法用于移除列表框中所有的列表项,它没有任何的参数。如下面的代码可以清空列表框lstMonth中的所有列表项:
//*************************************************************************
lstMonth.Items.Clear();
//*************************************************************************
9. Remove()方法
列表框的Remove()方法可以移除列表框中指定内容的列表项,它有一个字符串类型的参数。其语法格式为:
ListBox.Items.Remove(<字符串表达式>);
例如下面的语句运行的结果是从列表框lstMonth中移除“10”列表项。
//*************************************************************************
lstMonth.Items.Remove("10");
//*************************************************************************
10. RemoveAt()方法
列表框的RemoveAt()方法可以移除列表框中指定索引号的列表项,它有一个整型参数。其语法格式为:
ListBox.Items.RemoveAt(<索引号>);
例如下面的语句运行的结果是从列表框lstMonth中移除索引号为“10”列表项(即移除列表项“11”)。
//*************************************************************************
lstMonth.Items.RemoveAt(10);
//*************************************************************************
11. IndexOf()方法
列表框的IndexOf()方法用于返回指定的项在集合中的索引,它有一个字符串类型的参数。例如表达式“lstMonth.Items.IndexOf("8")” 表示列表项“8”的索引号,因此表达式的值应当为7。
12. SelectedIndexChanged事件
列表框的SelectedIndexChanged事件是列表框最重要的一个事件,当选择的列表项发生改变时(即索引号发生改变)触发该事件。
5.6.2 ListBox使用示例
【例5-1】 用户从列表框中选择月份,同时在文本框中显示选中的月份,单击【确定】按钮后判断显示该月份属于哪个季节。
(1)创建一个名为“ListBox”的新项目,根据第3章介绍的Visual C# 2008 Windows应用程序的设计步骤,将默认的Form1(修改后的frmMonth)设计成如图5-7所示。

图5-7 列表框使用示例
程序界面中包含的所有对象元素(窗体、列表框、文本框和命令按钮)的属性设置如表5-1所示。
表5-1 窗体和各控件的属性设置
控件类型 原控件名称 属性 设置结果
Form Form1 Name frmMonth
Text Month
TextBox TextBox1 Name txtMonth
ReadOnly True
TextBox2 Name txtSeason
ReadOnly True
ListBox ListBox1 Name lstMonth
Items 依次添加“1”、“2”、“3”、“4”、“5”、“6”、

“7”、“8”、“9”、“10”、“11”、“12”
Button Button1 Name btnSeason
Text 对应季节
(2)设计好程序界面后,接下来的工作便是编写代码,用户在列表框中选择不同的月份列表项时,应将该月份显示在第一个文本框中,因此首先需要编写列表框lstMonth的SelectedIndexChanged事件实现这一功能,代码如下:
//*************************************************************************
// 列表框lstMonth的SelectedIndexChanged事件代码
//*************************************************************************
private void lstMonth_SelectedIndexChanged(object sender, EventArgs e)
{
txtMonth.Text = lstMonth.SelectedItem.ToString();
}
//*************************************************************************
//*************************************************************************
单击【对应季节】按钮时,需要判断该月份所在的季节并将结果显示在第二个文本框中,因此应当编写【确定】按钮的Click事件实现该功能,代码如下:
//*************************************************************************
// 【对应季节】按钮的Click事件代码
//*************************************************************************
private void btnSeason_Click(object sender, EventArgs e)
{
switch (lstMonth.SelectedIndex)
{
case 0:
case 1:
case 2:
txtSeason.Text = "您所选择的月份属于春季";
break;
case 3:
case 4:
case 5:
txtSeason.Text = "您所选择的月份属于夏季";
break;
case 6:
case 7:
case 8:
txtSeason.Text = "您所选择的月份属于秋季";
break;
default:
txtSeason.Text = "您所选择的月份属于冬季";
break;
}
}
//*************************************************************************
//*************************************************************************
(3)用户界面和程序代码设计完毕后,便可运行程序,可以直接按下【F5】键,若选择列表框中的“8”,择结果如图5-8所示。

图5-8 运行结果
5.7 ComboBox控件
组合框(ComboBox)是综合了文本框和列表框特征的一种控件。它兼有文本框和列表框的功能,可以像文本框一样,用键入的方式选择项目,但输入的内容不能自动添加到列表中;也可以在单击 后,选择所需的项目。若选中了某列表项,则该项的内容会自动显示在文本框中。组合框比列表框占用的屏幕空间要小,如图5-9所示。列表框的属性基本上都可用于组合框。

图5-9 组合框控件
另外值得注意的是,ComboBox控件提供了一个名为“DropDownStyle”的属性,指定组合框的外观和功能,它有“Simple”、“DropDown”和“DropD

ownList”三个属性值,默认值为“DropDown”。若要使得组合框不能用键入的方式选择项目(即组合框中的文本内容不可编辑),则应当将“DropDownStyle”属性设为“DropDownList”。
5.8 DateTimePicker控件
DateTimePicker控件包含一个带有滚动箭头的图形化日历,使用它能够很方便的在应用程序中获取日期和时间。设计应用程序时的DateTimePicker控件如图5-10所示。

图5-10 设计时的DateTimePicker控件
在ShowUpDown属性(在后面有详细的介绍)值为False的情况下,如图5-11所示,DateTimePicker控件有两种操作模式:
(1)单击下拉式日历右边的 来选择一个日期。单击下拉日期列表中与日期相关的 和 按钮可以选择不同的月份;
(2)选中一个字段(例如:月、日、年等等)后,使用键盘键入相应的值的方式来设置它的值。

图5-11 运行时的DateTimePicker控件
在ShowUpDown属性值为True的情况下,则DateTimePicker控件不具有下拉日期,但具有上下调节箭头,如图5-12所示。这时的DateTimePicker控件同样有两种操作模式:
(1)选中一个字段(例如:月、日、年等等)后,按下控件右边的上下调节箭头来设置它的值;
(2)选中一个字段(例如:月、日、年等等)后,使用键盘键入相应的值的方式来设置它的值。

图5-12 具有上下调节箭头的DateTimePicker控件
说明:为了方便介绍DateTimePicker控件的常用属性和方法,假定有一个名为dtpNow的DateTimePicker控件,用于显示当前的日期时间。
5.8.1 DateTimePicker控件的常用属性
DateTimePicker控件的常用属性如下:
1. Value属性
DateTimePicker控件的Value属性用于表示DateTimePicker当前的日期/时间值。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value”的值为“2008-4-22 10:12:28”。
2. Date属性
DateTimePicker控件的Date属性用于获取DateTimePicker当前的日期/时间值的日期部分。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.Date”的值为“2008-4-22”。
3. Year属性
DateTimePicker控件的Year属性用于获取DateTimePicker当前的日期/时间值的年份部分。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.Year”的值为“2008”。
4. Month属性
DateTimePicker控件的Month属性用于获取DateTimePicker当前的日期/时间值的月份部分。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.Month”的值为“4”。
5. Day属性
DateTimePicker控件的Day属性表示DateTimePicker当前的日期/时间值为该月的第几天。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.Day”的值为“22”。
6. Hour属性
DateTimePicker控件的Hour属性用于获取DateTimePicker

当前的日期/时间值的小时部分。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.Hour”的值为“10”。
7. Minute属性
DateTimePicker控件的Minute属性用于获取DateTimePicker当前的日期/时间值的分钟部分。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.Minute”的值为“12”。
8. Second属性
DateTimePicker控件的Second属性用于获取DateTimePicker当前的日期/时间值的秒钟部分。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.Second”的值为“28”。
9. DayOfWeek、DayOfYear属性
DateTimePicker控件的DayOfWeek属性表示DateTimePicker当前的日期/时间值是星期几,DayOfYear属性表示DateTimePicker当前的日期/时间值为该年的第几天。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.DayOfWeek”的值为“Tuesday”;而表达式“dtpNow.Value.DayOfYear”的值为“113”。
10. ShowUpDown属性
DateTimePicker控件的ShowUpDown属性指定了DateTimePicker控件的显示模式,其默认值为False,表示下拉日历模式。若设置为True,则表示DateTimePicker控件显示数字显示框。
11. MaxDate属性
DateTimePicker控件的MaxDate属性表示在DateTimePicker控件中可以选择的最大日期值。
12. MinDate属性
DateTimePicker控件的MaxDate属性表示DateTimePicker控件中可以选择的最小日期值。
13. CustomFormat属性
DateTimePicker控件的CustomFormat属性用于格式化在DateTimePicker控件中显示的日期和(或)时间的自定义格式字符串。
5.8.2 DateTimePicker控件的常用方法
DateTimePicker控件的常用方法如下:
1. ToLongDateString()方法
DateTimePicker控件的ToLongDateString()方法用于将DateTimePicker控件的值转换为其等效的长日期字符串表示形式。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.ToLongDateString()”的值为“2008年4月22日”。
2. ToLongTimeString()方法
DateTimePicker控件的ToLongTimeString()方法用于将DateTimePicker控件的值转换为其等效的长时间字符串表示形式。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.ToLongTimeString()”的值为“10:12:28”。
3. ToShortDateString()方法
DateTimePicker控件的ToShortDateString()方法用于将DateTimePicker控件的值转换为其等效的短日期字符串表示形式。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.ToShortDateString ()”的值为“2008-4-22”。
4. ToShortTimeString()方法
DateTimePicker控件的ToShortTimeString()方法用于将DateTimePicker控件的值转换为其等效的短时间字符串表示形式。若当前日期为“2008年4月22日10点12分28秒”,则表达式“dtpNow.Value.ToShortTimeString()”的值为“10:12”。
5.9 LinkL

abel控件
LinkLabel控件主要用于给Windows窗体应用程序添加Web样式的超级链接。一切可以使用Label控件的地方,都可以使用LinkLabel控件;还可以将文本的一部分设置为指向某个文件、文件夹或Web页的超级链接。
5.9.1 LinkLabel控件的属性
LinkLabel控件除了具有Label控件的所有属性、方法和事件以外,还有一些自己独有的属性。
1. LinkArea属性
LinkLabel控件的LinkArea 属性用于获取或设置文本中被作为超级链接的区域。例如:LinkLabel控件的Text属性为“Visual C# 2008”,现在要为“C#”设置链接,因为“C#”为该字符串的第7到8个字符,所以应将LinkLabel控件的LinkArea 属性设为“8,2”。
设置LinkLabel控件的LinkArea 属性的方法有两种:
第一种:直接在属性窗口选中LinkLabel控件的LinkArea 属性 ,然后修改其默认的数值。
第二种:点击LinkArea属性右边的 按钮,然后在弹出的如图5-13所示的窗口中选择进行链接的文本范围,然后单击【确定】按钮即可。

图5-13 LinkArea编辑器
2. LinkColor属性
LinkLabel控件的LinkColor属性用于获取或设置超级链接处于默认状态下的颜色。
3. LinkVisited属性
一般情况下,超级链接未被访问与被访问过的状态是不相同的。LinkLabel控件的LinkVisited属性用于确定超级链接是否呈现已访问状态;它有True和False两个值。True表示已被访问,False为默认状态,表示没有被访问过。
4. LinkVisitedColor属性
LinkLabel控件的LinkVisitedColor用于确定当LinkVisitied为真时超级链接的颜色。
5. ActiveLinkColor属性
LinkLabel控件的ActiveLinkColor属性用于确定当用户单击超级链接时该链接的颜色。
6. LinkClicked事件
LinkLabel控件的LinkClicked事件为链接单击事件,当用户选择链接时触发该事件,是LinkLabel控件最重要的事件。
5.9.2 LinkLabel控件使用示例
【例5-2】 设计用户界面如图5-14所示,窗体上有两个超级链接,运行时单击可分别打开搜狐主页和启动Outlook发送电子邮件。
(1)首先新建一个名为“LinkLabel”Windows应用程序,将窗体的Name属性和Text属性分别设为“frmLinkLabel”和“LinkLabel”,将LinkLabel1和LinkLabel2的Name属性分别设为:llblSohu和llblEmail;再两者的Text属性分别设为“打开搜狐主页:https://www.360docs.net/doc/fd4585340.html,”和“联系作者:xlingyun@https://www.360docs.net/doc/fd4585340.html,”,LinkArea属性分别设为“7,12”和“5,16”,这样超连接区域如上图所示,分别为“https://www.360docs.net/doc/fd4585340.html,”和“xlingyun@https://www.360docs.net/doc/fd4585340.html,”。
最终的用户界面设计如图5-14所示。

图5-14 程序界面
(2)编写代码。
单击“https://www.360docs.net/doc/fd4585340.html,”链接时,打开搜狐主页,因此首先需要编写llblSohu的LinkClicked事件代码如下:
//*************************************************************************
// llblSohu的LinkClicked

事件代码
//*************************************************************************
private void llblSohu_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("IEXPLORE.EXE","https://www.360docs.net/doc/fd4585340.html,");
// 也可以写成:System.Diagnostics.Process.Start("https://www.360docs.net/doc/fd4585340.html,");
// 这时将使用系统当前默认的浏览器打开搜狐主页
}
//*************************************************************************
//*************************************************************************
单击“xlingyun@https://www.360docs.net/doc/fd4585340.html,”链接时,打开OutLook,给作者发送电子邮件,因此然接下来需要编写llblEmail的LinkClicked事件代码如下:
//*************************************************************************
// llblEmail的LinkClicked事件代码
//*************************************************************************
private void llblEmail_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("mailto:xlingyun@https://www.360docs.net/doc/fd4585340.html,");
}
//*************************************************************************
//*************************************************************************
(3)运行程序,单击llblSohu的超链接部分“https://www.360docs.net/doc/fd4585340.html,”,启动搜狐主页;单击llblEmail的超链接部分“xlingyun@https://www.360docs.net/doc/fd4585340.html,”,则启动Outlook,给作者“xlingyun@https://www.360docs.net/doc/fd4585340.html,”发送电子邮件。如图5-15所示。

图5-15 运行结果
5.10 PictureBox控件
图片框(PictureBox)控件,它主要用于显示图片,在第2章介绍QQ用户登录界面设计的时候已经使用过PictureBox控件。它最重要的属性是Image属性,该属性用于设置显示在图片框中的图片,选中Image属性后,可以单击右边的 按钮,通过弹出的【选择资源】对话框进行设置,如图5-16所示。

图5-16 【选择资源】对话框
【选择资源】对话框有“本地资源”和“项目资源文件”两个选项,选中相应的选项和需要的图片后单击【导入】按钮,即可设置需要在图片框中显示的图片。
当然,也可以使用代码设置,其语法格式为:
//*************************************************************************
PictureBox.Image = System.Drawing.Bitmap.FromFile(PicturePath);
//*************************************************************************
其中PicturePath表示图片的存放路径,如“D:\\QQ.bmp”。
5.11 Timer控件
时钟(Timer)控件,也称为计时器控件,主要用来计时,通过计时处理,可以实现各种复杂的操作,如延时、动画等。
说明:为了方便介绍Timer控件的常用属性和方法,假定有一个名为tmrNow的Timer控件,用于显示当前的时间。
5.11.1 Timer控件常用的属性与事件
Timer控件的属性不是很多,最常用的有两个,Enabled属性和Interval属性。Timer控件的事件只有一个:Tick事件。
1. E

nabled属性
Timer控件的Enabled属性用于设置Timer控件是否工作,它有True和False两个值,True为工作状态,False为暂停,默认为False。Timer控件在程序运行中不可见。设置Timer控件的Enabled属性代码示例如下:
//*************************************************************************
tmrNow.Enabled = false; // 计时器停止工作
//*************************************************************************
2. Interval属性
Timer控件的Interval属性是Timer控件另外一个非常重要的属性,表示两个计时器事件(即Tick事件)之间的事件间隔。其值是一个介于0~64767之间的整数,以毫秒为单位,所以最大的时间间隔约为1.5分钟,设置时可以使用属性窗口,也可以使用代码,使用代码设置的示例如下:
(1)如果需要屏蔽计时器,则将Timer控件的Interval属性设为0(或者将计时器的Enabled属性设为False),代码如下:
//*************************************************************************
tmrNow.Interval = 0;
//*************************************************************************
(2)如果需要每个0.5秒触发一个计时器事件,应将Timer控件的Interval属性设为500,代码如下:
//*************************************************************************
tmrNow.Interval = 500;
//*************************************************************************
3. Tick事件
Timer控件的Tick事件为计时器事件,在Enabled为True的情况下,Timer每隔Interval毫秒触发一次Tick事件。例如,tmrNow控件的Tick事件代码:
//*************************************************************************
private void tmrNow_Tick(object sender, EventArgs e)
{
… …
}
//*************************************************************************
5.11.2 Timer控件使用示例
【例5-3】 设计一个时钟程序,将系统时间显示在文本框中,要求每1秒钟更新一次当前时间。
(1)首先新建一个名为“Timer”Windows应用程序,然后为窗体添加1个标签和1个文本框控件,再按照表5-2设置好窗体和窗体上各控件的属性后,设计完的程序界面如图5-17所示。

图5-17 程序界面
在工具箱的【所有Windows窗体】列表中双击Timer控件,即为窗体了添加一个Timer控件,这时在窗体下方的组件面板上出现一个Timer控件如图5-18所示。

图5-18 Timer控件
说明:Timer控件在程序运行中不可见,在窗体上添加的Timer控件并不显示在窗体上,而是显示在窗体下方的组件面板上。
窗体和窗体上各控件的属性设置如表5-2所示。
表5-2 窗体和各控件的属性设置
控件类型 控件名称 属性 设置结果
Form Form1 Name frmShowTime
Text Timer
Label Label1 Text 当前时间:
TextBox TextBox1 Name txtShowTime
Timer Timer1 Name tmrShowTime
Interval 100

0(即1秒)
说明:要每1秒钟更新一次当前时间,即需要每1秒钟触发一次Tick事件,因此需要将Timer控件(tmrShowTime)的Interval属性设为1000(毫秒),即1秒。
(2)编写代码。
当运行程序时,应当使计时器开始工作,因此首先需要编写窗体的载入(Load)事件代码如下:
//*************************************************************************
// 窗体的载入事件代码
//*************************************************************************
private void frmShowTime_Load(object sender, EventArgs e)
{
tmrShowTime.Enabled = true;
}
//*************************************************************************
//*************************************************************************
每1秒钟更新一次当前时间由Timer控件(tmrShowTime)的Tick事件完成,接下来双击tmrShowTime,编写tmrShowTime的Tick事件代码如下:
//*************************************************************************
// tmrShowTime的Tick事件代码
//*************************************************************************
private void tmrShowTime_Tick(object sender, EventArgs e)
{
txtShowTime.Text = System.DateTime.Now.ToString();
}
//*************************************************************************
//*************************************************************************
(3)最后【调试】→【启动调试】,或者直接按下【F5】键运行程序,运行结果如图5-19所示。

图5-19 运行结果
5.12 ProgressBar控件
进度条(ProgressBar)控件通过显示一系列水平排列的小方块来指示操作的进度,如保存Word文件时在状态栏中就会出现一个指示保存进度的进度条。
当操作需要一段时间才能完成时,如果没有提示,用户可能会误以为程序没有响应,而进行不合理的操作,进度条控件通过视觉提示解决这个问题。
5.12.1 ProgressBar控件常用的属性和方法
进度条常用的属性和方法如下:
1. Step属性
ProgressBar控件的Step属性表示进度条的步长,即每次调用PerformStep()方法(该方法使进度条的显示进度向前延伸)时进度前进的单位数。
2. Minimum属性
ProgressBar控件的Minimum属性表示进度条正使用的范围下限,即Value的最小值,默认值为“0”。
3. Maximum属性
ProgressBar控件的Maximum属性表示进度条正使用的范围上限,即Value的最大值,默认值为“100”。
4. Value属性
ProgressBar控件的Value属性表示进度条当前所处的进度(当前值),必须处在最小值(Minimum)和最大值(Maximum)的范围内。
5. PerformStep()方法
ProgressBar控件的PerformStep()方法使进度条的显示进度向前延伸,每次的延伸量由Step属性值决定。
5.12.2 ProgressBar控件使用示例
【例5-4】 按选定的时间完成ProgressBar控件的进度指示


(1)首先新建一个名为“ProgressBar”Windows应用程序,然后为窗体添加1个ProgressBar控件和3个按钮控件,再按照表5-3设置好窗体和窗体上各控件的属性后,设计完的程序界面如图5-20所示。

图5-20 程序界面
窗体和窗体上各控件的属性设置如表5-3所示。
表5-3 窗体和各控件的属性设置
控件类型 控件名称 属性 设置结果
Form Form1 Name frmProgressBar
Text ProgressBar
ProgressBar ProgressBar1 Name prgTime
Button Button1 Name btn2
Text 2秒钟
Button2 Name btn5
Text 5秒钟
Button3 Name btn10
Text 10秒钟
接下来再为应用程序添加一个Timer控件,并将在窗体设计器下方组件板上出现的Timer1控件的Name属性设为“tmrPrg”。
(2)编写代码。
单击【2秒钟】按钮时,则进度条使用2秒钟的时间完成进度延伸,因此需要编写按钮【2秒钟】的单击事件代码如下:
//*************************************************************************
// 【2秒钟】按钮的单击事件代码
//*************************************************************************
private void btn2_Click(object sender, EventArgs e)
{
prgTime.Value = 0;
tmrPrg.Interval = 200; // 每200毫秒触发一次计时器控件的Tick事件
tmrPrg_Tick(sender, e); // 调用计时器的Tick事件方法
}
//*************************************************************************
//*************************************************************************
单击【5秒钟】按钮时,则进度条使用5秒钟的时间完成进度延伸,因此需要编写按钮【5秒钟】的单击事件代码如下:
//*************************************************************************
// 【5秒钟】按钮的单击事件代码
//*************************************************************************
private void btn5_Click(object sender, EventArgs e)
{
prgTime.Value = 0;
tmrPrg.Interval = 500; // 每500毫秒触发一次计时器控件的Tick事件
tmrPrg_Tick(sender, e); // 调用计时器的Tick事件方法
}
//*************************************************************************
//*************************************************************************
单击【10秒钟】按钮时,则进度条使用10秒钟的时间完成进度延伸,因此需要编写按钮【10秒钟】的单击事件代码如下:
//*************************************************************************
// 【10秒钟】按钮的单击事件代码
//*************************************************************************
private void btn10_Click(object sender, EventArgs e)
{
prgTime.Value = 0;
tmrPrg.Interval = 1000; // 每1000毫秒触发一次计时器控件的Tick事件
tmrPrg_Tick(sender, e); // 调用计时器的Tick事件方法
}
//*************************************************************************

//*************************************************************************
进度条的PerformStep()方法由计时器控件的Tick时间触发,最后编写Timer控件(tmrPrg)的Tick事件代码如下:
//*************************************************************************
// Timer控件(tmrPrg)的Tick事件代码
//*************************************************************************
private void tmrPrg_Tick(object sender, EventArgs e)
{
if (prgTime.Value == 100)
{
tmrPrg.Enabled = false; // 关闭计时器控件
}
else
{
tmrPrg.Enabled = true; // 打开计时器控件,让其开始工作
prgTime.PerformStep(); // 调用进度条的PerformStep()方法
}
}
//*************************************************************************
//*************************************************************************
(3)运行程序,分别单击2秒钟、5秒钟和10秒钟按钮,如图5-21所示。可以估计,三次进度条方块延伸至最大值的时间分别为:2秒钟、5秒钟和10秒钟。

图5-21 运行结果
5.13 GroupBox控件
框架(GroupBox)控件可以在工具箱的【容器】列表(或者【所有Windows窗体】列表)中找到。
GroupBox控件主要用于组织用户界面,组成一个控件组。组成控件组的方法是:首先添加一个框架控件,然后把其他控件放置在框架中,这些控件就组成了一个控件组,当框架移动时,控件也跟着移动;框架隐藏时,控件也一起隐藏。框架控件最常用的属性有Text属性和Visible属性。
GroupBox控件的Text属性标识框架的标题,器作用主要是方便用户了解该框架的用途,一般在设计用户界面时直接使用属性窗口设置,也可以编写代码设置:
//*************************************************************************
GroupBox.Text = "请选择月份:"; // 设置GroupBox的标题
//*************************************************************************
GroupBox控件的Visible属性用于设置框架控件是否可见,这和其他控件的Visible属性是一样的,这里就不再重复介绍。
5.14 Panel控件
面板(Panel)控件可以在工具箱的【容器】列表(或者【所有Windows窗体】列表)中找到。
Panel控件是一个用来包含其他控件的控件,这一点类似于GroupBox控件。它把控件组合在一起,放在同一个面板上,这样将更容易管理这些控件。例如,当禁用面板时该面板上的所有控件都将被禁用。
除了所有控件共有的一些属性外,面板控件特有的重要属性有AutoScroll属性和BorderStyle属性。
1. AutoScroll属性
Panel控件派生于ScrollableControl类,因此具有AutoScroll属性,其默认值为False。当一个面板的可用区域上有过多的控件需要显示,就应当将AutoScroll属性设为True。这样就可以滚动所有

的控件了。
2. BorderStyle属性
Panel控件的BorderStyle属性用于控制Panel控件是否显示边框,其默认值为None,表示不显示边框,可以将BorderStyle属性设为其他值,这样使用面板可视化地组合相关的控件,从而使用户界面更加友好。如图5-22是将Panel控件的BorderStyle属性值设为Fixed3D的情况。

图5-22 Panel控件
5.15 RadioButton控件
大多数程序需要给用户提供选择,如简单的“是/否”选项等。Visual C# 2008提供的用于选择的控件除了前面介绍的列表框和组合框,还有单选按钮(RadioButton)控件和复选框(CheckBox)控件,下面首先介绍单选按钮控件。
单选按钮的左边有一个 图标,一般来说,它总是成组(单选按钮组)出现的,用户在一组单选按钮中必须选择其中的一项,并且最多只能选择一项。当某一项被选中后,其左边的小圆圈中出现一个黑点 。
5.15.1 RadioButton控件的常用属性与事件
RadioButton控件的Name等属性与前面介绍的其他控件类似,这里仅介绍单选按钮最重要的一个属性——Checked属性,它有两个属性值:True和False,True表示该单选按钮被选中( ),False表示未被选中( )。
RadioButton控件最重要的事件是CheckedChanged事件,当用户更改单选按钮的状态时触发改事件,即以下两种情况都会触单选按钮的CheckedChanged事件:
(1)单选按钮由未被选中( )变成被选中( )。
(1)单选按钮由被选中( )变成未被选中( )。
5.15.2 RadioButton控件组
因为单选按钮只能选择其一,如果在程序中需要用到多组相互独立的单选按钮,则可以使用GroupBox控件对其进行分组,处于同一GroupBox控件内的单选按钮为一组。如下图5-23所示的具有两组单选按钮,每组均能选择其一。

图5-23 单选按钮组
5.15.3 RadioButton控件使用示例
【例5-5】 选择年份、月份、日期和小时、分钟、秒钟在文本框中分别显示当前日期的年份、月份、日期和小时、分钟、秒钟。
(1)首先新建一个名为“RadioButton”Windows应用程序,然后为窗体添加2个GroupBox控件和6个RadioButton控件,再按照表5-4设置好窗体和窗体上各控件的属性后,设计完的程序界面如图5-24所示。

图5-24 程序界面
窗体和窗体上各控件的属性设置如表5-4所示。
表5-4 窗体和各控件的属性设置
控件类型 控件名称 属性 设置结果
Form Form1 Name frmRadioButton
Text RadioButton
GroupBox GroupBox1 Text 选择年月日:
GroupBox2 Text 选择时分秒:
TextBox TextBox1 Name txtDate
ReadOnly True
TextBox2 Name txtTime
ReadOnly True
RadioButton RadioButton1 Name rbtnYear
Text 年份
RadioButton2 Name rbtnMonth
Text 月份
RadioButton3 Name rbtnDay
Text 日期
RadioButton4 Name rbtnHour
Text

小时
RadioButton5 Name rbtnMinute
Text 分钟
RadioButton6 Name rbtnSecond
Text 秒钟
(2)设计好用户界面后,编写RadioButton控件【年份】、【月份】、【日期】、【小时】、【分钟】和【秒钟】的CheckedChanged事件代码。
首先编写【年份】单选按钮的CheckedChanged事件代码如下:
//*************************************************************************
// 六个单选按钮的CheckedChanged事件代码
//*************************************************************************
private void rbtnYear_CheckedChanged(object sender, EventArgs e)
{
txtDate.Text = System.DateTime.Now.Year.ToString();
}

private void rbtnMonth_CheckedChanged(object sender, EventArgs e)
{
txtDate.Text = System.DateTime.Now.Month.ToString();
}

private void rbtnDay_CheckedChanged(object sender, EventArgs e)
{
txtDate.Text = System.DateTime.Now.Day.ToString();
}

private void rbtnHour_CheckedChanged(object sender, EventArgs e)
{
txtTime.Text = System.DateTime.Now.Hour.ToString();
}

private void rbtnMinute_CheckedChanged(object sender, EventArgs e)
{
txtTime.Text = System.DateTime.Now.Minute.ToString();
}

private void rbtnSecond_CheckedChanged(object sender, EventArgs e)
{
txtTime.Text = System.DateTime.Now.Second.ToString();
}
//*************************************************************************
//*************************************************************************
(3)编写完程序代码后,运行程序,然后分别选择【月份】和【秒钟】单选按钮,运行结果如图5-25所示。

图5-25 运行结果
5.16 CheckBox控件
复选框(CheckBox)的左边有一个 图标,使用复选框列出可供用户选择的选项,用户可以根据需要选定其中的一项或者多项。当某一项被选中后,其左边的小方框中出现一个对号 。
复选框的属性与单选按钮的基本相同,同样具有Checked属性,当该属性为True时表示该单选按钮被选中( ),为False时表示未被选中( )。
5.17 TabControl控件
当需要在一个窗体内放置几组相对独立而又数量较多的控件时,可以使用TabControl控件,该控件有若干个选项卡,每个选项卡关联着一个页面,如图5-26所示的Windows操作系统的网络连接属性对话框,就是采用了这种设计方式,可以看出它共有【常规】、【验证】和【高级】三个选项卡,关联着三个不同的页面。

图5-26 带选项卡的窗口
TabControl控件可以在工具箱的【容器】列表(或者【所有Windows窗体】列表)中找到。
TabControl控件最重要的属性就是TabPages属性,使用该属性可以设定该控件包含的页面。设定页面的方法是:在窗体上添加一个TabControl控件,然后找到TabControl控件的 属性,再单击右边的 按钮,将弹出如图5-27所示的【TabPage集合编辑

相关文档
最新文档