我有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
个文本框中的一个,请执行某些操作。
尝试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
当我在1
中tbtest2.text
时,这就是tbnumber文本框(1-9)的当前状态:
所以我注意到tbtest2.text
输出1
由于某种原因... Number
应该是tbnumber1-9文本框中任意一个的最大数量。
答案 0 :(得分:1)
尝试1看起来很有希望(我尝试过同样的事情)。但是,您最终没有比较正确的值。
If Tnumber.Text > Tmax Then
'do something
您的上述比较会将Tnumber
文本框的文字与实例 Tmax
进行比较 - 您将String
与TextBox
进行比较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