VB.net通过检查数字是否大于来比较多个文本框

VB.net通过检查数字是否大于来比较多个文本框,vb.net,Vb.net,我有18个文本框,其中只包含一个数字。9个文本框称为tbmax(tbmax1-9),9个文本框称为tbnumber(tbnumber1-9)。像这样:tbnumber1,tbnumber2,tbnumber3。。。等等。以及tbmax1,tbmax2,tbmax3等等 这就是我想要的… 如果tbnumber(1-9).text中的任何数字大于tbmax(1-9).text中的任何数字,请执行操作。换句话说,如果只有一个tbnumber文本框的数字大于只有一个tbmaxtexbox的数字,请采取措

我有18个文本框,其中只包含一个数字。9个文本框称为
tbmax
(tbmax1-9),9个文本框称为
tbnumber
(tbnumber1-9)。像这样:
tbnumber1
tbnumber2
tbnumber3
。。。等等。以及
tbmax1
tbmax2
tbmax3
等等

这就是我想要的…

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

尝试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")
然而,它似乎不起作用,我也不太清楚为什么。在我的第二次尝试中,我认为“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
计数=1到9的

Dim Tnumber=CType(Controls.Find(“tbnumber”)和Count,True.FirstOrDefault(),TextBox)
Dim number=Convert.ToInt32(Tnumber.Text)
如果(数字>0)和(数字<30),则
tbTest1.Text=“0-30”
tbtest2.Text=编号
elseif(数量>30)和(数量<50)然后
tbTest1.Text=“30-50”
tbtest2.Text=编号
如果结束
下一个
当我在
tbtest2中得到
1
时,tbnumber文本框(1-9)就是这样的


所以我注意到,出于某种原因,
tbtest2.text
输出
1
<代码>编号
应该是tbnumber1-9文本框中的最大编号。

尝试1在我看来很有希望(我也会尝试同样的方法)。但是,您最终没有比较正确的值

If Tnumber.Text > Tmax Then 
            'do something
上面的比较将
Tnumber
文本框的文本实例
Tmax
-将
字符串
文本框
进行比较

您需要从两个文本框中获取文本,将它们转换为
Int32
,然后比较这两个值。我不是VB.NET开发人员,但我希望这一打击能奏效:

Dim number = Convert.ToInt32(Tnumber.Text)
Dim maxVal = Convert.ToInt32(Tmax.Text)

If number > maxVal Then 
    'do something
end if 
此外,您需要记住以下几点:如果文本框是面板、分组框或其他容器的一部分,则它们将是相应容器的
控件
集合的一部分,而不是表单的
控件
集合的一部分,因此,请使用调试器来确定您是否真正找到了控件


请注意,按名称查找控件区分大小写。!因此,如果控件名为
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
Dim maxNumber=Int32.MinValue
对于计数=1到9
Dim Tnumber=CType(Controls.Find(“tbnumber”)和Count,True.FirstOrDefault(),TextBox)
Dim number=Convert.ToInt32(Tnumber.Text)
如果(数字>最大数字),则
maxNumber=数字
tbtest2.Text=maxNumber
如果(maxNumber>0)和(maxNumber<30),则
tbTest1.Text=“0-30”
elseif(maxNumber>30)和(maxNumber<50),然后
tbTest1.Text=“30-50”
如果结束
如果结束
下一个

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

尝试1对我来说很有希望(我也会尝试同样的方法)。但是,您最终没有比较正确的值

If Tnumber.Text > Tmax Then 
            'do something
上面的比较将
Tnumber
文本框的文本实例
Tmax
-将
字符串
文本框
进行比较

您需要从两个文本框中获取文本,将它们转换为
Int32
,然后比较这两个值。我不是VB.NET开发人员,但我希望这一打击能奏效:

Dim number = Convert.ToInt32(Tnumber.Text)
Dim maxVal = Convert.ToInt32(Tmax.Text)

If number > maxVal Then 
    'do something
end if 
此外,您需要记住以下几点:如果文本框是面板、分组框或其他容器的一部分,则它们将是相应容器的
控件
集合的一部分,而不是表单的
控件
集合的一部分,因此,请使用调试器来确定您是否真正找到了控件


请注意,按名称查找控件区分大小写。!因此,如果控件名为
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
Dim maxNumber=Int32.MinValue
对于计数=1到9
Dim Tnumber=CType(Controls.Find(“tbnumber”)和Count,True.FirstOrDefault(),TextBox)
Dim number=Convert.ToInt32(Tnumber.Text)
如果(数字>最大数字),则
maxNumber=数字
tbtest2.Text=maxNumber
如果(maxNumber>0)和(maxNumber<30),则
tbTest1.Text=“0-30”
elseif(maxNumber>30)和(maxNumber<50),然后
tbTest1.Text=“30-50”
如果结束
如果结束
下一个

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

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


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


谢谢你的回答,托尔斯滕。我马上就来试试。很抱歉回复晚了。我不知道为什么,但它似乎不起作用。我一直在