0

我正在运行一个将数据表和字符串作为参数的 Sub。

Private Sub Populate(ByVal dttemp As DataTable, ByVal strWhichPart As String)

在某一时刻,有一个组合框填充了数据表中的一些数据。组合框的名称是 cmd 加上字符串的名称,例如当字符串是 Person_FirstName 时,组合框的名称是 cmbPerson_FirstName。然后我像这样将项目添加到组合框中:

 cmbPerson_FirstName.Items.Add(strHold(rr))

我的问题是我可以将字符串变成命令吗?因为我有许多与 sub 的字符串参数同名的组合框我怎么能做这样的事情来工作

strWhichPart.Items.Add(strHold(rr))

其中 strWhichPart 是一个字符串。有没有可以将字符串作为命令执行的命令?谢谢你。

4

3 回答 3

1

如果我理解正确,只需Controls使用字符串作为键从表单集合中获取正确的控件:

CType(Controls(strWhichPart), ComboBox).Items.Add(strHold(rr))
于 2010-09-15T09:33:46.367 回答
1

您可以通过使用方法中的代码创建程序集来使用反射来实现此目的,但实际上不推荐这样做。如题,太疯狂了。我怀疑 .NET 开发中没有需要这种方法的问题。

而不是使用这种方法,实际上将相关的组合框作为参数传递 - 而不是任意字符串。组合框是和其他任何东西一样的对象。您可以创建一个字典,允许您通过字符串查找组合框。就像是:

Dictionary(Of String, ComboBox) MyDictionary = new Dictionary(Of String, ComboBox)()
MyDictionary.Add("ComboBoxA", objComboBoxA)
ComboBox objTheComboBox = MyDictionary("ComboBoxA")

你给你的对象的名字在你的代码中不应该是语义相关的。如果我将一个对象命名为“lstMyObjectNamedThisWayForAreason1”,我不应该使用它来引用它。相反,应该区分构成 GUI 元素的内容和引用它的方式。

例如,如果我创建一个 WinForms GUI 并直接引用所有项目,那么以后必须使用不同的框架编写另一个前端,我必须重写每个引用。如果您不将逻辑直接绑定到控件中,这不是问题。

将它们联系在一起的唯一原因是懒惰和对将来可能需要改进您的代码的同事缺乏尊重。他们为什么要关心 GUI 的外观?他们甚至可能没有使用 Visual Studio!他们当然不能在不消除您的 GUI 依赖关系的情况下将您的代码用于其他地方。

于 2010-09-15T09:35:16.673 回答
1

对 ho1 稍作修改就可以了。非常感谢

 CType(Controls("cmb" + strWhichPart), ComboBox).Items.Add(strHold(rr))
于 2010-09-15T10:09:34.357 回答