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"就能找到此控件。

解决方案 »

  1.   

     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")
                        Console.WriteLine(b.Text);
      

  2.   


    如果我没有猜错的话,你这个异常是在foreach里面吧
    如果是这样,那是因为你数组的大小是5,但是你只实例化了一个t[1]=new TextBox();
    t[0],t[2],t[3],t[4]都没有实例话,当然对产生异常记得要结贴
      

  3.   

    不好意思,还是出现那个提示
    我的代码贴出来,你看一下是哪里有问题
    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);
      

  4.   

    如果我没猜错的话,你把这句话写在方法里:
    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);
    }
    }要学会思考,不要总是依赖别人,结贴吧
      

  5.   

    可以了,可以不设成public就不行吗
      

  6.   

    查了很多这个变量名代替变量赋值的问题,结果this.GetType().GetField(..)返回的始终是null,最后考虑可能是的问题,那么请教大家this到底是指的什么?