0

在 excel=INDIRECT("A" & G3)中,我可以说 G3 的值为 4,然后我的单元格将引用 A4。我正在寻找的是 VB.net 的类似功能。

有没有办法根据变量引用不同的变量。例如。第一遍我是指 txtJobNum1、txtBatNum1 和 lblBat1。在传递两个 txtJobNum2、txtBatNum2 和 lblBat2 时。如果它只有几个,也许 3-4,它不会很麻烦,但它是 50。我现在想出的最好的解决方法是构建一个包含对这些对象的引用的类,并创建一个该类的数组。下面是一个示例表,显示了我想用给定的输入数字做什么。

你可以看到如果我可以使用“INDIRECT”函数它可能会缩小到 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
4

2 回答 2

0

所有控件都存储在Controls其父级的集合中,并且集合中的控件Controls可以按名称寻址,如下所示:

Dim theControl As Control = Me.Controls("txtJobNum" & theNumber)

(在哪里MeForm如果控件位于其他容器控件(例如面板)中,则可以通过该容器控件的Controls属性访问它们,例如:

Dim theControl As Control = MyPanel.Controls("txtJobNum" & theNumber)

然而,拥有 50 个这样的奇怪控件听起来可能是一个糟糕的设计。考虑使用网格或某种可编辑的列表可能会更好。如果您必须拥有所有这样的单独控件,最好在循环中动态加载它们,然后BatchGroup按照您的想法将对它们的引用存储在对象列表中。在循环中这样做会容易得多,因为您只需编写一次代码,而不是为每个批处理组单独编写代码。

更一般地说,.NET 中您所要求的术语称为“反射”。但是,使用反射会导致您的代码更脆弱,而且效率也不高,因此,当有其他替代方案时,通常最好采用其中一种,而不是诉诸反射。

于 2014-01-06T15:20:08.763 回答
0

通过 . 创建您的对象字典Name。然后使用TryGetValue检索。在这种情况下,它需要一个String值为 a Key,因此您可以使用自定义命名方案,将 1 对 1 映射到您的控件列表。

Dictionary在 MSDN 上阅读有关课程的更多信息:

可以使用.Controls父容器,但是您的控件可能会相互嵌套,因此您必须使用递归或线性化到平面列表中,这会增加复杂性和可维护性,并降低性能。Dictionary是最快的,特别是如果你Key是一个字符串。

于 2014-01-06T15:26:39.683 回答