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"就能找到此控件。
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[] tb = o as TextBox[];
foreach (TextBox b in tb)
if (b.Name == "T1")
Console.WriteLine(b.Text);
如果我没有猜错的话,你这个异常是在foreach里面吧
如果是这样,那是因为你数组的大小是5,但是你只实例化了一个t[1]=new TextBox();
t[0],t[2],t[3],t[4]都没有实例话,当然对产生异常记得要结贴
我的代码贴出来,你看一下是哪里有问题
TextBox[] t = new TextBox[5];
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);
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);
}
}要学会思考,不要总是依赖别人,结贴吧