0

在 Vb.Net 中,我动态地创建了几个文本框和标签。我将它们命名为 ex。VLabel1, VLabel2, VLabel3... 然后我使用CType和 一个变量来使用它们。

Dim VarName as String
Dim i as Integer
Dim MyLabel as Label

i=0
VarName = ("VLabel" & i.ToString)
MyLabel = CType(Panel1.Controls(VarName), Label)

现在我正在使用 LineShape 添加线条(我不能使用高度为 1 的标签,因为我的线条是对角线)。我可以使用类似的方式来选择特定的行,还是必须在 ShapeContainer 中使用循环并比较名称,直到找到我想要的?

谢谢,

斯蒂芬妮

4

2 回答 2

0

我是否必须在我的 ShapeContainer 中使用一个循环并比较名称,直到找到我想要的名称?

你觉得有什么Controls(VarName)作用?它也必须按名称查找控件。如果您对此感到满意,则可以在表单中编写一个执行相同操作的方法。

但是对于 LineShapes 和 Labels 来说,更好的选择是 useList(Of LineShape)和 a List(Of Label). 当您创建动态控件并从表单中添加或删除它时,还要从列表中添加或删除它。然后您可以通过索引引用这些项目,而无需构建名称字符串。通过这种方式,您的投射也会减少。

于 2018-04-05T19:50:37.583 回答
0

按名称索引它们的另一个选项是使用Dictionary(Of String,Lineshape)and Dictionary(Of String, Label)。几个助手子可以处理在需要的地方添加/删除以及添加/删除到适当的字典。有了这个,你也消除了转换的需要,因为实际的对象已经是正确的类型。

更好的是,由于 Shapes 不是标准库的一部分,我建议学习如何将线条直接绘制到您的 form 上

我从来没有这样做过,但是应该可以通过创建一个从 Control 类继承的类并覆盖 Paint 子来绘制线条来实际将线条创建为控件。

于 2018-04-05T21:48:35.543 回答