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

按名称遍历文本框:将指定数量文本框内容存入List(Of String)求助

嘿,这个问题我之前写VB.NET代码的时候也踩过坑!你原来的代码问题出在——你试图用字符串拼接tb_topic & i来引用控件,但VB.NET不会自动把这个字符串转换成对应的TextBox实例,所以那行代码其实只是在拼接一串没用的字符串,根本没拿到目标控件的Text属性。

下面给你两种靠谱的实现方法,按需选就行:

方法1:通过控件名称查找(适合控件直接在窗体上的场景)

这种方法会通过窗体的Controls集合,根据控件名称找到对应的TextBox,然后获取它的文本:

Dim topicText As New List(Of String)
Dim inputCount As Integer

' 先做输入验证,避免非法值
If Integer.TryParse(tb_TopicsCount.Text, inputCount) AndAlso inputCount >= 3 AndAlso inputCount <= 5 Then
    For i As Integer = 1 To inputCount
        ' 根据名称查找控件,转换成TextBox类型
        Dim targetTextBox As TextBox = DirectCast(Me.Controls($"tb_topic{i}"), TextBox)
        ' 确保找到控件再添加,避免空引用错误
        If targetTextBox IsNot Nothing Then
            topicText.Add(targetTextBox.Text)
        End If
    Next i
Else
    ' 提示用户输入合法范围的数字
    MessageBox.Show("请输入3到5之间的有效数字哦!")
End If

注意:如果你的TextBox是放在Panel、GroupBox这类容器控件里,那得把Me.Controls换成容器的Controls集合,比如Panel1.Controls($"tb_topic{i}")。

方法2:提前把控件存入数组(更可靠,推荐)

如果你的topic文本框数量固定(3-5个),直接把它们放进数组里引用会更安全,不用担心找不到控件的问题:

' 先把所有可能的topic文本框放进数组
Dim allTopicTextBoxes() As TextBox = {tb_topic1, tb_topic2, tb_topic3, tb_topic4, tb_topic5}
Dim topicText As New List(Of String)
Dim inputCount As Integer

If Integer.TryParse(tb_TopicsCount.Text, inputCount) AndAlso inputCount >= 3 AndAlso inputCount <= 5 Then
    ' 遍历数组的前inputCount个元素,添加文本到列表
    For i As Integer = 0 To inputCount - 1
        topicText.Add(allTopicTextBoxes(i).Text)
    Next i
Else
    MessageBox.Show("请输入3到5之间的有效数字哦!")
End If

这种方法的好处是直接引用控件实例,不会因为控件名称拼写错误或者容器嵌套的问题导致找不到控件,代码也更直观。

另外一定要记得加输入验证!不然用户输入非数字或者超出3-5的范围时,循环会出各种奇怪的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:04:25