VB.NET 面板添加范围标签列表

VB.NET panel addrange list of labels

提问人:Jimmy Dubray 提问时间:11/14/2023 最后编辑:jmcilhinneyJimmy Dubray 更新时间:11/14/2023 访问量:42

问:

在我的表格中,我有一个小组。 在一个循环中,我在这个面板中创建了许多标签,但它太慢了。

因此,似乎在循环中创建标签列表并在面板中添加标签后应该会更快。

这是我的代码:

Dim listLabels as new list(of label)
for a=0 to 100
 dim lbl as new label
 label.name="label" & a.Tostring
 listLabels.add(lbl)
next

myPanel.controls.addrange(listLabels)   

错误:无法将“List(of Label)”类型的值转换为“Control()”

你能帮帮我吗?

THKS的

vb.net 面板 添加范围

评论

0赞 jmcilhinney 11/14/2023
您是否阅读了错误消息?你是否阅读了文档或关注了 Intellisense?问题正是错误消息所说的。 需要一个数组,而你要向它传递一个 .要么将列表转换为数组,您可以通过简单的 Web 搜索找到如何做到这一点,或者首先创建一个数组。鉴于您确切地知道将有多少元素,并且您已经在使用循环,这似乎是显而易见的选择。也就是说,不知道为什么你没有在设计器中添加它们。AddRangeList(Of T)For

答:

1赞 Tim Schmelter 11/14/2023 #1

Control.Controls返回一个,其中 AddRange 只接受一个(控件数组)。所以它不是 AddRange 接受的。你可以使用 ToArray,它从列表中创建一个数组:ControlCollectionControl()List<Control>IEnumerable<Control>

myPanel.Controls.AddRange(listLabels.ToArray()) 

由于您已经知道大小并且需要一个数组,因此您可以使其更有效率:

Dim labels(99) as Control  ' looks odd, but has place for 100 labels
For a As Integer = 0 To 99
    Dim lbl As New Label
    lbl.Name = "label" & a.Tostring
    labels(a) = lbl
Next
Label1.Controls.AddRange(labels)