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
相关产品推荐
相关产品推荐

