比较并提取几个文本框中包含的唯一数字

时间:2018-12-28 19:23:21

标签: vb.net

我很高兴有一个站点,因为我设法完成了我的项目,但是我有一件事情要做。
我想从多个TextBox中提取唯一的数字,然后将结果分配给另一个TextBox。

TextBox1.Text = 6,13,69,79
TextBox2.Text = 13,61,79
TextBox3.Text = 48,54,72,79
TextBox4.Text = 1,41,48,69
TextBox5.Text = 19,46,71,73,78
TextBox6.Text = 6,23,29,49,67,73,77
and so on:

Output: 6,13,61,69,79,48,54,72,1,19,46,71,73,78,23,29,67

类似的东西。

或者我在考虑一些更简单的方法:
从一串数字中删除重复项:

(1,2,2,3,4,7,8,9,10).

因此,我们将这些TextBox中的所有数字放入字符串中,然后删除重复项并将结果分配给另一个TextBox。

3 个答案:

答案 0 :(得分:1)

从文本框中提取数字,使用它们的部分名称作为参考("TextBox",因为您的控件分别命名为TextBox1TextBox2等。请注意,字符串比较如下是,区分大小写)。
将值分配给List(Of Integer)(在其他地方可能有用)。

Dim result As Integer
Dim NumbersList As List(Of Integer) = New List(Of Integer)()
For Each txt As TextBox In Me.Controls.OfType(Of TextBox).Where(Function(ctl) ctl.Name.StartsWith("TextBox"))
    NumbersList.AddRange(txt.Text.Split(","c).Select(
        Function(n)
            Return If(Integer.TryParse(n, result), result, Nothing)
        End Function).ToArray())
Next

创建一个仅包含按值排序的不同元素的字符串。
将字符串分配给用于显示它的TextBox的Text属性:

txtResult.Text = String.Join(",", NumbersList.Distinct().OrderBy(Function(n) n))

如果您不关心订购部分,只需删除.OrderBy(Function(n) n)

答案 1 :(得分:0)

尝试一下

disableHostCheck

答案 2 :(得分:0)

如果您仍尝试对大量文本框使用相同的方法,则可能会这样:

    'Throw everything into a list of String initially.
    Dim AllNumbers As New List(Of String)

    'Loop through each TextBox, splitting them by commas
    For x = 1 To 60
        AllNumbers.AddRange(CType(Me.Controls("TextBox" & x), TextBox).Text.Split(CChar(",")))
    Next

    'Remove non-integer entries.
    AllNumbers.RemoveAll(Function(x) Integer.TryParse(x, New Integer) = False)

    'Join the distinct list to an array, then back to comma separated format into wherever you want it output.
    OutputText.Text = String.Join(",", AllNumbers.Distinct().ToArray())