Ссылка на объект с помощью переменной строки в Visual Basic 2010

У меня есть несколько наборов похожих объектов (метки, индикаторы выполнения) на форме вVisual Basic 2010 в Windows, В моем коде у меня есть коллекции, которые содержат данные, которые нужно вставить в свойство value / text каждого из них.

Я хотел бы получить решение, похожее на PHP, в котором я могу присваивать значения примерно так:

For ID as Integer from 0 to count(collectionExample) lblExample{ID}.Text=collectionExample(variableID)

... и, таким образом, проходить циклы, чтобы каждый из разных lblExample обновлялся до соответствующего значения.

Проблема, к которой я пришел, заключается в том, что я не могу ссылаться на объект в форме, используя переменную. Я также пытался использовать что-то вроде

CallByName("lblExample" + variableID, "Text", CallType.Set, exampleCollection(variableID))... однако я все еще не могу объединить строку и переменную для ссылки на объект.

Какие-либо решения по ссылкам на объекты в VB2010 путем объединения префикса строки и идентификатора переменной строки, аналогично подходу PHP $ variable {$ variable}?

Изменить: Платформа Windows

 Ellipsis08 окт. 2010 г., 10:37
Это для Windows. Разработка под XP SP3.
 Murph08 окт. 2010 г., 09:56
Веб или Windows?
 nn1ka3l07 мар. 2017 г., 17:46
В случае, если у кого-то есть подобная проблема, мне нужно выяснить еще два «обновления»: - использовать someVariable в качестве элемента управления - использовать набор для объекта не только someVariable = elem Dim i As Integer: i = 2 Dim someVariable As Control Dim Name As String : Name = "label" & CStr (i) Для каждого элемента в Me.Controls If (elem.Name = Name) Затем установите someVariable = elem Выход для завершения, если следующий someVariable.Text = "What ever"

Ответы на вопрос(2)

Решение Вопроса

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

Затем вы можете получить доступ к элементам управления, используя строку.

Вот простой пример: замените цикл for на цикл foreach ...

Может быть более понятный способ связать ваши данные с элементами управления, например, поместить элементы управления в коллекцию, индексированную целым числом (идентификатор в вашем примере), но вы запросили строку!

Public Class Form1

Dim ctrlDict As New Dictionary(Of String, Control)

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    ctrlDict.Add("label1", Label1)
    ctrlDict.Add("label2", Label2)

    For i As Integer = 1 To 2
        ctrlDict("label" & i).Text = "Test" & i
    Next
End Sub

End Class
 Joel Coehoorn17 апр. 2012 г., 00:05
Если вы собираетесь добавлять элементы в коллекцию, зачем возиться с строковыми ключами: просто создайте коллекцию, чтобы хранить элементы, которые вам интересны, и перебирайте все элементы в коллекции.
 Ellipsis27 апр. 2011 г., 01:43
Привет, Би Пит, извиняюсь за то, что не ответил раньше - меня повторно попросили, и у меня еще не было возможности проверить этот прекрасный ответ, но я скоро вернусь к нему! В то же время, есть предварительная галочка. Спасибо за ваше время, и я с нетерпением жду, чтобы проверить его.

Это также работает:

    Dim lab As Label

    For i As Integer = 1 To 2
            lab = Me.Controls("label" & i)
            lab.Text = "Test" & i
    Next

Ваш ответ на вопрос