1

我目前正在使用以下代码的修改版本将在 Form 2 的组合框和文本框中输入的信息发送到 Labels 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,我可以提供一些屏幕截图,这将有助于更好地展示这个过程。如果需要任何进一步的信息,请告诉我。

非常感谢您的建议/帮助/建议!

4

2 回答 2

2

拆分数据当然是可能的,但这一切都取决于数据的实际格式。如果数据的格式总是用逗号后跟每个值之间的空格,那么您可以使用该String.Split方法,如下所示:

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

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

至于在 a 上显示它们Form,如果要将它们显示在一列Label控件中,则需要为Label数组中的每个项目创建一个新的。要么您需要在设计时将它们放在表单上,​​要么您需要Label在运行时动态实例化控件。但是,我也不推荐。如果您需要显示一列数据,有比Label.

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

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.

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

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())
于 2013-04-05T10:20:12.130 回答
1

我刚刚编辑了您的代码并制作了一个snippet适合您要求的代码。

表格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  

表格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
于 2013-04-05T10:46:59.347 回答