检查数组中每个TextBox的标签

时间:2018-12-20 11:13:08

标签: vb.net winforms

如何检查数组中所有TextBox控件的Tag属性?
我想要这样的东西:

If textBox.Tag And textbox2.Tag And textbox21.Tag And
   textbox22.Tag And textbox23.Tag And textbox24.Tag = "2" Then

这是我的文本框数组:

Dim allTextboxes() As TextBox = {textBox, narNaslov, narPersona, narDani, narPersona2,
                                 kupIme, kupAdresa, kupKontakt, uvBroj, uvDatum, uvIznos,
                                 uvAvans, uvRok, uvNacin, datumTbox} 

2 个答案:

答案 0 :(得分:5)

您可以使用LINQ All()-方法

If allTextBoxes.All(Function(t) t.Tag.ToString = "2") Then
    'All Tags are "2"
End If

为避免出现NullReferenceException,如果其中一个文本框为Nothing,则可以添加其他检查:

If allTextBoxes.All(Function(t) t IsNot Nothing AndAlso t.Tag.ToString = "2") Then
    'All Tags are "2"
End If

或者您可以使用Null-conditional operator(Visual Basic v。14或更高版本)

If allTextBoxes.All(Function(t) t?.Tag.ToString = "2") Then
    'All Tags are "2"
End If

答案 1 :(得分:5)

您可以使用LINQ的All扩展方法来验证数组中的所有控件是否具有相同的标签。
您可以使用Any来验证数组中的至少一个控件是否将其Tag设置为指定值。

如果您有 Option Strict On ,请避免使用NullReferenceException,因为Tag属性的类型为Object,并且可以为null({ {1}}),则可以使用Is operator进行检查:
(有时,数组中的控件也可以是nothing,因此我们可以使用nothing。在这种情况下,即使出于某些原因,即使TextBoxes之一是txt?.Tag Is (...),如果其他所有TextBox都具有相同的nothing值,该方法将返回Tag

True

如果Dim result As Boolean = allTextboxes.All(Function(txt) txt?.Tag Is "2") result,则所有True属性都将设置为比较中使用的值。

在以下情况下,此比较将返回True:

  • 使用设计器中的属性网格分配字符串
  • 在代码中,直接赋值:TextBoxes.Tag
  • 在代码中,使用字段或局部变量:

    Control.Tag = "2"

Visual Vincent所述,Private TagValue As String = "2" [Control].Tag = TagValue [Control]?.Tag Is "2" => True [Control]?.Tag Is TagValue => True 不执行值比较;它确定两个对象是否引用同一个对象(在这种情况下,该字符串是通过编程方式创建的,因此将对intern pool table中的字符串引用执行比较)。
这可能是期望的结果,也可能不是。

设置:

Is operator

如果/当需要严格的值比较时,可以在以下位置更改前一种方法:

Dim TagValue As String = New String("2"c, 1) 
[Control].Tag = TagValue 

[Control].Tag Is "2"           => False
[Control].Tag Is TagValue      => True

[Control].Tag.Equals("2")      => True
[Control].Tag.Equals(TagValue) => True

在两种情况下都将返回Dim result As Boolean = allTextboxes.All(Function(txt) txt.Tag.Equals("2") :比较True的值以确定两个对象是否相等。
在这种情况下,即使阵列中的一个或多个控件已被处置或以其他方式Tag,并且也是 True null >兼容。

但是,如果将Option Strict属性之一设置为NullReferenceException,则会引发Tag
在这种情况下,需要仔细检查:

nothing