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)