【问题标题】:VB.NET Change visibility of multiple labels on runtimeVB.NET 在运行时更改多个标签的可见性
【发布时间】:2021-03-27 22:13:09
【问题描述】:

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

    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

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

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

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

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

【问题讨论】:

    标签: arrays vb.net label runtime


    【解决方案1】:

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

        For Each label In labelsEmpty
    
            With Controls(label)
                .Text = "Insert a value"
                .Visible = True
            End With
    
        Next
    

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

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

        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 属性,以便标签与您现有的文本框正确对齐。有几种方法可以做到这一点,但我将把它留给你,因为我很确定我的第一个解决方案可以回答你的问题。

    【讨论】:

    • 第一个解决方案是我一直在寻找的,但是它不起作用,因为我的数组列表包含字符串,这些字符串是必须设置为可见的标签的名称,而不是标签对象本身,给了我此错误:“对象变量或未设置块变量”
    • Controls() 接受 String 作为参数。您确定传递给 Controls() 的字符串是您尝试引用的标签的确切名称吗?
    • 是 100% 打印数组中的第一个字符串,并带有一个带有以下形式的标签的示例:imgur.com/a/3b9YIhG
    • 我将 arraylist 更改为字符串列表,如下所示: Dim labelsEmpty As New List(Of String) 现在错误是“$W0 was Nothing”,当执行 .Text =“Insert a value” .我可能会抛弃这个标签的想法
    • 我被告知将其移至 Chat,但我没有足够高的声誉来执行此操作 - 所以:您从 tabControl.TabPages(2).Controls 获取名称,但随后尝试通过在主窗体上搜索来找到它们。他们不在那里!它们位于 TabPage(2) 上。您的第二个循环需要使用 tabControl.TagPages(2).Controls(label)
    猜你喜欢
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    相关资源
    最近更新 更多