日期:2014-05-18  浏览次数:20967 次

C# GetField 的问题
TextBox[] t = new TextBox[5];
t[1] = new TextBox();
t[1].Name = "T1";
t[1].Text = "dsf";
t[1].Location = new Point(25, 25);
this.Controls.Add(t[1]);

Object o = this.GetType().GetField("T1",BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance).GetValue(this);

在最后一句的时候提示“未将对象引用设置到对象的实例。”
有人知道要怎么写吗?

我想在窗体初始化的时候动态添加控件,可以添加之后要怎么操作控件,
例如给出"T1"就能找到此控件。

------解决方案--------------------
如果我没猜错的话,你把这句话写在方法里:
TextBox[] t = new TextBox[5]; 
t是字段,不能写在方法里
class Form1:Form
{
public TextBox[]t=new TextBox[5];
void SomeMethod()
{
for (int i = 0; i <5; i++) 

t[i] = new TextBox(); 
t[i].Name = "T"+i.ToString(); 
t[i].Text = "dsf" + i.ToString(); 
t[i].Location = new Point(25, 25*i); 
this.Controls.Add(t[i]); 


Object o = this.GetType().GetField("t",BindingFlags.Public ¦BindingFlags.NonPublic ¦BindingFlags.Instance).GetValue(this); 
TextBox[] tb = o as TextBox[]; 
foreach (TextBox b in tb) 
if (b.Name == "T1") 
MessageBox.Show(b.Text);
}
}

要学会思考,不要总是依赖别人,结贴吧