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

VB.NET中用For循环创建TextBox显示数组值出错的解决方法

问题分析

你遇到的错误根源是错误调用了数组的ToString()方法,而非通过索引访问数组元素:

  • nameTextbox.ToString(i)实际是把数组的类型名(System.String[])转为字符串后,取第i个字符(比如i=1时取"Y"、i=2取"S",这就是你看到的错误内容);
  • nameTextbox.ToString直接返回数组的类型字符串,导致所有TextBox的Name属性重复。

另外,VB.NET数组索引从0开始,原循环For i = 1 To nameTextbox.Length若直接用nameTextbox(i)会触发索引越界错误,只是因为错误调用ToString方法才没暴露这个问题。

修复方案

提供两种修复方式,推荐第二种更贴合.NET数组使用习惯的写法:

方式1:保留原循环起始值(i从1开始)

调整数组元素访问方式,同时修正Name属性:

Dim nameTextbox() As String = {"A", "B", "C", "D", "E"}
For i = 1 To nameTextbox.Length
    Dim textbox As New Windows.Forms.TextBox()
    ' 用i-1作为数组索引,访问对应元素
    textbox.Text = nameTextbox(i - 1)
    ' 给每个TextBox设置唯一Name,比如结合元素值
    textbox.Name = "TextBox_" & nameTextbox(i - 1)
    textbox.Size = New Size(225, 25)
    textbox.Location = New Point(70, 10 + 25 * (i - 1))

    Me.Controls.Add(textbox)
Next

方式2:改为从0开始的循环(更推荐)

直接使用数组默认索引范围,避免索引计算错误:

Dim nameTextbox() As String = {"A", "B", "C", "D", "E"}
' 循环从0到数组最大索引(Length-1)
For i = 0 To nameTextbox.Length - 1
    Dim textbox As New Windows.Forms.TextBox()
    textbox.Text = nameTextbox(i)
    textbox.Name = "TextBox_" & nameTextbox(i)
    textbox.Size = New Size(225, 25)
    ' 位置计算简化,直接用i乘间距
    textbox.Location = New Point(70, 10 + 25 * i)

    Me.Controls.Add(textbox)
Next

内容的提问来源于stack exchange,提问作者Tuan Do

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:15:43