conquistador
conquistador

Reputation: 693

Using string as object name

I'm trying to use string as object name. Example I have an object and has a name = Label1. Can I do this?

Dim i As String = "Label1"
someVariable = i.Text

I'm using string as object name, is it possible?

Upvotes: 2

Views: 14870

Answers (5)

İhsan Kayman
İhsan Kayman

Reputation: 1

I found the following solution on another site. It works.

--Quote -

    Dim TextBox As TextBox
    Dim I As Integer = 2
    Dim name As String = "TextBox" & I.ToString
    TextBox = Me.Controls.Item(name)
    TextBox.Text = "Something special"

Upvotes: 0

Ruba
Ruba

Reputation: 1

I'm sure it's answered but some points to be clear it's control array and result so as to be sure it's corrected.

Private Sub btn1_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
    Dim Ds As New DataSet

    Dim str As String = ""
    str = " SELECT     TOP (10) t_Suppliers.STNo  from t_Suppliers  "
     Ds = SqlHelper.ExecuteDataset(ConnectionString, CommandType.Text, str)
    For i As Integer = 0 To Ds.Tables(0).Rows.Count - 1
        Dim str1 As String = "lblInv" & i + 1
        Dim OBj As New Label
        Try

       Dim SearchedControls() As Control = Me.Controls.Find(key:=str1, searchAllChildren:=True)
           If SearchedControls.Length > 0 Then
                SearchedControls(0).Text = Ds.Tables(0).Rows(i).Item("STNo").ToString
            End If
        Catch
        End Try
    Next
End Sub

Upvotes: 0

djv
djv

Reputation: 15772

I know it's been answered, but this is from my library, and I use it all the time. It will iterate over all controls, and containers' controls recursively as @ChrisHaas suggested.

Public Function GetControlByName(ByRef parent As Control, ByVal name As String) As Control
    For Each c As Control In parent.ChildControls
        If c.Name = name Then
            Return c
        End If
    Next
    Return Nothing
End Function

<Extension()> _
Public Function ChildControls(ByVal parent As Control) As ArrayList
    Return ChildControls(Of Control)(parent)
End Function

<Extension()> _
Public Function ChildControls(Of T)(ByVal parent As Control) As ArrayList
    Dim result As New ArrayList()
    For Each ctrl As Control In parent.Controls
        If TypeOf ctrl Is T Then result.Add(ctrl)
        result.AddRange(ChildControls(Of T)(ctrl))
    Next
    Return result
End Function

(It's been asked and answered before) Loop Through Controls on Web User Control

Upvotes: 1

Chris Haas
Chris Haas

Reputation: 55457

You could iterate over all of the controls as @Christian Sauer said but you might run into problems if any controls are containers of controls. You'd need to do a recursive search to solve that. However, the ControlCollection actually has a Find() method that you can use. It returns an array of controls that match the name and optionally performs a recursive search.

    ''//Our final control
    Dim someVariable As Control = Nothing
    ''//Search recursively for our control
    Dim SearchedControls = Me.Controls.Find(key:="Label1", searchAllChildren:=True)
    ''//If we found one and only one control
    If SearchedControls.Count = 1 Then
        ''//Set it to our variable
        someVariable = SearchedControls(0)
    Else
        ''//Whatever your logic dictates here
    End If

Upvotes: 3

Christian Sauer
Christian Sauer

Reputation: 10909

This is not possible - but what you can do:

Dim i As String = "Label1"

Dim Obj  as Label
for each elem in me.controls
   if elem.Name = i then
     Obj =  elem
     exit for
   end if
next

someVariable = obj.Text

I am iterating over all WinForms control to find the label with the Name "Label1" - when found, i assign the label to a Variable. This works, but can be quite dangerous, especially if you add controls

Upvotes: 2

Related Questions