选项按钮表示给用户一组两个或更多的选择。但是,不同于 CheckBox,选项按钮总是作为一组的组成部分工作的;因此,选择一个选项按钮就会立即清除该组中的其它按钮。定义一个选项按钮组,告诉用户“这是一组选择,从中选一个,而且只选一个”。
例如,在图 3.11 所示的选项按钮组中,用户只能在三个选项按钮中选择一个。
图 3.11 选择一个选项按钮
直接放在一个窗体中(也就是不在 Frame 或 PictureBox 中)的所有的选项按钮构成一组。如果想创建别的选项按钮组,必须将其中一些选项按钮组放到 Frame 或 PictureBox 中去。
所有在给定的 Frame 中的选项按钮,组成一个独立的组,在 PictureBox 中的所有选项按钮也是如此。用这种方法生成一个独立的组时,总是要先画好一个 Frame 或 PictureBox ,然后,将选项按钮画到里面。图 3.12 显示了一个具有两个选项按钮组的窗体。
图 3.12 选项按钮组
在 Frame 中画了一组选项按钮后,用户只能在组内选择一个选项按钮。
要在 Frame 中为控件分组,请按照以下步骤执行:
先画 Frame 再在 Frame 上画每个控件,这样移动 Frame 时控件会一起移动。如果将已经存在的控件移到 Frame 上,此控件不会和 Frame 一起移动。
注意 如果将已存在的控件分组到一个 Frame 中去,可以选择这些控件,然后剪贴到 Frame 或 Picture 控件上去。
当控件是独立的对象时,窗体和控件之间存在着某种父子关系。图 3.12 表明 选项按钮怎样才能包含在一个窗体或一个 Frame 控件中。
要理解容器的概念,首先要把所有的控件都想象为所在窗体的孩子。实际上,大多数控件都支持只读 Parent 属性,它的值就是控件所在的窗体。作为孩子,控件决定其在父窗体上的位置。控件的 Left 属性和 Top 属性是相对父窗体而言,且控件不能移出父窗体的边界。移动容器的同时也移动了控件,因此控件与容器的相对位置不变(即控件的 Left 属性和 Top 属性不变)。
一个选项按钮可以用以下方法选择:
optChoice.Value = True
要使某个按钮成为选项按钮组中的缺省按钮,只要在设计时将其 Value 属性设置成 True。它保持被选中状态,直到用户选择另一个不同的选项按钮或用代码改变它。
要禁用选项按钮,将其 Enabled 属性设置为 False。程序运行时,若此选项按钮显示模糊,表示无法选取此选项按钮。
图 3.13 所示的窗体使用选项按钮为一台计算机选择处理器类型和操作系统。当用户在组内选择了选项按钮后,Label 的标题就改变,反映当前的选择。关于此例的工作版本,请参阅应用程序示例 Controls.vbp 中的 Options.frm。
图 3.13 选项按钮举例
下表列出了应用程序中对象属性的设置。
对象 | 属性 | 设置 |
Label | Name Caption |
lblDisplay (Empty) |
CommandButton | Name Caption |
cmdClose &Close |
First option button | Name Caption |
opt486 &486 |
Second option button | Name Caption Value |
opt586 &Pentium True |
Third option button | Name Caption |
opt686 P&entium Pro |
Frame | Name Caption |
fraSystem &Operating System |
Fourth option button | Name Caption |
optWin95 Windows 95 |
Fifth option button | Name Caption Value |
optWinNT Windows NT True |
选项应用程序对事件的响应如下:
strComputer
分配一个相应的描述。strSystem
分配一个相应的描述。这个方法的关键就在于使用这两个窗体级变量,strComputer
和 strSystem
。这两个变量具有不同的 string 值,选项按钮的最后选定就依赖于这些值。
每次选择新的选项按钮,其 Click 事件的代码就更新相应变量的值。
Private Sub opt586_Click()
strComputer = "Pentium"
Call DisplayCaption
End Sub
然后它调用一个名为 DisplayCaption 的过程,此过程把两个变量连在一起并改变 Label 的 Caption 属性。
Sub DisplayCaption()
lblDisplay.Caption = "You selected a " & _
strComputer & " running " & strSystem
End Sub
使用子过程是因为改变 Caption 属性的过程对所有五个选项按钮来说基本是一样的,只不过变量的值因情况而异。这就可以避免在每个 Click 事件中重复同样的代码。
详细信息 变量和子过程将在“编程基础”中讨论。