第5章 内部常用控件

  • 格式:pdf
  • 大小:348.75 KB
  • 文档页数:17

第 5 章 内部常用控件 控件可分以为内部控件和外部控件两大类。内部控件是 VB 提供的控件,显示在工具箱中, 不可删除。内部控件又分为一般类、选择类和图形图像类控件。在一般类控件中有标签、文本 框、命令按钮和时钟等。外部控件可以分为 Activex 控件和可插入对象。Activex 控件是由系 统或第三方提供的,这些控件通常都是针对某一具体问题提供强大的功能,例如,播放影片的 MediaPlayer 控件、可提供 Windows 通用对话框的 CommnoDialog 控件、可连接数据库的 ADO 控 件等。可插入对象是由系统其他应用程序提供的,如 Word 所提供的 Ducoment(文档对象) Excel 所提供的 Sheet(电子表格)、PowerPoint 所提供的 Show(文稿演示对象)等。

5.1 控件数组和滚动条控件

5.1.1 焦点和 Tab 键的顺序

焦点和 Tab 键的顺序是程序界面设计中的重要概念,Tab 键顺序设计的好坏,对于应用程 序的使用有着重要的意义。

1. 焦点和对象接收焦点的条件 (1)什么是焦点:焦点决定在任一时刻由哪一个对象接收用户信息。只有当对象具有焦点 时,才可以接收键盘输入信息。 在 Windows 环境中,可以有多个应用程序、多个窗口、多个控件对象,但在同一时间焦点 只有一个。 “拥有焦点”的对象通常会以突出显示标题或标题栏来表示。焦点的定位可由用户来 完成,也可由程序代码来完成。 例如,当同时运行多个应用程序时,只有具有焦点的应用程序才具有激活的标题栏,并能 接受键盘的输入。当打开多个窗体时,只有具有焦点的窗体才是活动窗体。在活动窗体中,任 一时刻都将只有一个控件具有焦点,即处于激活状态,并能接受键盘的输入。 只有当活动窗体的所有控件都不具有焦点时,窗体才具有焦点。 对于某些对象,是否具有焦点可以通过某些特征看出来。例如,当某个命令按钮具有焦点 时,标题周围的边框将突出显示 (2)对象接收焦点的条件:对于某一对象能否接收焦点,取决于该对象的 Enabled 和 Visible 属性的取值。Enabled 属性允许对象响应键盘、鼠标等事件。Visible 属性则决定对象 是否显示在屏幕上。只有这两个属性的取值同时均为 True 时,该对象才能接收焦点。 注意: 框架(Frame)控件、 标签(Label)控件、 菜单(Menu)控件、 线形(Line)控件、 形状(Shape) 控件、图像(Image)控件、数据(Data)控件和定时器(Timer)控件等都不能接收焦点。

2. Tab 键的顺序 当按下 Tab 键时,焦点在窗体中的各控件间移动的顺序。每个窗体都具有相应的 Tab 键的 顺序。默认情况下,Tab 键的顺序与控件对象的建立顺序相同。 例如:依次建立了三个名字分别为 Textl、Text2 和 Text3 的文本框。当执行应用程序时, Textl 首先具有焦点。当我们按下 Tab 键时,焦点将按照控件建立的顺序在控件间移动,即按 一下 Tab 键,焦点将从 Textl 移至 Text2,再按一下 Tab 键,焦点将移至 Text3。129

通过设置控件对象的 TabIndex 属性值可以改变 Tab 键的顺序。 如果一个控件的 Tab 键顺序 位置发生了改变,其他控件的 Tab 键顺序位置将被自动重新编号。 对于不能接收焦点的控件对象,无效的和不可见的控件,以及 TabStop 属性设为 False 的对象,不会被包含在 Tab 键顺序中。当按下 Tab 键时,这些控件将被自动跳过。

3. 与焦点有关的事件和方法 由于在 Windows 和 Windows 的应用程序中, 某一时刻只能有一个窗体或控件对象具有焦点, 所以当窗体或控件对象失去焦点或获得焦点时,会产生相应的事件。当对象得到焦点时,将激 发 GotFocus 事件;反之,当对象失去焦点时,将激发 LostFocus 事件。多数控件都支持这两 个事件。SetFocus 方法可用来设定具有焦点的对象。 (1)LostFocus 事件:当一个窗体或对象失去焦点,而另一个窗体或对象获得焦点时,会 触发 LostFocus(失去焦点)事件。原来具有焦点的窗体或控件对象将产生 LostFocus 事件。 (2)GotFocus 事件:当一个窗体或对象获得焦点时,会触发 GotFocus 事件。 (3)SetFocus 方法:为对象设置焦点,执行该方法后,对象将获得焦点。

5.1.2 控件数组 1.什么是控件数组 控件数组是由一组相同类型的控件组成。它们共用一个相同的控件名称(即“名称”属性 必须相同),具有基本相同的属性设置。当建立控件数组时,系统给每个元素赋予了一个惟一的 索引号(Index),即下标,下标值由 Index 属性指定。通过“属性”窗口的 Index 属性,可以知 道该控件的下标是多少,第 1 个下标是 0。也就是说,控件数组的名字由“名称”属性指定, 而数组中的每个元素则由 Index 属性指定。例如:控件数组 BN(4)表示名称为 BN 的控件数组中 的第 5 个元素。在设计阶段,可以改变控件数组元素的 Index 属性,但不能在运行时改变。 控件数组适用于若干个控件执行相似操作的场合,它通过数组名和括号中的下标来引用。 控件数组共享同样的事件过程。例如,控件数组 BN 有 4 个命令按钮,不管单击哪个命令按钮, 都会调用同一个事件过程。与普通数组一样,控件数组的下标也在圆括号中,例如 BN(0)。为 了区分控件数组中的各个元素,VB 会把下标值传送给过程。例如,单击上述控件数组中的任意 命令按钮时,会调用如下的事件过程。通过按钮的 Index 属性,可以确定用户单击了哪个按钮, 并可在对应的过程中进行有关的编程。例如:下面这段程序段表示了,如果单击了 BN(1)按钮, 则该按钮的上边会显示“单击的是第 2 个按钮”文字。 Private Sub BN_Click(Index As Integer) If Index=1 then BN(Index).Caption=”单击的是第 2 个按钮” Endlf End Sub

2.创建控件数组的方法 (1)方法一:将几个相同类型控件的 Index 属性设置为不同的非 0 数,再将它们的名称改 为一样。 (2)方法二:在进行复制粘贴时创建控件数组的步骤如下。 ◎ 在窗体上创建一个控件对象,可进行控件名称的属性设置,这是创建的第 1 个控件数组 元素。选中该控件对象,将选中的控件对象复制到剪贴板中。130

◎ 选中控件数组元素所在的窗体,再进行“粘贴”操作,在进行粘贴操作时,会弹出一个 提示框,例如:控件元素为按钮的提示框如图 5-1-1 所示。 ◎ 单击“是”按钮后,就建立了一个控件数组元素;单击“否”按钮,则放弃创建控件数 组的操作,只是粘贴了一个控件对象,VB 系统自动将它的名字进行修改(序号自动增加)。 ◎ 再进行若干次粘贴操作, 就建立了所需个数 的控件数组元素。 (3)方法三:在给控件对象命名时创建控件数组 的步骤如下。 ◎ 在窗体上创建作为数组元素的各控件对象。 ◎ 单击要包含到数组中的某个控件,将其激 活。再进行控件名的属性设置(例如将它命名为“按钮” ),这是创建的第 1 个控件数组元素。 ◎ 单击要包含到数组中的另一个控件,再在其“属性”窗口内改变它的名称,使它的名称 与第 1 个控件的名称一样。此时也会弹出一个提示框。单击“是”按钮后,就建立了一个控件 数组元素。 ◎ 再进行若干次上述操作后,就建立了所需个数的控件数组元素。

3.动态控件数组 动态控件数组可以在程序运行中动态地增加或删除控件,创建动态控件数组的方法如下。 (1)在窗体上创建作为数组元素的一个控件对象,设置该控件对象的 Index 属性值为 0, 表明该控件对象为数组,也可以进行控件对象名称的设置(例如将它命名为“按钮” )。这是创 建的第 1 个控件数组元素。 (2) 在程序中, 使用 Load 语句添加多个控件数组的其他数组元素; 也可以通过使用 UnLoad 语句删除一些后添加的数组元素。Load 语句和 UnLoad 语句的格式如下。 【格式】Load 对象名称(Index 数值) 【格式】UnLoad 对象名称(Index 数值) (3)在程序中,利用控件数组元素的 Left、Top、Width 和 Height 属性来确定每个添加控 件数组元素的位置和大小等。同时,将它们的 Visible 属性设置为 True,使它们可见。TabIndex (焦点的序号)属性的数值也需要重新设置。 控件数组建立后,只要将该控件数组元素的 Index 属性值改为空,即可删除该控件数组。

4.控件数组的属性 (1)LBound 属性:返回控件数组中控件的索引上界,参看第 5 章第 5.1 节有关内容。 (2)UBoun 属性:返回控件数组中控件的索引下界,参看第 5 章第 5.1 节有关内容。 (3)TabIndex 属性:获取或设置父窗体中大部分对象的 Tab 键的次序。它的取值为 0 到 (n-1) 的整数,这里 n 是窗体中有 TabIndex 属性的控件的个数。给该属性赋一个小于 0 的 值时,会产生错误。 (4)TabStop 属性:获取或设置一个值,该值用来指示是否能够使用 Tab 键来将焦点从一 个对象移动到另一个对象。 当属性值为 True 时, 表示指定对象能够获得焦点; 当属性值为 False 时,表示当用户按下 Tab 键时,将跨越该对象,虽然该对象仍然在实际的 Tab 键顺序中,按 照 TabIndex 属性的决定,保持其位置。系统默认为 True。该属性能够在窗体的 Tab 键次序上 加入或删除一个控件。例如,如果要使用文本框控件对象输入文字,那么将其 TabStop 属性设

图 5-1-1 提示框