2014-12-04 69 views
1

我想測試如果我能得到這個工作:我有兩個文本框ID爲Textbox1和Textbox2。我在Textbox1中輸入存儲在程序中的變量的名稱,然後在Textbox2中輸入任何值。點擊確認按鈕後,我希望將我在Textbox1中編寫的變量名稱的值更改爲我在Textbox2中編寫的值。VB.Net文本框輸入文本作爲變量名稱

這樣的事情(在僞代碼)

GetVariable(Textbox1.Text) = Textbox2.Text 

有一種簡單的方法來完成這件事或將我不得不創建其他類型的函數來解決這樣的問題呢?

+2

可能要看看這個問題:使用包含在.NET中的變量名的字符串訪問一個方法局部變量的值](http://stackoverflow.com/questions/19254325/access-a-methods-local-variable-value-using-a-string-containing-the-variable-nam) – kaveman 2014-12-04 01:29:57

+1

做到這一點的唯一方法是隻需使用case語句,檢查輸入的值並設置相關變量。既然你必須提前知道變量名以將其輸入到TextBox1中,這似乎是一個毫無意義的問題 - 從UI的角度來看這是一個可怕的想法,並且有更好的方法來完成同樣的事情。 – 2014-12-04 01:31:09

+0

你有一個很好的想象力。是什麼讓你相信這樣的事情是可能的?即使可能,您也必須指定「TextBox1」,而不是「TextBox1.Text」。 – 2014-12-04 01:55:07

回答

1

另一個使用反射的例子。這將適用於字段或屬性。他們可以是公共或私有的,你不必案例完全匹配:

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 
+0

太棒了!謝謝!我明白了這一點!我甚至沒有想過使用屬性,但它解決了我完美的問題!謝謝! – 2014-12-04 10:33:46

2

是的,你可以使用反射來做到這一點。

dim property = this.GetType().GetProperty(Textbox1.Text) 
property.SetValue(this, Textbox2.Text) 

這對本地變量不起作用,但它可以在屬性上工作。


當然,更好的方法是隻使用Dictionary(of string, string)而不是鬆散變量。那麼你可以寫myValues(Textbox1.Text) = Textbox2.Text

+0

謝謝你的回答!我設法解決了我通過使用Reflection所遇到的問題,這個答案指向了正確的方向,然後Idle_Mind的回答讓我真正解決了我的問題,所以非常感謝! – 2014-12-04 10:43:49

0

或者您也可以在運行時使用TextBox1文本的值創建標籤控件,並根據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) 
+0

雖然我同意這會解決這個問題本身,我問在這裏它不會被翻譯成我真正想要使用它的地方!但無論如何感謝你的答覆 - 它仍然給我一個新的方式來解決這樣的問題! – 2014-12-04 10:35:52