通用控件属性设置函数

东方之珠 2008-09-29 01:40:36
通用控件属性设置函数:
以下是部分内容。全文请参见:http://blog.csdn.net/chenjl1031/archive/2008/09/29/2994085.aspx
'通用控件属性设置函数
'参数说明:Frm,控件所在窗体;CtrlName,Frm窗体上的控件名字;LMin,Lmax分别是控件的最小、最大编号;cPropertyName,表示要设置的属性名称;bProperty,表示要设置的控件属性。
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
...全文
120 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
东方之珠 2008-09-30
  • 打赏
  • 举报
回复
在速度优先的情况下,适当的考虑代码效率,这是有好处的。这是个辩证关系,每个人把握的程序不一样罢了。
东方之珠 2008-09-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 myjian 的回复:]
顶顶.

在界面中有大量的控件,而又要批量设置属性时会让代码很简洁,代码容易看.

由于这个过程应该不会非常频繁地调用,因此就算没有什么效率的话也没有关系.

对于5楼的代码,只适合于已经成组的数组控件,非成组的控件还是得用CallByName或Controls集合.
[/Quote]

是的。如果频繁调用过程,那效率又太低了。
嗷嗷叫的老马 2008-09-29
  • 打赏
  • 举报
回复
顶顶.

在界面中有大量的控件,而又要批量设置属性时会让代码很简洁,代码容易看.

由于这个过程应该不会非常频繁地调用,因此就算没有什么效率的话也没有关系.

对于5楼的代码,只适合于已经成组的数组控件,非成组的控件还是得用CallByName或Controls集合.
现在还是人类 2008-09-29
  • 打赏
  • 举报
回复
其实很多东西没必要太去讲究现在的实用性,毕竟方法有在那,
当需要的时候有得用这才是关键。
zdingyun 2008-09-29
  • 打赏
  • 举报
回复
收藏,JF
yanlongwuhui 2008-09-29
  • 打赏
  • 举报
回复
支持楼上
东方之珠 2008-09-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fvflove 的回复:]
我来说二句.

1.对于代码简洁来说...使用LZ的方法非常的不错.

2.对于(套用一句,算法的时间性)来说. LZ的方法就差了一点.
[/Quote]

是的,调用涵数要付代价。只是一种方法而已;用控件数组写成循环也是一种方法。各有所爱吧。
fvflove 2008-09-29
  • 打赏
  • 举报
回复
我来说二句.

1.对于代码简洁来说...使用LZ的方法非常的不错.

2.对于(套用一句,算法的时间性)来说. LZ的方法就差了一点.
东方之珠 2008-09-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xredhat 的回复:]
要将下面自身窗体中20个Image控件设置为不可见,这样不就行了:

for i= 0 to 19
Image(i).Visible=False
Next

全都设置同一属性干嘛还写个函数?
[/Quote]

是。你说得没错,非常正确!
但,其它属性呢?比如:Image1.left,Image1.height,Picture1.backcolor。
也就是说,如果程序中有大量不同类别的控件的大量属性设置,那优势就不说了吧。
xredhat 2008-09-29
  • 打赏
  • 举报
回复
要将下面自身窗体中20个Image控件设置为不可见,这样不就行了:

for i= 0 to 19
Image(i).Visible=False
Next

全都设置同一属性干嘛还写个函数?
jhone99 2008-09-29
  • 打赏
  • 举报
回复
收藏
现在还是人类 2008-09-29
  • 打赏
  • 举报
回复
DB
lsftest 2008-09-29
  • 打赏
  • 举报
回复
吾。。。考虑一下加上嵌套。
apu510064 2008-09-29
  • 打赏
  • 举报
回复
SYSSZ 2008-09-29
  • 打赏
  • 举报
回复
精彩

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧