為用戶提供選擇的控件
大多數(shù)應(yīng)用程序需要向用戶提供選擇,如簡(jiǎn)單的“Yes/No”選項(xiàng)、或者從包含成百個(gè)可能性的列表中進(jìn)行選擇。Visual Basic 包含幾種用于提供選擇的標(biāo)準(zhǔn)控件。下列表格總結(jié)了這些控件及其用途。
用 CheckBox 選擇單個(gè)選項(xiàng)
CheckBox 表明一個(gè)特定的狀態(tài)是選定 (on) 還是清除 (off)。在應(yīng)用程序中使用 CheckBox 為用戶提供了“True/False”或“yes/no”的選擇。因?yàn)镃heckBox 彼此獨(dú)立工作,所以用戶可以同時(shí)選擇任意多個(gè) CheckBox。例如,在圖 3.9 中,可同時(shí)選定粗體和斜體。
CheckBox 應(yīng)用程序
這個(gè)例子使用一個(gè) CheckBox 來決定文本用普通字體還是用斜體字顯示。關(guān)于此例的工作版本,請(qǐng)參閱應(yīng)用程序示例 Controls.vbp 中的 Check.frm。如圖 3.10 所示,此應(yīng)用程序有一個(gè) TextBox,一個(gè) Label,一個(gè)CommandButton 和兩個(gè) CheckBox。
下表列出了應(yīng)用程序中的對(duì)象的屬性設(shè)置。
選定粗體或斜體時(shí),CheckBox 的 Value 屬性值設(shè)置為 1 ,不選定時(shí)為 0。缺省 Value 值為 0,所以除非改變 Value 屬性值,否則第一次顯示時(shí)不會(huì)選定 CheckBox??梢杂贸A?vbChecked 和 vbUnchecked 表示數(shù)值 1 和0。
check box 應(yīng)用程序中的事件
當(dāng)單擊 CheckBox 時(shí),會(huì)發(fā)生 CheckBox 的 Click 事件。此事件過程測(cè)試是否選定 CheckBox(即是否 Value = vbChecked)。如果選定,通過設(shè)置 Font對(duì)象的 Bold 或 Italic 屬性,將文本轉(zhuǎn)換為粗體或斜體;該 Font 對(duì)象是由TextBox 的 Font 屬性返回的。
Private Sub chkBold_Click ()
If ChkBold.Value = vbChecked Then '如果選定。
txtDisplay.Font.Bold = True
Else '如果沒有選定。
txtDisplay.Font.Bold = False
End If
End Sub
Private Sub chkItalic_Click ()
If ChkItalic.Value = vbChecked Then '如果選定。
txtDisplay.Font.Italic = True
Else '如果沒有選定。
txtDisplay.Font.Italic = False
End If
End Sub
用選項(xiàng)按鈕進(jìn)行選項(xiàng)分組
選項(xiàng)按鈕表示給用戶一組兩個(gè)或更多的選擇。但是,不同于 CheckBox,選項(xiàng)按鈕總是作為一組的組成部分工作的;因此,選擇一個(gè)選項(xiàng)按鈕就會(huì)立即清除該組中的其它按鈕。定義一個(gè)選項(xiàng)按鈕組,告訴用戶“這是一組選擇,從中選一個(gè),而且只選一個(gè)”。
例如,在圖 3.11 所示的選項(xiàng)按鈕組中,用戶只能在三個(gè)選項(xiàng)按鈕中選擇一個(gè)。
創(chuàng)建選項(xiàng)按鈕組
直接放在一個(gè)窗體中(也就是不在 Frame 或 PictureBox 中)的所有的選項(xiàng)按鈕構(gòu)成一組。如果想創(chuàng)建別的選項(xiàng)按鈕組,必須將其中一些選項(xiàng)按鈕組放到 Frame 或 PictureBox 中去。
所有在給定的 Frame 中的選項(xiàng)按鈕,組成一個(gè)獨(dú)立的組,在 PictureBox 中的所有選項(xiàng)按鈕也是如此。用這種方法生成一個(gè)獨(dú)立的組時(shí),總是要先畫好一個(gè) Frame 或 PictureBox ,然后,將選項(xiàng)按鈕畫到里面。圖 3.12 顯示了一個(gè)具有兩個(gè)選項(xiàng)按鈕組的窗體。
在 Frame 中畫了一組選項(xiàng)按鈕后,用戶只能在組內(nèi)選擇一個(gè)選項(xiàng)按鈕。要在 Frame 中為控件分組,請(qǐng)按照以下步驟執(zhí)行:
1. 在“工具箱”中選擇 Frame 控件,并在窗體上畫出 Frame。
2. 在“工具箱”中選擇 OptionButton 控件,并在 Frame 內(nèi)畫出控件。
3. 如果還想在 Frame 中增加選項(xiàng)按鈕,重復(fù)步驟 2。先畫 Frame ,再在 Frame 上畫每個(gè)控件,這樣移動(dòng) Frame 時(shí)控件會(huì)一起移動(dòng)。如果將已經(jīng)存在的控件移到 Frame 上,此控件不會(huì)和 Frame 一起移動(dòng)。
注意 如果將已存在的控件分組到一個(gè) Frame 中去,可以選擇這些控件,然后剪貼到 Frame 或 Picture 控件上去。
控件的容器
當(dāng)控件是獨(dú)立的對(duì)象時(shí),窗體和控件之間存在著某種父子關(guān)系。圖 3.12 表明 選項(xiàng)按鈕怎樣才能包含在一個(gè)窗體或一個(gè) Frame 控件中。
要理解容器的概念,首先要把所有的控件都想象為所在窗體的孩子。實(shí)際上,大多數(shù)控件都支持只讀 Parent 屬性,它的值就是控件所在的窗體。作為孩子,控件決定其在父窗體上的位置。控件的 Left 屬性和 Top 屬性是相對(duì)父窗體而言,且控件不能移出父窗體的邊界。移動(dòng)容器的同時(shí)也移動(dòng)了控件,因此控件與容器的相對(duì)位置不變(即控件的 Left 屬性和 Top 屬性不變)。
選定或禁止選項(xiàng)按鈕
一個(gè)選項(xiàng)按鈕可以用以下方法選擇:
1.在運(yùn)行期間用鼠標(biāo)單擊選項(xiàng)按鈕。
2.用Tab鍵定位到選項(xiàng)按鈕組,然后在組內(nèi)使用方向鍵(箭頭鍵)定位選項(xiàng)按鈕。
3.用代碼將它的 Value 屬性設(shè)置為 True:optChoice.Value = True
4.使用在 Label 的標(biāo)題中指定的快捷鍵。
5.要使某個(gè)按鈕成為選項(xiàng)按鈕組中的缺省按鈕,只要在設(shè)計(jì)時(shí)將其 Value屬性設(shè)置成 True。它保持被選中狀態(tài),直到用戶選擇另一個(gè)不同的選項(xiàng)按鈕或用代碼改變它。
大多數(shù)應(yīng)用程序需要向用戶提供選擇,如簡(jiǎn)單的“Yes/No”選項(xiàng)、或者從包含成百個(gè)可能性的列表中進(jìn)行選擇。Visual Basic 包含幾種用于提供選擇的標(biāo)準(zhǔn)控件。下列表格總結(jié)了這些控件及其用途。
用 CheckBox 選擇單個(gè)選項(xiàng)
CheckBox 表明一個(gè)特定的狀態(tài)是選定 (on) 還是清除 (off)。在應(yīng)用程序中使用 CheckBox 為用戶提供了“True/False”或“yes/no”的選擇。因?yàn)镃heckBox 彼此獨(dú)立工作,所以用戶可以同時(shí)選擇任意多個(gè) CheckBox。例如,在圖 3.9 中,可同時(shí)選定粗體和斜體。
CheckBox 應(yīng)用程序
這個(gè)例子使用一個(gè) CheckBox 來決定文本用普通字體還是用斜體字顯示。關(guān)于此例的工作版本,請(qǐng)參閱應(yīng)用程序示例 Controls.vbp 中的 Check.frm。如圖 3.10 所示,此應(yīng)用程序有一個(gè) TextBox,一個(gè) Label,一個(gè)CommandButton 和兩個(gè) CheckBox。
下表列出了應(yīng)用程序中的對(duì)象的屬性設(shè)置。
選定粗體或斜體時(shí),CheckBox 的 Value 屬性值設(shè)置為 1 ,不選定時(shí)為 0。缺省 Value 值為 0,所以除非改變 Value 屬性值,否則第一次顯示時(shí)不會(huì)選定 CheckBox??梢杂贸A?vbChecked 和 vbUnchecked 表示數(shù)值 1 和0。
check box 應(yīng)用程序中的事件
當(dāng)單擊 CheckBox 時(shí),會(huì)發(fā)生 CheckBox 的 Click 事件。此事件過程測(cè)試是否選定 CheckBox(即是否 Value = vbChecked)。如果選定,通過設(shè)置 Font對(duì)象的 Bold 或 Italic 屬性,將文本轉(zhuǎn)換為粗體或斜體;該 Font 對(duì)象是由TextBox 的 Font 屬性返回的。
Private Sub chkBold_Click ()
If ChkBold.Value = vbChecked Then '如果選定。
txtDisplay.Font.Bold = True
Else '如果沒有選定。
txtDisplay.Font.Bold = False
End If
End Sub
Private Sub chkItalic_Click ()
If ChkItalic.Value = vbChecked Then '如果選定。
txtDisplay.Font.Italic = True
Else '如果沒有選定。
txtDisplay.Font.Italic = False
End If
End Sub
用選項(xiàng)按鈕進(jìn)行選項(xiàng)分組
選項(xiàng)按鈕表示給用戶一組兩個(gè)或更多的選擇。但是,不同于 CheckBox,選項(xiàng)按鈕總是作為一組的組成部分工作的;因此,選擇一個(gè)選項(xiàng)按鈕就會(huì)立即清除該組中的其它按鈕。定義一個(gè)選項(xiàng)按鈕組,告訴用戶“這是一組選擇,從中選一個(gè),而且只選一個(gè)”。
例如,在圖 3.11 所示的選項(xiàng)按鈕組中,用戶只能在三個(gè)選項(xiàng)按鈕中選擇一個(gè)。
創(chuàng)建選項(xiàng)按鈕組
直接放在一個(gè)窗體中(也就是不在 Frame 或 PictureBox 中)的所有的選項(xiàng)按鈕構(gòu)成一組。如果想創(chuàng)建別的選項(xiàng)按鈕組,必須將其中一些選項(xiàng)按鈕組放到 Frame 或 PictureBox 中去。
所有在給定的 Frame 中的選項(xiàng)按鈕,組成一個(gè)獨(dú)立的組,在 PictureBox 中的所有選項(xiàng)按鈕也是如此。用這種方法生成一個(gè)獨(dú)立的組時(shí),總是要先畫好一個(gè) Frame 或 PictureBox ,然后,將選項(xiàng)按鈕畫到里面。圖 3.12 顯示了一個(gè)具有兩個(gè)選項(xiàng)按鈕組的窗體。
在 Frame 中畫了一組選項(xiàng)按鈕后,用戶只能在組內(nèi)選擇一個(gè)選項(xiàng)按鈕。要在 Frame 中為控件分組,請(qǐng)按照以下步驟執(zhí)行:
1. 在“工具箱”中選擇 Frame 控件,并在窗體上畫出 Frame。
2. 在“工具箱”中選擇 OptionButton 控件,并在 Frame 內(nèi)畫出控件。
3. 如果還想在 Frame 中增加選項(xiàng)按鈕,重復(fù)步驟 2。先畫 Frame ,再在 Frame 上畫每個(gè)控件,這樣移動(dòng) Frame 時(shí)控件會(huì)一起移動(dòng)。如果將已經(jīng)存在的控件移到 Frame 上,此控件不會(huì)和 Frame 一起移動(dòng)。
注意 如果將已存在的控件分組到一個(gè) Frame 中去,可以選擇這些控件,然后剪貼到 Frame 或 Picture 控件上去。
控件的容器
當(dāng)控件是獨(dú)立的對(duì)象時(shí),窗體和控件之間存在著某種父子關(guān)系。圖 3.12 表明 選項(xiàng)按鈕怎樣才能包含在一個(gè)窗體或一個(gè) Frame 控件中。
要理解容器的概念,首先要把所有的控件都想象為所在窗體的孩子。實(shí)際上,大多數(shù)控件都支持只讀 Parent 屬性,它的值就是控件所在的窗體。作為孩子,控件決定其在父窗體上的位置。控件的 Left 屬性和 Top 屬性是相對(duì)父窗體而言,且控件不能移出父窗體的邊界。移動(dòng)容器的同時(shí)也移動(dòng)了控件,因此控件與容器的相對(duì)位置不變(即控件的 Left 屬性和 Top 屬性不變)。
選定或禁止選項(xiàng)按鈕
一個(gè)選項(xiàng)按鈕可以用以下方法選擇:
1.在運(yùn)行期間用鼠標(biāo)單擊選項(xiàng)按鈕。
2.用Tab鍵定位到選項(xiàng)按鈕組,然后在組內(nèi)使用方向鍵(箭頭鍵)定位選項(xiàng)按鈕。
3.用代碼將它的 Value 屬性設(shè)置為 True:optChoice.Value = True
4.使用在 Label 的標(biāo)題中指定的快捷鍵。
5.要使某個(gè)按鈕成為選項(xiàng)按鈕組中的缺省按鈕,只要在設(shè)計(jì)時(shí)將其 Value屬性設(shè)置成 True。它保持被選中狀態(tài),直到用戶選擇另一個(gè)不同的選項(xiàng)按鈕或用代碼改變它。

