学用VB控件编程(二)

软件世界

经过基础篇的学习,大家认识到控件编程首先要了解其属性、方法和事件,我们再以下面几个小项目为例,进一步加深对控件编程的了解。

能够查找英文单词并显示所在位置的程序

文本框和标签控件在VB中常用来输入和显示文本。在本例中,将用到两个文本框(text1,text2),三个标签(label1,label2,label3)和一个按钮(command1),一个复选框(check1)。设计界面如图(图1)

图1
图1

将控件各个引进窗体,各控件属性等如(图2)
图2
图2

下面为按钮(Command1)的点击事件(Click)编写代码
Private Sub Command1_Click()
Dim str As String
Dim txtstart As Integer
str = Text2.Text
txtstart = InStr(Text1.Text,str)' instr返回str在text1.text中的位置
If txtstart > 0 Then
Text1.SelStart = txtstart - 1
Text1.SelLength = Len(str)
If Check1.value=1 then
Text1.SelText = UCase(Text1.SelText)‘将选定字符串转为大写
End if
Label2.Caption = txtstart
Else
MsgBox "没有该单词!"
End If
End Sub
程序通过text2的text属性传入查找单词,通过VB内置函数instr查找。如果找到并且复选框选上,就把找到的文本转为大写,并把位置通过label2标签显示出来。如果没有找到则弹出一个提示。
通过这个例子,我们可以看到控件属性是如何在程序中读取和设置值的,以及如何提供响应事件的子程序。我们不能孤立看待控件,包括它们的属性、方法和事件,要把它们联系起来。

提高篇

1.控件数组

有时在设计同一窗体上会有若干相同,并且功能相近的控件,这时就可以用控件数组。在设计时可以通过复制粘贴,VB会询问是否生成控件数组,控件数组所有元素名称相同,相互间通过index索引来区分。
控件数组给编程带来了很多方便,如五个单选按钮数组的操作,我们可以通过一个程序来处理。
Private Sub Optname_Click(Index As Integer)
End Sub
也可以在程序运行时生成控件数组。我们将要重复使用的控件的index 设为0,通常不显示这个控件,然后在程序中通过load方法装载控件数组,下列代码生成五个单选按钮实列并显示在窗体上。
For i = 1 To 5
Load Optname(i)
Optname(i).Caption = "第" & i & "项"
Optname(i).Top = Optname(i - 1).Top+Optname(i - 1).Height + 30
Optname(i).Visible = True
Next

2.生成现有控件的引用

在使用控件的属性、方法和事件时,我们都使用这种格式:控件名.属性。我们也可生成一个控件的引用,对这个引用的操作就相当于对该控件的操作。
如我们生成一个对象变量:
dim acontrol as control
然后用set语句生成Text1的引用:set acontrol = Text1
也可能在后面设置:set acontrol = Command1
这样我们对acontrol的操作就相当于对Text1或Command1的操作。
Acontrol.text="Click me" 与Text1.text="Click me" 等价
或 Acontrol.caption="Click me" 与Command1.caption="Click me" 等价
判断一个对象变量表示的控件类型,如上面的acontrol,既可以为TextBox,也可以为CommandButton,两者的属性不相同,为防止出错,必须确定类型,可以使用TypeOf语句。
If TypeOf acontrol IS TextBox then
Acontrol.text="Click me"
Else if typeof acontrol is label then
Acontrol.caption="Click me"
End if
TypeOf 后是对象变量名,然后是关键字IS,后面是控件类型名。

3.控件集合

窗体上的所有控件组成一个集合,每个控件为集合中的一个元素。可以通过For...Next扫描。如下列代码:
for each icontrol in control
if typeof icontrol is textbox then
icontrol.text="Click me"
else if typeof icontrol is label then
icontrol.coption="Click me"
end if
结果与上例一样。
通过以上实例,大家对VB控件编程有了一定了解。对于初学者,可以利用工具书和MSDN联机帮助来学习,自己找些项目来做,不用太难,要尽量自己做,完成这一步,你就会发现自己有些进步了。