在excel中我可以说=INDIRECT("A" & G3)
其中G3的值为4,然后我的单元格将引用A4。我正在寻找的是VB.net的类似功能。
有没有办法根据变量引用不同的变量。例如。第一遍我是指txtJobNum1,txtBatNum1和lblBat1。传递两个txtJobNum2,txtBatNum2和lblBat2。如果它只是少数,3-4可能,它不会令人烦恼,但它是50。我现在想出来的最好的解决方案是构建一个类,它保存对这些对象的引用并创建该类的数组。下面是一个示例表,显示了我想用给定的输入数字做什么。
你可以看看如何使用“间接”功能它可能会缩小到5-6行循环而不是200行只是变量赋值。
我对它如何运作的概念
BatchGroups(<NUMBER>).Label = lblBatNum<NUMBER+1>
0 BatchGroups(0).Label = lblBatNum1 0 BatchGroups(0).Number = txtBatNum1 0 BatchGroups(0).Quantity = txtQtybat1 0 BatchGroups(0).JobNumber = txtJobNum1 1 BatchGroups(1).Label = lblBatNum2 1 BatchGroups(1).Number = txtBatNum2 1 BatchGroups(1).Quantity = txtQtybat2 1 BatchGroups(1).JobNumber = txtJobNum2 2 BatchGroups(2).Label = lblBatNum3 2 BatchGroups(2).Number = txtBatNum3
答案 0 :(得分:0)
所有控件都存储在其父级的Controls
集合中,Controls
集合中的控件可按名称寻址,如下所示:
Dim theControl As Control = Me.Controls("txtJobNum" & theNumber)
(其中Me
是Form
)如果控件位于某个其他容器控件(例如面板)中,则可以通过该容器控件的Controls
属性访问它们,实例:
Dim theControl As Control = MyPanel.Controls("txtJobNum" & theNumber)
然而,有50个奇怪的控件,听起来像是一个糟糕的设计无论如何。考虑使用网格或某种可编辑列表可能更好。如果你必须拥有这样的所有单独控件,那么在循环中动态加载它们可能会更好,然后按照你的想法将引用存储在BatchGroup
对象列表中。在循环中更容易实现这一点,因为您只需为每个批处理组编写一次代码而不是单独编写代码。
更一般地说,.NET中的术语称为“反射”。但是,使用反射可能会导致代码更脆弱,而且效率也不高,因此,当有其他替代方法时,就是这种情况,通常最好采用其中一种,而不是采用反射。
答案 1 :(得分:0)
按Name
创建对象的字典。然后使用TryGetValue
进行检索。在这种情况下,它会期望String
值为Key
,因此您可以拥有自定义命名方案,该方案将1对1映射到控件列表中。
详细了解MSDN上的Dictionary
课程:
你可以使用父容器的.Controls
,但是你的控件可以互相嵌套,所以你必须使用递归或线性化到平面列表中,或者添加复杂性和可维护性,并降低性能。 Dictionary
是最快的,特别是如果您的Key
是字符串。