由于之前只用过C#弄过asp.net,现在要做一个程序,所以有点不熟悉。
Controls下没有找到FindControl这个方法,不知道为什么。
其实我想实现的是,我有textbox1,textbox2,textbox3,textbox4一系列的控件,
想用一个for,将其付值,例如textboxi这样,不知道怎么实现,又找不到FindControl。。

解决方案 »

  1.   

     foreach (Control ctr in this.Controls)
             {
                  if (ctr.Name == "textbox1")
                      ctr.Text = "Find you";
             }
      

  2.   

    Winform下没有FindControl方法,可以自己用写一个。
    递归查找。
      

  3.   

    可以放在Panel里
                int i = 1;
                foreach (Control c in this.panel1.Controls)
                {
                    if (c is TextBox && c.Name == "TextBox" + i.ToString() && i < 5)
                    {
                        TextBox tb = (TextBox)c;
                        tb.Text = i.ToString();//设置Text值
                        i++;
                    }
                }
      

  4.   

    在2.0中Controls属性可以通过[name]方式获得空间吧
      

  5.   

    foreach (Control ctr in this.Controls)
    ---
    就这样用
      

  6.   


    用了这个方法,只有textbox1,有效,其它的都起不了作用。。
      

  7.   

    (控件类型)this.Controls["控件名"]。就可以了
      

  8.   


                    for (a=1; a <= 5; a++)
                    {
                        TextBox tb_name =new TextBox();
                        tb_name =(TextBox)this.Controls["tb_name1"];
                        name[a] = tb_name.Text;
                    }
    我这样,编译时没问题,就执行时指着
    name[a] = tb_name.Text;
    出错:
    未将对象引用设置到对象的实例。
      

  9.   

    完整代码来看一下[email protected]
      

  10.   

    你可以把 你的textbox都放在一个容器控件中,比如说panel中,使用下面的方法可以找到foreach (Control ctr in this.panel1.Controls)
            {
                  if (ctr.Name == "textbox1")
                      ctr.Text = "Find you";
            }
      

  11.   


    TextBox tb_name =new TextBox(); 这一句是多余的"出错" 可能是你的控件名不是 tb_name1 
      

  12.   

    string[] name = new string[6];
                    int a=1;
                    foreach (Control c in this.panel1.Controls)
                    {
                        if (c.Name == "tb_name"+a.ToString())
                        {
                            TextBox tb_name = (TextBox)this.panel1.Controls["tb_name"+a.ToString()];
                            name[a] = tb_name.Text;
                            a++;
                        }
                    }为什么只有name[1]能成功付值?谢谢了。
    输入控件名没有错的,tb_name1~tb_name5
      

  13.   

    for里面是这样的,复制错了。                foreach (Control c in this.panel1.Controls)
                    {
                        if (c.Name == ("tb_name"+a.ToString()))
                        {
                            name[a] = c.Text;
                            a++;
                        }
                    }
      

  14.   

    看了楼主的代码,问题是这样的:foreach (Control c in this.panel1.Controls) 
                    { 
                        if (c.Name == "tb_name"+a.ToString()) 
                        { 
                            TextBox tb_name = (TextBox)this.panel1.Controls["tb_name"+a.ToString()]; 
                            name[a] = tb_name.Text; 
                            a++; 
                        } 
                    } a++这里会出现问题,楼主的意思是按照a=1,2,3,4,5,的顺序将控件取出,但是你的foreach循环只循环1次,你只能找到a=1的时候。因为this.panel1.Controls中的控件集合并不是按照你的那个名字的顺序存放的,如果你调试一下你就会发现时间上那几个textbox在集合中的顺序正好是反着的。也就是你foreach时先会遇到Name为tb_name5的TextBox,但此时你的a还是1,所以不符合,继续foreach后面的数据然后是tb_name4....直到遇到tb_name1,才会进入if语句块,此时也就是楼主说的第一次有效的地方,然后是a++,再剩下的foreach中找名字是tb_name2的控件,可是再也找不到了,因为已经错过了。
    如果楼主还是想采取遍历的方法,应该是先将this.panel1.Controls集合按照每个控件的名字排序,才可以用楼主的方法。否则应保证循环5次,代码如下:for (a = 1; a <= 5; a++)
                    {
                        foreach (Control c in this.panel1.Controls)
                        {
                            if (c.Name == ("tb_name" + a.ToString()))
                            {
                                TextBox tb_name = (TextBox)this.panel1.Controls[("tb_name" + a.ToString())];
                                name[a-1] = tb_name.Text;
                            }
                        }
                    }
    不过采用名字直接获取可以调高效率,和减少代码,程序代码:                string namecol = "tb_name";
                    for (int i = 1; i <= 5; i++)
                    {
                        name[i - 1] = ((TextBox)this.panel1.Controls[namecol + i.ToString()]).Text;
                    }
    不过建议楼主在CS端做表单还是选择DataGridView,或者ListView控件,如果数据量大了,大量的TextBox会使对话框的展示和重画非常慢。
      

  15.   


        string ctrlName = string.Empty;
        for (int i = 0; i < this.Page.Controls; i++)
        {
            ctrlName = "textbox" + i.ToString();         //控件名称
            TextBox txtBox = FindTextBoxControl(ctrlName);   //查找
            txtBox.Text = ctrlName;                //赋值
        }    /// <summary>
        /// 查找TextBox控件
        /// </summary>
        /// <param name="ctrlName">控件名称</param>
        /// <returns></returns>
        private TextBox FindTextBoxControl(string ctrlName)
        {
            foreach (Control ctrl in this.Page.Controls)
            {
                TextBox tb = ctrl as TextBox;
                if(null==tb)
                {
                    continue;
                }
                if (tb.Name == ctrlName)
                {
                    return tb;
                }
            }
        }