user2275347
user2275347

Reputation: 3

Using the Content of Textbox as a variable in VB (2012)

In the code below b textbox will contain the string "a.text" what I want b textbox to be the evaluation of the content of the string "a.text" which is the word Test. Please don't suggest: b.text = a.text

Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim t As String
    a.Text = "Test"
    t = "a.text"
    b.Text = t
End Sub

End Class

Upvotes: 0

Views: 2356

Answers (2)

John Bustos
John Bustos

Reputation: 19574

You can do what you asked for using Reflection ... I'm not an enormous fan of it for something like this, but here's how it would look in your code:

Imports System.Reflection

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        a.Text = "Hello"

        Dim t As String = "a.Text"

        b.Text = DirectCast(SetValue(t), String)
    End Sub

    Public Function SetValue(ByVal name As String) As Object

        Dim ctrl As Control = Me.Controls(name.Split("."c)(0))
        Return ctrl.GetType().GetProperty(name.Split("."c)(1)).GetValue(ctrl, Nothing)
    End Function
End Class

This would set textbox a's value to "Hello" and then copy that to textbox b using the reflection method.

Hope this helps!

Upvotes: 0

APrough
APrough

Reputation: 2701

Check out Controls collection of your form. You can find an item based on its name.

Also check out this answer VB .NET Access a class property by string value

So, you could take your string, split it by the ".", find the control using the Controls Collection, and then get the property using the second half of your string using Reflection.

Of course, if you are just looking for the Text of the textbox, you just need to use the collection and forget the reflection. Like this..

    For i As Integer = 1 To 25
        .fields("Field" & i).value = Me.Controls("QAR" & i).Text
    Next

Upvotes: 1

Related Questions