Vb.net 取;“十”;文本框中的值,将其拆分为10个单个值并输出到列中

Vb.net 取;“十”;文本框中的值,将其拆分为10个单个值并输出到列中,vb.net,text,mapping,Vb.net,Text,Mapping,我目前正在使用下面代码的修改版本发送表单2的组合框和文本框中输入的信息。 将标签转换为表格3 Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim f As New FormVb2() f.TextBox1Value = TextBox1.Text f.ShowDialog() End Sub End Class Public Class

我目前正在使用下面代码的修改版本发送表单2的组合框和文本框中输入的信息。 将标签转换为表格3

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim f As New FormVb2()
f.TextBox1Value = TextBox1.Text
f.ShowDialog()
End Sub
End Class

Public Class Form2
Public Property TextBox1Value As String

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
    TextBox1.Text = TextBox1Value
End Sub
End Class
感谢@steven Doggart

我现在想把这个过程再推进一点。。。。 假设表格2中的textbox5包含以下数据。。。 27, 34, 56, 94, 23 我想把这些数据放进表格3 并在5个不同的标签上输出 27 34 56 94 二十三

我马上想到的问题是,我是否需要在适当的位置设置标签,以便将这些标签输入(如果可以拆分数据),或者是否可以对其进行编码以创建和放置数据? 由于form2有10个文本框,每个文本框可能有1到50个不同的输入值,我希望它从form2的每个文本框中获取数据,将它们作为单独的值输出到form3的一列中

如果我点击了15rep,我可以展示一些屏幕截图,这将有助于更好地展示这个过程 如果需要更多信息,请告诉我


非常感谢你的建议/帮助/建议

分割数据当然是可能的,但这完全取决于数据的实际格式。如果数据的格式总是用逗号后跟每个值之间的空格,则可以使用
String.Split
方法,如下所示:

Dim data As String = "27, 34, 56, 94, 23"
Dim values() As String = data.Split({", "}, StringSplitOptions.None)
String.Split
方法返回一个字符串数组,其中数组中的每个项都是一个分隔值

就在
窗体上显示它们而言,如果要在
标签
控件的列中显示它们,则需要为数组中的每个项目创建一个新的
标签。您可能需要在设计时就已经将它们放在表单上,或者需要在运行时动态实例化
标签
控件。然而,这两种选择我都不推荐。如果您需要显示一列数据,则有比
标签
更好的控件可用于此类操作

我建议使用
列表框
控件来显示它们。
列表框
控件的优点除了方便之外,还在于它可以显示任意数量的项目。如果控件中的项目太多,它将显示一个滚动条,以便用户可以在项目之间上下滚动。以下是如何从字符串数组填充
列表框

ListBox1.Items.AddRange(values)
或者,如果出于某种原因确实需要使用
标签
控件,则可以在单个标签控件的单独一行中显示每个项目。为此,您需要使用
换行符
字符串作为分隔符将所有项目连接在一起,例如:

Label1.Text = String.Join(Environment.NewLine, values)
Raja提供了一个很好的例子,说明了如何循环表单上的所有
TextBox
控件,并构建一个
ArrayList
,其中包含所有拆分值。但是,我要提醒您,它会在表单上找到所有
TextBox
控件,因此如果您有任何其他文本框,则需要稍微更改逻辑。我唯一真正建议改进他的做法的是,不要使用
ArrayList
,而应该使用
列表(字符串)
ArrayList
不是特定于类型的,因此不太安全,因此不推荐使用。它是.NET早期的一个旧类,早在泛型被支持之前。现在,即使你需要一个类型不明确的列表,大多数人建议使用
list(Of Object)
而不是
ArrayList

要从多个文本框构建字符串列表,然后将其添加到
列表框
,可以执行以下操作:

Dim allValues As New List(Of String)()
For Each i As TextBox In Me.Controls.OfType(Of TextBox)()
    allValues.AddRange(i.Text.Split({", "}, StringSplitOptions.None))
Next
ListBox1.Items.AddRange(allValues.ToArray())

我刚刚编辑了您的代码,并制作了一个符合您要求的
片段

表格1:

Public Class Form1

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       Dim xFrm2 = New FormVb2

       'This loop will get the text from all of your text boxes, split that with ','
       'and after that it will add that text into the public arraylist of form2

       For Each xTextBoxes In Me.Controls.OfType(Of TextBox)()
          xFrm2.mValues.AddRange(xTextBoxes.Text.Split(","))
       Next

       xFrm2.ShowDialog()

 End Sub

End Class  
Public Class Form2

 Public mValues As New ArrayList

    Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

           Dim xVal As Integer = 0

           'This loop will get values from that list and create a new label for each. 
           'Here i had set some other properties, for a visual representation.
           For Each XText In mValues

              Me.Controls.Add(New Label() With _
                                   { _
                                   .Name = xVal, _
                                   .Height = 50, _
                                   .Text = XText, _
                                   .Location = New Point(0, xVal), _
                                   .BackColor = If((xVal / 10) Mod 2 = 0, Color.Red, Color.White) _
                                   }) : xVal +=50

           Next

    End Sub

End Class
表格2:

Public Class Form1

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       Dim xFrm2 = New FormVb2

       'This loop will get the text from all of your text boxes, split that with ','
       'and after that it will add that text into the public arraylist of form2

       For Each xTextBoxes In Me.Controls.OfType(Of TextBox)()
          xFrm2.mValues.AddRange(xTextBoxes.Text.Split(","))
       Next

       xFrm2.ShowDialog()

 End Sub

End Class  
Public Class Form2

 Public mValues As New ArrayList

    Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

           Dim xVal As Integer = 0

           'This loop will get values from that list and create a new label for each. 
           'Here i had set some other properties, for a visual representation.
           For Each XText In mValues

              Me.Controls.Add(New Label() With _
                                   { _
                                   .Name = xVal, _
                                   .Height = 50, _
                                   .Text = XText, _
                                   .Location = New Point(0, xVal), _
                                   .BackColor = If((xVal / 10) Mod 2 = 0, Color.Red, Color.White) _
                                   }) : xVal +=50

           Next

    End Sub

End Class

您的Form2和Form3在mdi容器中的何处。?或者什么?目前我正在尝试将两个答案合并在一起,我喜欢使用列表框保存所有数据的想法。但仍在与上面的初始设置抗争,我的anmes与我在示例中使用的不同(我的错误),我的实际代码更像。。。私有子按钮2\u单击(发件人作为System.Object,e作为System.EventArgs)处理按钮2。单击Dim f作为新表单3()f.TextBox1Value=TextBox1.Text f.textBox2Value=TextBox2.Text f.ShowDialog()End Sub我有很多盒子,这样循环就可以工作了。arraylist的理念,而不是将每个值都输出到一个标签,这会让我的生活更轻松!一旦我成功地实现了上面的示例,我将尝试合并它。我如何编辑mValues Me.Controls.Add(New Label()和_)中每个XText的最后一节{{uu.Name=xVal,{uu.Text=XText,{uu.Location=New Point(296,xVal)}):xVal+=15来代替输入到列表?还是像我刚才说的ListBox1.Items(Text)那样=xTextOnly刚开始尝试实现它,尝试使用它在表单2中收集,在表单3中输出,我得到以下错误“Split”不是“System.Collections.Generic.List”(字符串)的成员“当只在一个表单中使用上述代码,而不尝试在表单之间拖动上述操作时,我使用的是2个列表1抓取组合框和1抓取文本框”将它们放在不同的列表框中,但是没有2个不同的列表框……第一个文本框和第一个组合框的数据被放在列表的下面3/4。然而,剩余的数据被放在列表的顶部果然。。。