我有这个数组,其中包含类的每个属性的名称和值类型...
public string[,] test = new string[,]
{
{ "s", "ID", "textBox" },
{ "s", "Status", "" },
{ "s", "User", "" },
{ "s", "JobTitle", "textBox" },
{ "s", "Number", "textBox" },
{ "s", "Club", "" },
因为我表单中的每个文本框都以“txt”开头,所以我可以动态地拥有所有文本框名称..
for (int i = 0; i < (mobile.test.Length / 3); i++)
{
if (mobile.test[i, 2] == "textBox")
{
TextBox tb = new TextBox();
string textBoxName = "txt" + mobile.test[i, 1];
我可以通过反射动态地获得我的类属性值,例如:
var type = mobile.GetType();
var property = type
.GetProperty(mobile.test[i, 1])
.GetValue(mobile);
所以我的目标是用类属性值填充所有文本框,但我似乎找不到如何...
object obj = tb
.GetType()
.GetProperty("Name")
.SetValue(tb, textBoxName); --> this doens't work
obj
.GetType()
.GetProperty("Text")
.SetValue(obj, Convert.ToString(property), null);
但这不起作用... :(
更新1:
好的,我让它像这样工作:
string textBoxName = "txt" + mobile.test[i, 1];
object[] tb = this.Controls.Find(textBoxName, true);
object obj = tb[0];
Type mobileType = mobile.GetType();
var property = mobileType.GetProperty(mobile.test[i, 1]).GetValue(mobile);
obj.GetType().GetProperty("Text").SetValue(obj, Convert.ToString(property), null);
虽然它有效,但我想知道这是否是最好的方法......?谢谢你