VB.NET 更改多个标签在运行时的可见性

VB.NET Change visibility of multiple labels on runtime

我试图在单击按钮后在运行时更改不同标签的可见性

    Dim labelsEmpty As New ArrayList

    Dim allTxt As New List(Of Control)
    For Each txt As TextBox In FindControlRecursive(allTxt, Me, GetType(TextBox))
        If txt.Text = "" Then
            If txt.Name = "TextBox1" Then
            Else
                'Dim textBoxName = txt.Name.ToString.Remove("txt").ToLower
                labelsEmpty.Add(txt.Name.ToString.Replace("txt", "lblMsg"))
            End If
        End If
    Next

    For Each label In labelsEmpty

        Dim Label1 As New Label
        Label1.Name = label
        Label1.Text = "Insert a value"
        Label1.Visible = True

    Next

这就是我所拥有的,我表单中的每个文本框都有一个标签,用于告诉用户存在某种错误,在这种情况下,我需要获取哪个文本框留空并设置其可见性标签为真(从表单开始就隐藏了),所以我要做的是遍历表单中的每个文本框,看看用户将哪个文本框留空,然后取他们的名字(例如:txtAge)并将 txt 替换为“lblMsg”和然后将它们插入到数组中。

这样做我得到一个数组,其中包含所有应设置为 visible = true 的标签名称

现在我需要设置它们的可见性和文本值,所以我所做的是为每个循环创建一个并获取数组中的每个标签,但是我使用的代码不起作用,我已经检查过是否有数组中的项目,它们在那里,有什么帮助吗?谢谢

我的表格:https://i.stack.imgur.com/qrawz.png

在最后一个循环中,您正在创建 new 标签并且从不将它们添加到您的表单中。如果您的表单上已有标签,您希望引用这些标签:

    For Each label In labelsEmpty

        With Controls(label)
            .Text = "Insert a value"
            .Visible = True
        End With

    Next

如果您的标签已经包含必要的文本,则可能不需要设置文本 属性。

如果要创建新标签然后将它们添加到表单中,则需要在创建后将控件添加到表单中:

    For Each label In labelsEmpty

        Dim Label1 As New Label
        With Label1
            .Name = label
            .Text = "Insert a value"
            '.Top = 100
            '.Left = 100
            .Visible = True
        End With
        Controls.Add(Label1)

    Next

如果您这样做,您将需要一些方法来设置 Top 和 Left 属性,以便标签与您现有的文本框正确对齐。有几种方法可以做到这一点,但我会把它留给你,因为我相当确定我的第一个解决方案可以回答你的问题。