生成1-16随机数后,如何通过字符串拼接访问对应Button变量?
你有16个Button控件,生成1-16的随机数后,尝试用"Button" + 随机数的字符串拼接方式访问对应Button变量,但无法获取控件属性。你的代码如下:
Sub game() Order(Ord) = ((15 * Rnd()) + 1) Console.Text = Order(Ord) test = Order(Ord) Target = "Button" + test Ord = Ord + 1 End Sub
解决方法
方法1:利用窗体Controls集合直接查找控件
VB里可以通过窗体的Controls集合,根据控件名称字符串获取对应的Button对象,就能正常访问它的属性了。修改代码如下:
Sub game() Order(Ord) = ((15 * Rnd()) + 1) Console.Text = Order(Ord) Dim test As Integer test = Order(Ord) ' 获取对应Button控件 Dim targetBtn As Button Set targetBtn = Me.Controls("Button" & test) ' 用&拼接字符串比+更稳妥,避免类型错误 ' 示例:修改Button标题 targetBtn.Caption = "已选中" ' 示例:隐藏Button targetBtn.Visible = False Ord = Ord + 1 End Sub
方法2:提前将Button存入数组(更高效)
如果需要频繁访问这些Button,建议在窗体加载时把所有Button存入数组,之后直接通过索引访问,比每次从Controls集合查找速度更快。
' 窗体模块级变量,用于存储所有Button Dim btnArray(1 To 16) As Button Private Sub Form_Load() ' 初始化数组,将Button1到Button16存入 Dim i As Integer For i = 1 To 16 Set btnArray(i) = Me.Controls("Button" & i) Next i End Sub Sub game() Order(Ord) = ((15 * Rnd()) + 1) Console.Text = Order(Ord) Dim test As Integer test = Order(Ord) ' 直接通过数组索引访问对应Button btnArray(test).Caption = "已选中" Ord = Ord + 1 End Sub
注意事项
- 确保你的Button控件名称确实是
Button1到Button16,如果命名规则不同,需要对应调整字符串拼接的部分。 - 字符串拼接优先用
&而非+,+在数字与字符串混合时可能触发类型错误,&会自动将数字转为字符串。
内容的提问来源于stack exchange,提问作者Kian Farrell
相关产品推荐
相关产品推荐

