Ссылка на объект с помощью переменной строки в Visual Basic 2010 - PullRequest
1 голос
/ 08 октября 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

Ответы [ 2 ]

4 голосов
/ 03 декабря 2014

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

    Dim lab As Label

    For i As Integer = 1 To 2
            lab = Me.Controls("label" & i)
            lab.Text = "Test" & i
    Next
2 голосов
/ 09 октября 2010

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

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

Вот простой пример, заменитецикл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...