winforms 检查数组中每个TextBox的标记

64jmpszr  于 2023-01-14  发布在  其他
关注(0)|答案(2)|浏览(140)

如何检查数组中所有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}
9q78igpj

9q78igpj1#

您可以使用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
vjrehmav

vjrehmav2#

您可以使用LINQ的All()扩展方法来验证数组中的所有控件是否具有相同的Tag。
您可以使用Any()方法来验证数组中是否至少有一个Control将其Tag设置为指定值。
如果您有**Option Strict ON**,为了避免NullReferenceException,因为Tag属性的类型是Object并且可以为空(Nothing),您可以使用Is operator来执行检查:
(数组中的a Control在某些时候也可以是nothing,因此我们可以使用txt?.Tag Is (...)
在这种情况下,即使其中一个TextBox由于某种原因为Nothing,但如果其他TextBox都具有相同的Tag值,则该方法将返回True

Dim result As Boolean = allTextboxes.All(Function(txt) txt?.Tag Is "2")

如果resultTrue,则所有TextBoxes.Tag属性都设置为比较中使用的值。
在以下情况下,此比较将返回True:

  • 该字符串是使用设计器中的属性网格分配的
  • 在代码中,具有直接赋值:Control.Tag = "2"
  • 在代码中,使用字段或局部变量:
Private TagValue As String = "2" 
  [Control].Tag = TagValue

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

正如VisualVincent所指出的,Is operator不执行值比较;它确定两个Object是否引用同一个Object(在本例中,字符串是以编程方式创建的,因此比较是在intern pool table中的字符串引用上执行的)。
这可能是一个理想的结果,也可能不是。
设置:

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值以确定两个对象是否相等。
在本例中,即使数组中的一个或多个控件已被释放或为null,并且符合**Option Strict**,它也将为True
但是,如果Tag属性之一设置为Nothing,则将引发NullReferenceException
在这种情况下,需要进行双重检查:

Dim result As Boolean = allTextboxes.
    All(Function(txt) txt.Tag IsNot Nothing AndAlso txt.Tag.Equals("2"))

相关问题