在Vb.Net中,我在dinamycally创建了几个文本框和标签。我将它们命名为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中使用循环并比较名称,直到找到我想要的那个?
谢谢,
的Stephane
答案 0 :(得分:0)
我是否必须在ShapeContainer中使用循环并比较名称,直到找到我想要的名称?
您认为Controls(VarName)
有什么作用?它也必须按名称查找控件。如果您对此感到满意,可以在表单中编写一个执行相同操作的方法。
但LineShapes和标签的更好选择是使用List(Of LineShape)
和List(Of Label)
。当您创建动态控件并在表单中添加或删除它时,也可以在列表中添加或删除它。然后,您可以通过索引引用这些项,而无需构建名称字符串。你也可以通过这种方式减少投射。
答案 1 :(得分:0)
按名称对其进行索引的另一个选项是使用Dictionary(Of String,Lineshape)
和Dictionary(Of String, Label)
。一些帮助子可以在需要的地方处理添加/删除,并添加/删除到适当的词典。通过这种方式,您还可以消除对铸造的需求,因为实际对象已经是正确的类型。
更好的是,由于Shapes不是标准库的一部分,我建议学习如何draw the lines directly on to your form。
我从来没有这样做过,但是应该可以通过创建一个继承自Control类并重写Paint子类来绘制线的类来实际创建行作为控件。