我想测试一下是否能让它工作:我有两个带有ID Textbox1和Textbox2的文本框。我在Textbox1中输入我存储在程序中的变量的名称,然后在Textbox2中输入任何值。单击确认按钮后,我希望将我在Textbox1中编写的变量名的值更改为我在Textbox2中写入的值。
像这样(伪代码)
GetVariable(Textbox1.Text) = Textbox2.Text
有没有一种简单的方法可以完成这项工作,还是我会被迫创建其他类型的函数来解决这类问题?
答案 0 :(得分:2)
是的,你可以使用反射来做到这一点。
dim property = this.GetType().GetProperty(Textbox1.Text)
property.SetValue(this, Textbox2.Text)
这不适用于局部变量,但它适用于属性。
当然,更好的方法是使用Dictionary(of string, string)
而不是松散变量。然后你可以写myValues(Textbox1.Text) = Textbox2.Text
。
答案 1 :(得分:1)
使用Reflection的另一个例子。这将适用于字段或属性。他们可以是公开的或私人的,你不必完全匹配案例:
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
答案 2 :(得分:0)
或者您也可以在运行时使用TextBox1 Text的值创建标签控件,并根据TextBox2的Text分配值。此标签将不可见:
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)