VB6因为简单易用,受到很多朋友的喜欢。可是也有人说它功能简单,没有给开发者提供足够的 发挥余地。比如不能方便地继承现有控件而派生出自己的控件。(什么?写ActiveX控件?太麻烦了吧。 要花大量时间在接口的设计和实现上,而且你不想让你的软件发布时带一堆OCX控件吧?)其实还是有办 法的,我们可以利用VB6里的类模块实现对控件的特殊控制和事件响应。本文介绍使用类模块把普通的 Label控件变成窗体动态分割条。
图1 带分隔条的窗体
初识类模块
类模块其实是一个对象的定义,封装了一些属性和方法,使用前需要生成一个实例:
’生成类模块clsTest的一个实例test
Dim test as new clsTest
然后可以使用类模块的方法:
test.DoSomthing() ’调用test 的方法DoSomthing()
一个简单的例子
做一个鼠标移上去后自动获得焦 点并将内容选中的“聪明”编辑框。
1、新建一工程,在[工程]菜单中,选择[添 加类模块],添加一个类模块,更改其名称为clsTest。
2、进入类模块编辑界面(如图2)。
图2 编辑类模块
在左边的下拉框中 选择“通用”,键入以下代码:
’定义一个带事件的文本框变量
Dim WithEvents MyText As TextBox
’保存文本框是否获得焦点的布尔变量
Dim bSetted As Boolean
’自己定义的类模块的方法,传入参数是文本框。
Public Sub BindText(t As TextBox)
’将文本框变量设置为传入的文本框,即是对传入文本框的引 用
Set MyText = t
End Sub
3、在左边的下拉框中选择“Class”,在右边下拉框中选择Initialize,这是类模块 的初始化事件,可以在这里写自己的初始化代码。VB会自动为我们添加一个事件子程序。我们要做的就 是在其中添上自己的代码。其实这一步略过也没什么影响,不过对变量进行初始化是一个好习惯。
Private Sub Class_Initialize()
’将文本框变量初始化Nothing
Set MyText = Nothing
bSetted = False
End Sub
4、在左边的 下拉框中选择“MyText”,注意到了吗,它就是我们在第2步定义的带事件的文本框变量。VB 把它加进来了,再到右边下拉框中点击下拉按钮,呵呵,看到什么了?原来是我们熟悉的TextBox的所有 事件!只不过这里的MyText文本框并不实际存在,只是一个代
号,等着你给它指定一个实际 的文本框呢。
添加事件响应代码,这就不用我说了吧。
Private Sub MyText_GotFocus()
bSetted = True
End Sub
Private Sub MyText_LostFocus()
bSetted = False
End Sub
’鼠标在控件上移动时,如果还没设置焦点,将 它设为焦点,
’并将内容选中
Private Sub MyText_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If (Not bSetted) Then
MyText.SetFocus
MyText.SelStart = 0
MyText.SelLength = 9999
End If
End Sub
到此,类模块宣告完毕,保存它(.cls文件)。
5、下 面就是类模块的使用,非常简单。现在一个窗体上放3 个TextBox控件,名称分别为Text1、Text2、Text3。
图3 测试类模块