Как запустить строку как команду в Visual Basic (VB.NET) - PullRequest
0 голосов
/ 15 сентября 2010

Я использую Sub, которая принимает в качестве аргументов Datatable и String.

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

В какой-то момент есть комбинированный список, который заполняется некоторыми данными из таблицы данных.Имя поля со списком - это cmd плюс имя строки, например, когда строка представляет собой Person_FirstName, имя поля со списком - cmbPerson_FirstName.Затем я добавляю элементы в комбинированный список следующим образом:

 cmbPerson_FirstName.Items.Add(strHold(rr))

Мой вопрос заключается в следующем: могу ли я сделать строку в команду?Поскольку у меня есть много выпадающих списков, которые имеют то же имя, что и строковый аргумент подпрограммы, как я могу сделать что-то подобное для работы

strWhichPart.Items.Add(strHold(rr))

, в которой strWhichPart является строкой.Есть ли команда, что я могу выполнить строку как команду?Спасибо.

Ответы [ 3 ]

1 голос
/ 15 сентября 2010

Вы можете использовать отражение для достижения этой цели, создавая сборку с кодом в методе, но это действительно не рекомендуется. Как в, это безумие. Я подозреваю, что нет никаких проблем в разработке .NET, которые нуждаются в таком подходе.

Вместо того, чтобы использовать этот подход, фактически передайте соответствующее поле со списком в качестве аргумента, а не произвольную строку. Комбо-боксы являются объектами, как и все остальное. Вы можете создать словарь, который позволяет вам искать поля со списком. Что-то вроде:

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

Имя, которое вы даете своим объектам, не должно быть семантически релевантным в вашем коде. Если я назову объект "lstMyObjectNamedThisWayForAReason1", я НЕ должен использовать это для ссылки на него. Вместо этого должно быть разделение между тем, что составляет элемент GUI, и тем, как на него ссылаются.

Например, если я создаю графический интерфейс WinForms и ссылаюсь на все элементы напрямую, то позже мне придется написать другой интерфейс с использованием другой инфраструктуры, которую я должен переписать каждую ссылку. Это не проблема, если вы не привязываете свою логику непосредственно к элементам управления.

Единственная причина связать их вместе - это лень и неуважение к коллегам, которым, возможно, придется улучшить ваш код в будущем. Почему их должно волновать, как выглядит GUI? Они могут даже не использовать Visual Studio! Они, конечно, не могут взять ваш код и использовать его где-либо еще, не избавившись от вашей зависимости от графического интерфейса.

1 голос
/ 15 сентября 2010

С незначительной модификацией ho1 все заработало.Большое спасибо

 CType(Controls("cmb" + strWhichPart), ComboBox).Items.Add(strHold(rr))
1 голос
/ 15 сентября 2010

Если я правильно понимаю, просто возьмите правильный элемент управления из коллекции Controls формы, используя строку в качестве ключа:

CType(Controls(strWhichPart), ComboBox).Items.Add(strHold(rr))
...