vb程序 字符串引用变量名称的问题?

zcyzzzm 2008-01-16 10:08:46
vb程序 字符串引用变量名称的问题:
假如vb程序有菜单name分别为:liebiao1,liebiao2,liebiao3,.....,liebiao100(不要让我修改菜单index来满足问题)
我想给这些菜单.Caption赋值分别为:列表1,列表2,.....,列表100
为了简化代码,我想用for循环赋值,请问怎么写?
...全文
238 点赞 收藏 13
写回复
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbman2003 2008-01-18
试了下,可以设置Visible = False,但是,至少要有一子菜单可见
回复
vbman2003 2008-01-18
设置enabled吧
回复
cangwu_lee 2008-01-17

CallByName
自己看MSDN吧
回复
vbman2003 2008-01-17
楼上滴,人家说的是菜单,不是标签~~~~~
---------------------------------------
哦,一早起床还没醒......嘿嘿
回复
Sandrer 2008-01-17
用API改:

Const MF_STRING = &H0&
Const MF_BYPOSITION = &H400&

Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As String) As Long

Private Sub Form_Load()
Dim hMenu As Long
Dim hSubMenu As Long
Dim lngItemCount As Long
Dim i As Long
hMenu = GetMenu(hWnd) '获得窗口中的主菜单句柄
hSubMenu = GetSubMenu(hMenu, 0) '获得主菜单中的第一个子菜单句柄(你的目标子菜单排在第几,就把参数中的0该为该位置-1的值就可以获得该子菜单的句柄)
lngItemCount = GetMenuItemCount(hSubMenu) '获得第一个子菜单中的菜单数量
For i = 0 To lngItemCount - 1
Call ModifyMenu(hSubMenu, i, MF_STRING Or MF_BYPOSITION, i, "列表" & i + 1)
Next i
End Sub



不过呢,我还是觉得3楼的代码最简单,只要你的菜单是固定的话,把三楼的代码中的"label"改为"liebiao"就可以了~
回复
zcyzzzm 2008-01-17
Me.Controls(x.Name)(x.Index).Caption = "haohao" 是可以的,
但是 Me.Controls(x.Name)(x.Index).Visible = False 提示不能这样设置属性,请问怎么隐藏
回复
of123 2008-01-17

Dim x As Control

For Each x In Me.Controls
If TypeOf x Is Menu Then
If InStr(x.Name, "liebiao") Then
x.Caption = "列表" & Replace(x.Name, "liebiao", "")
End If
End If
Next
回复
Sandrer 2008-01-17
楼上滴,人家说的是菜单,不是标签~~~~~
回复
zcyzzzm 2008-01-17
Dim x As Control

For Each x In Me.Controls
If TypeOf x Is Menu Then
If InStr(x.Name, "liebiao") Then
x.Visible = False
End If
End If
Next

请问这里当菜单中含有菜单数组后(比如有 liebiao1,liebiao2, liebiaozu(0),liebiaozu(1),liebiaozu(2) ) x.Visible = False 会出错,请问怎么写啊?
回复
vbman2003 2008-01-17

dim i as integer
for i=1 to 100
me.controls("label"& i).caption="列表"& i
next
回复
DHC_KULOU 2008-01-17
做个数组Liebiao(99)
回复
zcyzzzm 2008-01-17
只要你的菜单是固定的话,把三楼的代码中的"label"改为"liebiao"就可以了~

意思是不是表示当菜单不是动态生成的就可以用3楼的代码,是吗?
我先测试一下,感谢大家!!!!!
回复
zcyzzzm 2008-01-16
最好的方法是这样。
给出一个字符串aa=“列表56”
aa=raplace(aa,"列表","")
nn=val(aa)
这时nn=56
则给leibiao56的.Caption赋值为:“就是我”

但是liebiao56要有"leibiao"+aa来组成
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7451

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告