Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays VB.NET在运行时更改多个标签的可见性_Arrays_Vb.net_Label_Runtime - Fatal编程技术网

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

Arrays VB.NET在运行时更改多个标签的可见性,arrays,vb.net,label,runtime,Arrays,Vb.net,Label,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 = &q

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

    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),用“lblMsg”替换txt,然后将它们插入数组中

这样我就得到了一个数组,其中所有标签名都应该设置为visible=true

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


我的表单:

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

    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

如果这样做,则需要某种方法来设置“顶部”和“左侧”属性,以便标签与现有文本框正确对齐。有几种方法可以做到这一点,但我将把这一点留给您,因为我非常确定我的第一个解决方案回答了您的问题。

第一个解决方案就是我所寻找的,但是它不起作用,因为我的arraylist包含的字符串是必须设置为可见的标签名称,而不是标签对象本身,告诉我这个错误:“Object variable或With block variable not set”Controls()接受字符串作为参数。您确定传递给Controls()的字符串是您尝试引用的标签的确切名称吗?是的,100%打印数组中的第一个字符串,示例中的标签如下:我将arraylist更改为字符串列表,如下所示:Dim labelsEmpty As New list(of string),现在错误为“$W0 was Nothing”执行此操作时。Text=“插入值”。我可能会把这个标签的想法扔掉,我被告知要把它移到聊天室去,但我没有足够高的声誉去这么做——所以:你是从tabControl.TabPages(2.Controls)中获取名称的,但随后试图通过在主窗体上搜索来找到它们。他们不在那里!它们在选项卡页(2)上。第二个循环需要使用tabControl.TagPages(2).Controls(label)