1

我有一些代码可以收集所有文本框并将它们存储为数组列表,然后所有组合框都存储为第二个列表,这是“工作”,但它似乎将框的 2-10 从上到下放置,它们是第一个框在底部,它说框 1、2、3、4、5 没有填充 6-10,你会得到 2、3、4、5,然后是 5 个空行,然后是底部的框 1。我想知道我怎么能阻止这个?即让它忽略空框。一旦我达到 15 个代表,我将发布该项目的一些图片,并在我正在努力的各个领域寻求很多帮助。使用的代码如下 FORM 2 - 集合

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim f As New Form3()
    Dim allValues As New List(Of String)()
    For Each xTextBoxes As TextBox In Me.Controls.OfType(Of TextBox)()
        f.i.AddRange(xTextBoxes.Text.Split(","))
    Next
    Dim allValues2 As New List(Of String)()
    For Each xComboBoxes As ComboBox In Me.Controls.OfType(Of ComboBox)()
        f.l.AddRange(xComboBoxes.Text.Split(","))
    Next
    f.ShowDialog()

End Sub

表格 3 中的打印输出

Public i As New List(Of String)()
Public l As New List(Of String)()

Private Sub Form3_Load(sender As Object, e As EventArgs) Handles Me.Load
    ListBox1.Items.AddRange(i.ToArray())
    ListBox2.Items.AddRange(l.ToArray())
End Sub

如果我有文本框 1,2,3,4 填充 111,111,111 然后 222,222,222 然后 33,33 和 44,44 这就是它在列表框中的显示方式

222
222
222
33
33
44
44
(空白行)
(空白行)
(空白行)
(空白行)
(空白行)
(空白行)
111
111
111

4

2 回答 2

2

我建议RemoveEmptyEntries在调用Split方法时使用该选项,如下所示:

f.i.AddRange(xTextBoxes.Text.Split({","}, StringSplitOptions.RemoveEmptyEntries))

如果由于某种原因这不起作用,我只需在使用它之前检查该值是否为空:

If xTextBoxes.Text <> String.Empty Then
    f.i.AddRange(xTextBoxes.Text.Split(","))
End If

顺便说一句,你实际上并没有使用allValuesallValues2在任何地方......

于 2013-04-09T15:05:27.430 回答
0

您可以只使用 for-loop 或 for-each 而不是 addrange 并且只传输非空项,或者遍历列表并删除空项。

此外,您可能希望将表单创建更改为单例,因此请确保您尝试从 form3 访问的数据与正在运行的数据相同。

是错误的编码还是您需要数组列表?也许你可以解释一下?(这不是直接的解决方案,但也可以帮助您改进编码)

于 2013-04-09T15:00:23.997 回答