如何给这些textbox中赋值

我动态生成了100个textbox,然后,将数组中的100个字符分别放到每个textbox中,如何赋值到里面呢?生成动态textbox的代码如下:

void textbox()
        {
            int d = 1;
            for (int i = 0; i < 10; i++)//生成的列数
            {
                for (int j = 0; j < 10; j++)//生成的每行的个数
                {
                    TextBox TextBox1 = new TextBox();
                    TextBox1.Text = "";
                    TextBox1.Size = new Size(50, 50);
                    TextBox1.Margin = new System.Windows.Forms.Padding(0);
                    TextBox1.Location = new Point(30 + TextBox1.Width * j, 190 + i * 50);
                    //TextBox1.Name = "TextBox" + i.ToString() + j.ToString();

                    d += 1;
                    TextBox1.Name = "TextBox" + d;

                    this.Controls.Add(TextBox1);
                }
            }

            int c = 1;

            for (int a = 0; a < 10; a++)//生成的列数
            {
                for (int b = 0; b < 10; b++)//生成的每行的个数
                {
                    Label lable1 = new Label();
                    lable1.Text = "";
                    lable1.Size = new Size(50, 50);
                    lable1.Margin = new System.Windows.Forms.Padding(0);
                    lable1.Location = new Point(45 + lable1.Width * b, 170 + a * 50);
                    lable1.Name = "Lable" + lable1.Text;

                    lable1.Text = c.ToString();
                    c += 1;//等同于c=c+1;


                    this.Controls.Add(lable1);

                }
            }

        }

赋值的数组代码如下:

 private void ReceiveEdit_TextChanged(object sender, EventArgs e)
        {
            char[] temp = ReceiveEdit.Text.ToCharArray();
           Control.ControlCollection cc = this.Controls;
            //Form1.ControlCollection cc = this.Controls;
            foreach (Control con in cc) 
            {
               if (con is TextBox)
                
              
                {
                    for (int w = 1; w <= temp.Length; w++)
                    {
                        ????????= temp[w].ToString();
                    }
                }
                // else { MessageBox.Show("没有找到文本框!"); }
            }

生成的时候直接赋值不就行了,干嘛要另搞一个循环专门来弄

自己定义一个数组或者集合来引用哪些控件。

你在for循环中创建个临时对象,然后(离开方法时)丢掉对象自身的引用,又来说要找到控件,这样绕自己干什么呢?

你在设计整个 UI 的背后的结构时,就没有对对象集合有一个基本的建模。

答案来说,不过你知道 con is TextBox,却不知道con as TextBox?

好比如说一个人说自己养了100和孩子,结果他谁都不认识、每一个孩子都标题党地接触一下就忘记了,然后又来问别人“我怎么知道每一个人叫什么名字?”这就奇怪了。他自己为什么不动脑子(或者拿一个本本)记住每一个孩子叫什么名字呢?

TextBox1.Name = "TextBox" + d;
 
                    this.Controls.Add(TextBox1);

那么
(this.Controls["TextBox" + d] as TextBox).Text = xxx

TextBox TextBox1 = new TextBox();
                    TextBox1.Text = "";

你在这里干嘛不赋值

你应该定义一个数组或者集合,例如 List<TextBox>、List<Label>、List<MyControlXX>,而不是纠结什么“遍历”。

在 UI 背后对应的是你的设计内容,你应该从顶层对需要管理的对象集合建模,而不是纠结于从底层去查找什么东西。

然后C#好像有一个 FindContralById[""]的方法的。我依稀记得我以前用过。你给每个TEXTBOX放个ID就可以找到这个控件了。

foreach (Control con in cc) 
            {
               if (con is TextBox)
                 
               
                {
                    for (int w = 1; w <= temp.Length; w++)
                    {
                        ????????= temp[w].ToString();
                    }
                }
                // else { MessageBox.Show("没有找到文本框!"); }
            }
你这里的代码意思是temp是一个数组,保存着这100个textbox的值对吧?
如果是这样,那方法就很多:
1、把这100个textbox保存起来,比如新建一个List对象,在this.controls.add的地方也加到这个list对象中去,这样在temp循环
小蜜蜂论坛发帖机里就可以根据序号找对应的textbox
2、把序号保存在textbox的某个值里,比如textbox1.Tag对象,这个是object类型的,可以保存数字,也可以保存对象。
if (con is TextBox)
                {
TextBox txt = con as TextBox;
int index = txt.Tag as int;
txt.Text = temp[index].ToString().
                }

((TextBox)this.Controls[string.format("textBox{0}",d)]).Text = "xxx";
这么玩就可以。通过控件名字找

菜鸟终于成功了,感谢大家的帮助,最终的句子是这样的,测试了好多句子总是提示不能给实例赋值。
 //con.Controls[w+18].Text =temp[w].ToString();
                            //(con as TextBox).Text= temp[w].ToString();
                            //string h = temp[w].ToString();
                           //(this.Controls["TextBox" + w] as TextBox).Text = temp[w].ToString();//成功了一次,后来不知道为什么不行了
                            //((TextBox)this.Controls[string.Format("TextBox{0}", w)]).Text = temp[w].ToString();
                            //((TextBox)this.Controls["TextBox" + w.ToString()]).Text = temp[w].ToString();
                            List<TextBox> list = this.Controls.OfType<TextBox>().ToList();
                            list[w+2].Text= temp[w].ToString();

发布了74 篇原创文章 · 获赞 0 · 访问量 3077

猜你喜欢

转载自blog.csdn.net/netyou/article/details/104532788