在优化一个软件时,发现了大量同类控件的属性设置问题。这些控件都具有相同的属性,需要编写大量重复的代码,非常难看,一旦改变,还需要全部重新写上一遍,效率非常低。于是,突发奇想,并借助CallByName函数,构造了一个通用的控件属性设置函数,节约了很多程序,有利于生成高性能的运行代码。
一、函数构造
- '通用控件属性设置函数
- '参数说明:Frm,控件所在窗体;CtrlName,Frm窗体上的控件名字;LMin,Lmax分别是控件的最小、最大编号;cPropertyName,表示要设置的属性名称;bProperty,表示要设置的控件属性。
- ' 作 者:Chenjl1031(东方之珠)
- ' 编写时间:2008.9.28
- Public Function SetControlProperty(Frm As Form, ByVal CtrlName As String, ByVal LMin As Long, ByVal Lmax As Long, ByVal cPropertyName As String, ByVal bProperty As Variant)
- Dim comCtrl As Control '通用控件
- Dim comCtrlName As String '通用控件名字
- For Each comCtrl In Frm '枚举窗体Frm上的控件
- If InStr(comCtrl.Name, CtrlName) > 0 Then '是否指定控件名
- comCtrlName = comCtrl.Name '获取控件名称
- Mid(comCtrlName, 1, Len(CtrlName)) = Space(Len(CtrlName)) '获取控件编号
- If (Val(comCtrlName) >= LMin And Val(comCtrlName) <= Lmax) Then '指定范围内的控件
- CallByName comCtrl, cPropertyName, VbLet, bProperty '设置属性
- End If
- End If
- Next
- End Function
二、调用方法
例如:要将下面自身窗体中20个Image控件设置为不可见,只须写上一行:
- Call SetControlProperty(Me, "Image", 1, 20, "Visible", False)
非常方便;当属性改变时,即这20个Image控件要全部可见,只须写上一行:
- Call SetControlProperty(Me, "Image", 1, 10, "Visible", True)
Image1.Visible = False
Image2.Visible = False
Image3.Visible = False
Image4.Visible = False
Image5.Visible = False
Image6.Visible = False
Image7.Visible = False
Image8.Visible = False
Image9.Visible = False
.......................
Image20.Visible = False
再如:要将窗体Form1中下面10个图片框的背景色全部设置成&H8000000F,只须:
Call SetControlProperty(Form1, "Picture", 1, 10, "BackColor",&H8000000F)
Picture1.BackColor = &H8000000F
Picture2.BackColor = &H8000000F
Picture3.BackColor = &H8000000F
...............................
Picture10.BackColor = &H8000000F
三、其它
该函数一般可以放在标准模块中。当然,也可以编写成ActiveX DLL。