You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成1-16随机数后,如何通过字符串拼接访问对应Button变量?

如何通过随机数访问对应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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 02:57:46