如何使用每个cnt循环来控制控件上的特定标签

时间:2017-11-06 18:21:20

标签: vb.net

我正在制作一个有几百个标签的表单,当点击一个清除按钮时,我需要将特定标签的文本重置为0,同时单独留下其他标签的文本。我不想使用组合框,因为它对我当前的布局看起来不太好。

我试图使用代码:

For Each cnt In Me.Controls
        If TypeOf cnt Is Label Then
            CType(cnt, Label).Text = ""
        End If

哪个适用于清除每个Label,但我也想指定一个特定的Tag。我试过了

For Each cnt In Me.Controls
            If TypeOf cnt Is Label And CType(cnt, Label).Tag = "ResetTo0" Then
                CType(cnt, Label).Text = ""
            End If

当我尝试使用此代码时,出现强制转换异常错误。 有没有人知道我如何添加我的标签而不会出现施法错误,或者更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

只需使用扩展名OfType即可获取标签,并且已经是正确的类型

For Each cnt In Me.Controls.OfType(Of Label)
    If cnt.Tag = "ResetTo0" Then
        cnt.Text = ""
    End If
Next

如果不是所有标签都设置了Tag属性,那么还要添加一个Nothing

的检查
if cnt.Tag IsNot Nothing AndAlso cnt.Tag = "ResetTo0" Then
   .....
End if

你甚至可以尝试使用单行(虽然我怀疑这种方法不是最好的清晰度和性能)

Me.Controls.OfType(Of Label).
            Where(Function(x) x.Tag = "ResetTo0").
            ToList().
            ForEach(Function(k) k.Text = "")