从文本框中取“十”值,将它们分成10个单值并输出到列中

时间:2013-04-05 09:49:25

标签: vb.net text mapping

我目前正在使用以下代码的修改版本来发送在表单2上的组合框和文本框中输入的信息。 进入标签Form3

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 我想将这些数据带入Form3 并在5个不同的标签上输出 27 34 56 94 23

我正在考虑的问题是,我是否需要准备输入这些标签(如果数据可以分割)或者可以编码以创建和放置数据? 因为form2有10个文本框,每个文本框都有1到50个不同的值输入,我希望它从form2上的每个文本框中获取数据,将它们作为单个值输出到一个列中的form3上。

如果我曾经打过15rep,我可以提供一些屏幕截图,这有助于更好地展示这个过程 如需更多信息,请告知我们。

提前感谢您的建议/帮助/建议!

2 个答案:

答案 0 :(得分:2)

分割数据肯定是可能的,但这一切都取决于数据的实际格式。如果数据始终使用逗号格式化,后跟每个值之间的空格,则可以使用String.Split方法,如下所示:

Dim data As String = "27, 34, 56, 94, 23"
Dim values() As String = data.Split({", "}, StringSplitOptions.None)

String.Split方法返回一个字符串数组,其中数组中的每个项都是一个分隔值。

至于在Form上显示它们,如果要在Label个控件列中显示它们,则需要为每个项目创建一个新的Label阵列。您可能需要在设计时从表单中获取它们,或者您需要在运行时动态实例化Label控件。但是,这也不是我推荐的选项。如果您需要显示一列数据,那么除Label之外,还有更好的控件可用于此类事情。

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

ListBox1.Items.AddRange(values)

或者,如果您确实需要使用Label控件,出于某种原因,您可以在单个Label控件中的单独行上显示每个项目。为此,您需要使用NewLine字符串作为分隔符将所有项目连接在一起,例如:

Label1.Text = String.Join(Environment.NewLine, values)

Raja提供了一个很好的示例,说明如何遍历表单上的所有TextBox控件,并构建一个包含所有拆分值的ArrayList。但是,我会提醒您,它会在表单上找到所有 TextBox控件,因此如果您有任何其他文本框,则需要稍微更改一下逻辑。我唯一真正建议改进他所做的是,而不是使用ArrayList,你应该使用List(Of String)ArrayList不是特定于类型的,因此不太安全,因此不推荐使用。从早期的.NET开始,这是一个较旧的类,在支持泛型之前。现在,即使您需要非特定类型的列表,大多数人也建议您使用List(Of Object)而不是ArrayList

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

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 :(得分:1)

我刚编辑了您的代码并制作了符合您要求的snippet

<强> Form1中:

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  

表格2:

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