VB.net通过检查数字是否大于

时间:2016-05-31 07:41:15

标签: vb.net

我有18个文本框,只包含一个数字。 9个文本框称为tbmax(tbmax1-9),9个称为tbnumber(tbnumber1-9)。像这样:tbnumber1tbnumber2tbnumber3 ......等等。并tbmax1tbmax2tbmax3等等。

这就是我想要的......

如果tbnumber(1-9).text中的任何数字大于tbmax(1-9).text中的任何数字,请执行某些操作。换句话说,如果tbnumber个文本框中只有一个的文本编号大于tbmax个文本框中的一个,请执行某些操作。

尝试1

For Count = 1 To 9
            Dim Tnumber = CType(Controls.Find("tbnumber" & Count, True).FirstOrDefault(), TextBox)
            Dim Tmax = CType(Controls.Find("tbmax" & Count, True).FirstOrDefault(), TextBox)
            If Tnumber.Text > Tmax.text Then
                'do something
next
end if 

尝试2

Dim tbnumber_textboxes As New List(Of TextBox) From {tbNumber1,
     tbNumber2, tbNumber3, tbNumber4, tbNumber5, tbNumber6, tbNumber7,
     tbNumber8, tbNumber9}

Dim tbmax_textboxes As New List(Of TextBox) From {tbmax1, tbmax2, 
     tbmax3, tbmax4, tbmax5, tbmax6, tbmax7, tbmax8, tbmax9}

If tbNumber_textboxes.Any(Function(cb) cb.Text) > tbMax_textboxes.Any(Function(cb) cb.Text) Then
'Do something
'For example msgbox("A number is larger than any of the max-textboxes")

然而,它似乎不起作用,我不太清楚为什么。我认为在我的尝试2中" Any"不适合我的目的。

更新Thorsten的回答

我已经测试了您的方法,我删除了MaxVal以通过输入数字来简化我的测试。

这就是我所拥有的

For Count = 1 To 9
Dim Tnumber = CType(Controls.Find("tbnumber" & Count, True).FirstOrDefault(), TextBox)
Dim number = Convert.ToInt32(Tnumber.Text)
If (number > 0) And (number < 30) Then
tbTest1.Text = "0-30"
tbtest2.Text = number

elseif (number > 30) And (number < 50) Then
tbTest1.Text = "30-50"
tbtest2.Text = number
end if
next

当我在1tbtest2.text时,这就是tbnumber文本框(1-9)的当前状态:

enter image description here

所以我注意到tbtest2.text输出1由于某种原因... Number应该是tbnumber1-9文本框中任意一个的最大数量。

2 个答案:

答案 0 :(得分:1)

尝试1看起来很有希望(我尝试过同样的事情)。但是,您最终没有比较正确的值。

If Tnumber.Text > Tmax Then 
            'do something

您的上述比较会将Tnumber文本框的文字实例 Tmax进行比较 - 您将StringTextBox进行比较Int32

您需要从两个文本框中获取文本,将其转换为Dim number = Convert.ToInt32(Tnumber.Text) Dim maxVal = Convert.ToInt32(Tmax.Text) If number > maxVal Then 'do something end if ,然后比较这两个值。我不是VB.NET开发人员,但我希望这个打击能够起作用:

Controls

此外,您还需要牢记以下几点:如果您的文本框是面板,组框或其他容器的一部分,它们将成为相应容器的Controls集合的一部分,而不是您的表单{{{ 1}}集合,所以请使用调试器来确定您是否真正找到了控件。

在对问题发表评论后进行修改:请注意,按名称查找控件区分大小写!因此,如果控件名为tbNumber9并且您正在搜索tbnumber9,则无法获得结果。

编辑:要显示您要执行此操作的最大数量:

Dim maxNumber = Int32.MinValue

For Count = 1 To 9
  Dim Tnumber = CType(Controls.Find("tbnumber" & Count, True).FirstOrDefault(), TextBox)
  Dim number = Convert.ToInt32(Tnumber.Text)

  If (number > maxNumber) Then
    maxNumber = number
    tbtest2.Text = maxNumber   

    If (maxNumber > 0) And (maxNumber < 30) Then
      tbTest1.Text = "0-30"
    elseif (maxNumber > 30) And (maxNumber < 50) Then
      tbTest1.Text = "30-50"
    end if
  End If
next

这会将当前最大值存储在maxNumber中,如果该值发生更改,则更新其他文本框。

答案 1 :(得分:1)

您的代码仅比较具有相同索引的数字(因此值1与值1相比,值5与值5相比)。 就个人而言,我会做以下事情,这也使它更具可读性(imo)

'1-get-store all Integers
dim listof_tbnumber as new list (of Integer)
dim listof_tbmax as new list (of Integer)
For Count = 1 To 9
    listof_tbnumber.add(cint(Controls.Find("tbnumber" & Count, True).FirstOrDefault().Text))
    listof_tbmax.add(cint(Controls.Find("tbmax" & Count, True).FirstOrDefault().Text))
next

'2-compare
'If listof_tbnumber has at least 1 value greater then listof_tbmax
If (listof_tbnumber.FindAll(Function(x As Integer) x > listof_tbmax.Max)).Count > 0 Then
    MsgBox("isgreater")
End If