属性、方法和事件概述
Visual Basic 的窗体和控件是具有自己的属性、方法和事件的对象。可以把属性看作一个对象的性质,把方法看作对象的动作,把事件看作对象的响应。日常生活中的对象,如小孩玩的气球同样具有属性、方法和事件。气球的属性包括可以看到的一些性质,如它的直径和颜色。其它一些属性描述气球的状态(充气的或未充气的)或不可见的性质,如它的寿命。通过定义,所有气球都具有这些属性;这些属性也会因气球的不同而不同。
气球还具有本身所固有的方法和动作。如:充气方法(用氦气充满气球的动作),放气方法(排出气球中的气体)和上升方法(放手让气球飞走)。所有的气球都具备这些能力。
气球还有预定义的对某些外部事件的响应。例如,气球对刺破它的事件响应是放气,对放手事件的响应是升空。
如果能对气球编程的话,Visual Basic 代码将如下所示。其作用是设置气球的属性:
Balloon.Color = Red
Balloon.Diameter = 10
Balloon.Inflated = True
注意代码的语法,首先是对象 (Balloon),接着是属性 (Color),然后是赋值(Red)。重复这条语句,但是,换一个不同的值,就可以改变气球的颜色。属性也可以在程序设计阶段在“属性”窗口中设置。
调用气球的方法是这样的:
Balloon.Inflate
Balloon.Deflate
Balloon.Rise 5
它的语法与属性的语法相似,对象(一个名词)后面紧跟着方法(一个动词)。在第三个例子中有一个附加项,称为一个参数,表示气球上升的高度。一些方法有一个或多个参数,它们对执行的动作做进一步的描述。
气球对一个事件的响应如下所示:
Sub Balloon_Puncture()
Balloon.Deflate
Balloon.MakeNoise "Bang"
Balloon.Inflated = False
Balloon.Diameter = 1
End Sub
本例中代码描述了当刺穿事件发生时气球的行为:调用 Deflate 方法,然后以 "Bang"(发出的声响)为参数调用 MakeNoise 方法。因为气球已不再是充气状态,所以把 Inflated 属性置为 False,并给 Diameter 属性设置一个新值。
实际上对气球不能编程,但是,可以对 Visual Basic 的窗体或控件进行编程。作为程序员,由您作主。您决定应更改哪些属性,调用哪些方法,对哪些事件作出响应,从而得到希望的外观和行为。
设计窗体
窗体对象是 Visual Basic 应用程序的基本构造模块,是运行应用程序时与用户交互操作的实际窗口。窗体有自己的属性、事件和方法用于控制其外观和行为。
设计窗体的第一步是设置它的属性。这可以在设计时在“属性”窗口中完成,或者运行时由代码来实现。
注意 设计时,即在 Visual Basic 环境中创建应用程序的任何时刻,此时你可以操作窗体和控件,设置它们的属性,对它们的事件编程。运行时是指实际运行应用程序并与应用程序进行交互的时间。
设置窗体属性
窗体的许多属性会影响窗体的外观。Caption 属性决定窗体标题栏中显示的文本;图标属性设置在窗体最小化时显示的图标。MaxButton 和 MinButton属性决定窗体是否能最大化或最小化。通过改变 BorderStyle 属性,可以控制窗体如何调整大小。
Height 和 Width 属性决定的窗体初始大小;Left 和 Top 属性根据屏幕的左上角确定窗体的位置。WindowState 属性可以把窗体设成在启动时最大化、最小化或正常大小。
Name 属性设置窗体的名称,在代码中用这个名称引用该窗体。首次在工
程中添加窗体时,该窗体的名称被缺省为 Form1;添加第二个窗体,其名称被缺省为 Form2,以此类推。最好给 Name 属性设置一个有实际意义的名称,如给一个条目窗体命名为 "frmEntry"。
熟悉这些窗体属性,最好的办法是实践。在“属性”窗口(图 3.3)中更改窗体的一些属性,然后运行该应用程序并观察修改的效果。如果想详细了解每个属性,可以选择该属性并按 F1 键查看联机帮助。
窗体事件和方法
窗体作为对象,能够执行方法并对事件作出响应。
无论是因为用户交互,还是通过代码调整窗体的大小,都会触发一个 Resize事件。当窗体尺寸变化时,允许您在窗体上进行移动控件或调整控件大小等操作。
每当一个窗体变成活动窗体时,就会产生一个 Activate 事件;当另一个窗体或应用程序被激活时,就会产生 Deactivate 事件。这些事件对初始化或结束窗体行为十分方便。例如,在 Activate 事件中,可以编写代码突出显示一个特定文本框中的文本;在 Deactivate 事件中,可以把更改保存到一个文件或数据库中。
要使一个窗体可见,可调用 Show 方法:
Form2.Show
调用 Show 方法与设置窗体 Visible 属性为 True 具有相同的效果。
窗体的许多方法都调用文本或图形。Print、Line、Circle 和 Refresh 方法可
用于直接在窗体表面上写和画。这些方法和更多的方法将在第十二章“使用文本和图形”中详细讨论。
详细信息 关于窗体的详细信息,请参阅第六章“创建用户界面”中的“再论窗体”。
单击按钮执行操作
使用户与应用程序交互的最简便的方法是给用户提供一个按钮。可以用Visual Basic 提供的 CommandButton 控件,或利用包含图形的 Image 控件,如一个图标,来创建自己的“按钮”。
使用 CommandButton
大多数 Visual Basic 应用程序都有 CommandButton,使用户通过简单的敲击按钮来执行操作。当用户选中按钮时,不仅会执行相应操作,还会使该按钮看上去象被按下并释放一样。无论何时,只要用户单击按钮,就会调用 Click 事件过程。将代码写入 Click 事件过程,执行想要执行的动作。
在程序执行时,有多种方法可以选中 CommandButton :
用鼠标单击按钮。
按 TAB 键把焦点移到相应按钮上,然后按 SPACE 键或 ENTER 键选中该按钮。参阅本章后面的“焦点概述”。
按 CommandButton 的快捷键(ALT +下划线的字符)。
在代码中设 CommandButton 的 Value 属性为 True。 cmdClose.Value = True
在代码中调用 CommandButton 的 Click 事件。 cmdClose_Click
如果该 CommandButton 是窗体的缺省命令按钮,既使将焦点移到其它不是 CommandButton 的控件上,按下回车键也会选中该按钮。在设计时,通过设置某按钮的 Default 属性为 True ,指定它为窗体的缺省CommandButton 。
如果该 CommandButton 是窗体的缺省的取消按钮,即使把焦点移到其它控件上,也能通过按 ESC 键选中该按钮。在设计时,通过设置某按钮的 Cancel 属性为 True,指定它为窗体的缺省的取消按钮。 所有这些操作都使 Visual Basic 调用 Click 事件过程。
“测试按钮”应用程序
利用 Caption 属性可以在按钮上显示文字,告诉用户该按钮的功能。在图3.4 中,在控件示例应用程序的测试按钮范例中包含一个 Caption 属性为"Change Signal" 的 CommandButton(此例的工作为Controls.vbp 示例应用程序中的 Buttons.frm)。
注意,S 是这个按钮的快捷键,用一条下划线表示。在 Caption 属性的正文内插入一个 (&) 符号,将使得此符号后面的字符成为该按钮的快捷键(例如,Change &Signal)。
用户单击 CommandButton,将执行该 CommandButton 的 Click 事件过程中的代码。在这个范例中,每次单击按钮,将变换一个不同的交通灯图标。
详细信息 关于 CommandButton 的属性的详细信息,请参阅第七章“使用Visual Basic 的标准控件”。
用于显示和输入文本的控件
Label 和 TextBox 控件是用于显示和输入文本的。让应用程序在窗体中显示文本时使用 Label,允许用户输入文本时用 TextBox。Labels 中的文本为只读文本,而 TextBox 中的文本为可编辑文本。
可由用户编辑的文本,例如一个顺序条目TextBox
字段或一个密码框
只能显示的文本,例如在窗体中标识一个Label
字段或给用户显示指令
Labels 和 TextBoxes 将在以下部分讨论:
用 Label 显示文本(vbconUsingLabels)使用 Label 控件的基本知识。
使用 TextBox(vbconWorkingWithTextBox)使用 TextBox 的基本知识。
用 Label 显示文本
Label 控件显示的文本用户不能直接修改。如 TextBox 和 ScrollBar 这些没有自己的 Caption 属性的控件,可以用 Label 标识。在 Label 中实际显示的文本是由 Caption 属性控制的,该属性可以在设计时在“属性”窗口中设置或在运行时用代码赋值。
在缺省情况下,标题是 Label 控件中唯一的可见部分。但是,如果把BorderStyle 属性设成 1(可以在设计时进行),那么 Label 就有了一个边框,看起来像一个 TextBox。还可以通过设置 Label 的 BackColor、BackStyle、ForeColor 和 Font 属性来,改变 Label 的外观。
改变 Label 尺寸以适应其内容
设计时可在“属性”窗口中指定单行 Label 的标题。但是如果要输入一个较长的或在运行时可能变化的标题,该怎么办呢?Label 提供了两种属性:AutoSize 和 WordWrap,用于帮助您改变控件尺寸以适合较长或较短的标题。
AutoSize 属性决定控件是否自动改变尺寸以适应其内容。如该属性设为True,Label 就会根据其内容进行水平方向变化,如图 3.5 所示。
WordWrap 属性使 Label 根据其内容进行垂直方向变化,而保持其宽度不变,如图3.6 所示。本例的工作版,请参阅应用程序示例 Controls.vbp 中的 WordWrap.frm。
注意 如果在 Controls.vbp 中运行AotoSize示例,就会发现为了同时使用 WordWrap,必须两个复选框都选中。这是因为,要想使 Label 的WordWrap 属性起作用,就必须设置 AutoSize 为 True。只有在一个单字的宽度超过控件的当前宽度时,Label 的宽度才会增加。
详细信息 关于 Label 控件属性的详细信息,请参阅第七章“使用 VisualBasic 的标准控件”。
使用 Text Boxes
TextBox 是一种通用控件,可以由用户输入文本或显示文本。除非把TextBox 的 Locked 属性设为 True,否则不能用 TextBox 显示不希望用户更改的文本。
TextBox 中显示的实际文本是受 Text 属性控制的。Text 属性可以用三种方式设置:设计时在“属性”窗口进行、运行时通过代码置或在运行时由用户输入。通过读 Text 属性能在运行时检索 TextBox 的当前内容。
多行 Text Box 和 Word Wrap
TextBox 在缺省情况下只显示单行文本,且不显示 ScrollBar。如果文本长度超过可用空间,则只能显示部分文本。通过设置 MultiLine 和 ScrollBars两种属性(只能在设计程序时设置),可以改变 TextBox 的外观和行为。
注意 不要把 ScrollBars 属性与 ScrollBar 控件混淆,ScrollBar 控件并不属于 TextBox,它具有自己的属性集。
把MultiLine属性设为True,可以使 TextBox 在运行时接受或显示多行文本。只要没有水平方向ScrollBar,多行TextBox 中的文本会自动按字换行。ScrollBars 属性的缺省值被设置为0(None)。自动按字换行省去用户在行尾插入换行符的麻烦。当一行文本已超过所能显示的长度时,TextBox自动将文本折回到下一行显示。
在设计时,不能在“属性”窗口输入换行符。在过程中,可以通过插入一个回车加上换行符(ANSI 字符 13 和 0)来产生一个行断点。也可以用常量 vbCrLf 插入一个回车与换行符组合。例如,下面的事件过程是在加载窗体时,把两行文本放入一个多行 TextBox (Text1) 中的示例。
Sub Form_Load ()
Text1.Text = "Here are two lines" _
& vbCrLf & "in a text box"
End Sub
使用 TextBox 中的文本
利用 TextBox 的 SelStart、SelLength 和 SelText 属性,可以控制 TextBox的插入点和选择行为。这些属性仅能在运行时使用。
当一个 TextBox 首次得到焦点时,TextBox 缺省的插入点和光标位置在文本的最左边。用户可以用键盘和鼠标移动它们。当 TextBox 失去焦点而后再得到时,插入点位置与用户最后设置的位置一样。
在有些情况下,它可能与用户设置不一致。如:在字处理应用程序中,用户会希望新字符出现在已有文本后面;在数据项应用程序中,用户会希望他的输入替换原有条目。使用 SelStart 和 SelLength 属性,用户可以根据需要改变 TextBox 的行为。
SelStart 属性是一个数字,指示文本串内的插入点,其中 0 表示最左边的位置。如果 SelStart 属性值大于或等于文本中的字符数,那么插入点将被放在最后一个字符之后,如图 3.7 所示。该例子的工作版,请参阅应用程序示例 Controls.vbp 中的 Text.frm。SelLength 属性是一个设置插入点宽度的数值。把SelLength设为大于 0 的值,会选中并突出显示从当前插入点开始的SelLength个字符。图3.8 显示选择的性能。
如果有一段文本被选中,此时用户键入的文字将替换被选中的文本。有些情况下,也可以用粘贴命令用新文本替换原有的文本。 SelText 属性是一串文本,可以在运行时给它赋值以替换当前选中的文本。如果没有选中的文本, SelText 将在当前插入点插入文本。
详细信息 关于 TextBox 控件的属性的详细信息,请参阅第七章“使用Visual Basic 的标准控件”。
详细信息 关于 TextBox 控件的属性的详细信息,请参阅第七章“使用Visual Basic 的标准控件”。
为用户提供选择的控件
大多数应用程序需要向用户提供选择,如简单的“Yes/No”选项、或者从包含成百个可能性的列表中进行选择。Visual Basic 包含几种用于提供选择的标准控件。下列表格总结了这些控件及其用途。
用 CheckBox 选择单个选项
CheckBox 表明一个特定的状态是选定 (on) 还是清除 (off)。在应用程序中使用 CheckBox 为用户提供了“True/False”或“yes/no”的选择。因为CheckBox 彼此独立工作,所以用户可以同时选择任意多个 CheckBox。例如,在图 3.9 中,可同时选定粗体和斜体。
CheckBox 应用程序
这个例子使用一个 CheckBox 来决定文本用普通字体还是用斜体字显示。关于此例的工作版本,请参阅应用程序示例 Controls.vbp 中的 Check.frm。如图 3.10 所示,此应用程序有一个 TextBox,一个 Label,一个CommandButton 和两个 CheckBox。
下表列出了应用程序中的对象的属性设置。
选定粗体或斜体时,CheckBox 的 Value 属性值设置为 1 ,不选定时为 0。缺省 Value 值为 0,所以除非改变 Value 属性值,否则第一次显示时不会选定 CheckBox。可以用常量 vbChecked 和 vbUnchecked 表示数值 1 和0。
check box 应用程序中的事件
当单击 CheckBox 时,会发生 CheckBox 的 Click 事件。此事件过程测试是否选定 CheckBox(即是否 Value = vbChecked)。如果选定,通过设置 Font对象的 Bold 或 Italic 属性,将文本转换为粗体或斜体;该 Font 对象是由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
用选项按钮进行选项分组
选项按钮表示给用户一组两个或更多的选择。但是,不同于 CheckBox,选项按钮总是作为一组的组成部分工作的;因此,选择一个选项按钮就会立即清除该组中的其它按钮。定义一个选项按钮组,告诉用户“这是一组选择,从中选一个,而且只选一个”。
例如,在图 3.11 所示的选项按钮组中,用户只能在三个选项按钮中选择一个。
创建选项按钮组
直接放在一个窗体中(也就是不在 Frame 或 PictureBox 中)的所有的选项按钮构成一组。如果想创建别的选项按钮组,必须将其中一些选项按钮组放到 Frame 或 PictureBox 中去。
所有在给定的 Frame 中的选项按钮,组成一个独立的组,在 PictureBox 中的所有选项按钮也是如此。用这种方法生成一个独立的组时,总是要先画好一个 Frame 或 PictureBox ,然后,将选项按钮画到里面。图 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 属性不变)。
选定或禁止选项按钮
一个选项按钮可以用以下方法选择:
1.在运行期间用鼠标单击选项按钮。
2.用Tab键定位到选项按钮组,然后在组内使用方向键(箭头键)定位选项按钮。
3.用代码将它的 Value 属性设置为 True:optChoice.Value = True
4.使用在 Label 的标题中指定的快捷键。
5.要使某个按钮成为选项按钮组中的缺省按钮,只要在设计时将其 Value属性设置成 True。它保持被选中状态,直到用户选择另一个不同的选项按钮或用代码改变它。
要禁用选项按钮,将其 Enabled 属性设置为 False。程序运行时,若此选项按钮变灰,表示无法选取此选项按钮。
Options 应用程序
图 3.13 所示的窗体使用选项按钮为一台计算机选择处理器类型和操作系统。当用户在组内选择了选项按钮后,Label 的标题就改变,反映当前的选择。关于此例的工作版本,请参阅应用程序示例 Controls.vbp 中的Options.frm。
下表列出了应用程序中对象属性的设置。
Options 应用程序中的事件
选项应用程序对事件的响应如下:
前三个选项按钮的 Click 事件为窗体级的 string 变量 strComputer 分配一个相应的描述。
后两个选项按钮的 Click 事件为第二个窗体级变量 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 事件中重复同样的代码。
详细信息 变量和子过程将在第五章“编程基础”中讨论。
使用 ListBox 和 ComboBox
ListBox 和 ComboBox 为用户提供了选择。按照缺省规定,选项以垂直单列方式显示,也可以设置成多列方式。如果项目数量超过 ComboBox 或ListBox 所能显示的数目,ScrollBar 自动出现在控件上。于是用户可以在列表中上下左右滚动。图 3.14 为一个单列 ListBox。
ComboBox 兼有 TextBox 和 ListBox 两者的功能。该控件允许用户通过键入文本或选择列表中的项目来进行选择。图 3.15 为一个 ComboBox。
与其它含有单值的控件相反,例如 Label 的 Caption 属性或 TextBox 的text 属性,ListBox 和 ComboBox 含有多个值或值的集合。在运行时用内置的方法增加、删除及保持集合中的值。要将几条项目添加到名为 List1 的ListBox 中,其代码如下:List1.AddItem "Paris"
List1.AddItem "New York"
List1.AddItem "San Francisco"
ListBox 和 ComboBox 是在有限空间为用户提供大量选项的有效方法。
详细信息 关于 ListBox 和 ComboBox 控件的详细信息,请参阅第七章“使用 Visual Basic 的标准控件”。
评论 {{userinfo.comments}}
{{child.content}}
{{question.question}}
提交