Excel Indirect()类型函数对于VB.net?

时间:2014-01-06 15:15:44

标签: vb.net variables .net-3.5 excel-indirect

在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

2 个答案:

答案 0 :(得分:0)

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

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

(其中MeForm)如果控件位于某个其他容器控件(例如面板)中,则可以通过该容器控件的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是字符串。