按名称遍历文本框:将指定数量文本框内容存入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
相关产品推荐
相关产品推荐

