VB.Net文本框输入文本作为变量名

VB.Net文本框输入文本作为变量名,vb.net,Vb.net,我想测试一下我是否可以让它工作:我有两个文本框,ID分别为Textbox1和Textbox2。我在Textbox1中输入存储在程序中的变量名,然后在Textbox2中输入任何值。单击确认按钮后,我希望将我在Textbox1中写入的变量名的值更改为我在Textbox2中写入的值 类似这样的内容(在伪代码中) 有没有一种简单的方法来完成这项工作,或者我会被迫创建其他类型的函数来解决这类问题?是的,您可以使用反射来完成这项工作 dim property = this.GetType().GetProp

我想测试一下我是否可以让它工作:我有两个文本框,ID分别为Textbox1和Textbox2。我在Textbox1中输入存储在程序中的变量名,然后在Textbox2中输入任何值。单击确认按钮后,我希望将我在Textbox1中写入的变量名的值更改为我在Textbox2中写入的值

类似这样的内容(在伪代码中)


有没有一种简单的方法来完成这项工作,或者我会被迫创建其他类型的函数来解决这类问题?

是的,您可以使用反射来完成这项工作

dim property = this.GetType().GetProperty(Textbox1.Text)
property.SetValue(this, Textbox2.Text)
这对局部变量无效,但对属性有效



当然,更好的方法是使用
字典(字符串,字符串)
而不是松散变量。然后,您可以只编写
myValues(Textbox1.Text)=Textbox2.Text

,也可以在运行时使用Textbox1 Text的值创建标签控件,并根据Textbox2的文本指定值。此标签将不可见:

Dim MyNewObject As Control
MyNewObject = New Label
MyNewObject.Name = Textbox1.Text
MyNewObject.Text = Textbox2.Text
MyNewObject.Visible = False
Me.Controls.Add(MyNewObject)
您可以在表单的任何部分使用它作为变量。显示该值的示例应如下所示:

MsgBox(Me.Controls(Textbox1.Text).Text)

使用反射的另一个例子。这将适用于字段或属性。它们可以是公共的,也可以是私人的,您不必完全符合以下情况:

    Try
        Dim FI As System.Reflection.FieldInfo = Me.GetType.GetField(TextBox1.Text, Reflection.BindingFlags.IgnoreCase Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public Or Reflection.BindingFlags.NonPublic)
        If Not IsNothing(FI) Then
            FI.SetValue(Me, TextBox2.Text)
        Else
            Dim PI As System.Reflection.PropertyInfo = Me.GetType.GetProperty(TextBox1.Text, Reflection.BindingFlags.IgnoreCase Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public Or Reflection.BindingFlags.NonPublic)
            If Not IsNothing(PI) Then
                PI.SetValue(Me, TextBox2.Text)
            Else
                MessageBox.Show(TextBox1.Text, "Field or Property not found!")
            End If
        End If
    Catch ex As Exception
        MessageBox.Show(ex.Message, "Unable to Set Value")
    End Try

可能想检查这个问题:唯一的方法是使用case语句,检查输入的值并设置相关变量。因为你必须提前知道变量名才能将其输入TextBox1,这似乎是一个毫无意义的问题——从UI的角度来看,这是一个可怕的想法,而且有更好的方法来完成同样的事情。你有很好的想象力。是什么让你相信这样的事情是可能的?即使有可能,您也必须指定
TextBox1
,而不是
TextBox1.Text
。我希望在未来几个月将要创建的更大工具中使用这种功能—供我自己使用。我需要能够通过一个简单的用户界面更改我创建的任何类型的变量,这样我就可以很容易地将结果转换为我要创建的程序本身,而不是依赖于像这样的工具。因此,创建这种函数是为了节省一些时间,以避免为我需要检查的每个新变量创建新的“选择案例”,直到我知道它应该是什么样子。属性是我需要的答案。谢谢你的回答!伟大的非常感谢。我有办法解决这个问题!我甚至没有想过使用属性,但它完美地解决了我的问题!非常感谢。虽然我同意这将解决问题本身,我问这里它不会翻译到我真正想使用它的地方!但无论如何,谢谢你的回答——它仍然给了我一种新的方法来解决像这样的问题!谢谢你的回答!我通过反思解决了我的问题,这个答案为我指明了正确的方向,然后Idle_Mind的答案让我真正解决了我的问题,非常感谢!
    Try
        Dim FI As System.Reflection.FieldInfo = Me.GetType.GetField(TextBox1.Text, Reflection.BindingFlags.IgnoreCase Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public Or Reflection.BindingFlags.NonPublic)
        If Not IsNothing(FI) Then
            FI.SetValue(Me, TextBox2.Text)
        Else
            Dim PI As System.Reflection.PropertyInfo = Me.GetType.GetProperty(TextBox1.Text, Reflection.BindingFlags.IgnoreCase Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public Or Reflection.BindingFlags.NonPublic)
            If Not IsNothing(PI) Then
                PI.SetValue(Me, TextBox2.Text)
            Else
                MessageBox.Show(TextBox1.Text, "Field or Property not found!")
            End If
        End If
    Catch ex As Exception
        MessageBox.Show(ex.Message, "Unable to Set Value")
    End Try