用选项按钮进行选项分组

选项按钮表示给用户一组两个或更多的选择。但是,不同于 CheckBox,选项按钮总是作为一组的组成部分工作的;因此,选择一个选项按钮就会立即清除该组中的其它按钮。定义一个选项按钮组,告诉用户“这是一组选择,从中选一个,而且只选一个”。

例如,在图 3.11 所示的选项按钮组中,用户只能在三个选项按钮中选择一个。

图 3.11 选择一个选项按钮

创建选项按钮组

直接放在一个窗体中(也就是不在 Frame 或 PictureBox 中)的所有的选项按钮构成一组。如果想创建别的选项按钮组,必须将其中一些选项按钮组放到 Frame 或 PictureBox 中去。

所有在给定的 Frame 中的选项按钮,组成一个独立的组,在 PictureBox 中的所有选项按钮也是如此。用这种方法生成一个独立的组时,总是要先画好一个 Frame 或 PictureBox ,然后,将选项按钮画到里面。图 3.12 显示了一个具有两个选项按钮组的窗体。

图 3.12 选项按钮组

在 Frame 中画了一组选项按钮后,用户只能在组内选择一个选项按钮。

要在 Frame 中为控件分组,请按照以下步骤执行:

  1. 在“工具箱”中选择 Frame 控件,并在窗体上画出 Frame。

  2. 在“工具箱”中选择 OptionButton 控件,并在 Frame 内画出控件。

  3. 如果还想在 Frame 中增加选项按钮,重复步骤 2。

先画 Frame 再在 Frame 上画每个控件,这样移动 Frame 时控件会一起移动。如果将已经存在的控件移到 Frame 上,此控件不会和 Frame 一起移动。

注意 如果将已存在的控件分组到一个 Frame 中去,可以选择这些控件,然后剪贴到 Frame 或 Picture 控件上去。

控件的容器

当控件是独立的对象时,窗体和控件之间存在着某种父子关系。图 3.12 表明 选项按钮怎样才能包含在一个窗体或一个 Frame 控件中。

要理解容器的概念,首先要把所有的控件都想象为所在窗体的孩子。实际上,大多数控件都支持只读 Parent 属性,它的值就是控件所在的窗体。作为孩子,控件决定其在父窗体上的位置。控件的 Left 属性和 Top 属性是相对父窗体而言,且控件不能移出父窗体的边界。移动容器的同时也移动了控件,因此控件与容器的相对位置不变(即控件的 Left 属性和 Top 属性不变)。

选定或禁止选项按钮

一个选项按钮可以用以下方法选择:

要使某个按钮成为选项按钮组中的缺省按钮,只要在设计时将其 Value 属性设置成 True。它保持被选中状态,直到用户选择另一个不同的选项按钮或用代码改变它。

要禁用选项按钮,将其 Enabled 属性设置为 False。程序运行时,若此选项按钮显示模糊,表示无法选取此选项按钮。

Options 应用程序

图 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


Options 应用程序中的事件

选项应用程序对事件的响应如下:

这个方法的关键就在于使用这两个窗体级变量,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 事件中重复同样的代码。

详细信息 变量和子过程将在“编程基础”中讨论。