黑马程序员技术交流社区

标题: 点击button为何只生成一个textbox? [打印本页]

作者: 邵帅    时间: 2012-12-12 09:25
标题: 点击button为何只生成一个textbox?
自学的winform,想通过点击button生成textbox,为什么不是按照我写的循环生成呢
private void button1_Click(object sender, EventArgs e)
        {
            int a = Convert.ToInt32(txtboxhs.Text.Trim());
            for (int i = 0; i < a; i++)                        
               this.panel1.Controls.Add(new TextBox());                          
            }

作者: 张小平    时间: 2012-12-12 09:44
你的代码有错误。首先,你可以先实例化textBox,如下:   int a = Convert.ToInt32(textBox1.Text.Trim());
            TextBox txtbox=new TextBox();
            for (int i = 0; i < a; i++)
            {
                this.Controls.Add(txtbox);
            }
或者:int a = Convert.ToInt32(textBox1.Text.Trim());
            
            for (int i = 0; i < a; i++)
            {
                this.Controls.Add(new TextBox());
            }
你写的代码里toint32后面括号内有错误
作者: 张小平    时间: 2012-12-12 09:46
当然,如果你不改文本框的位置的话,所有生成的文本框就会堆在一起,看起来跟一个似的,其实程序还是生成了所需要的个数的。小小建议:修改文本框的location属性
作者: 邵帅    时间: 2012-12-12 09:52
张小平 发表于 2012-12-12 09:44
你的代码有错误。首先,你可以先实例化textBox,如下:   int a = Convert.ToInt32(textBox1.Text.Trim()); ...

厄~你试过你的了吗?貌似不行啊
作者: 欧玉斌    时间: 2012-12-12 09:53
楼上的代码也是不可行的,运行后仍然只能出现一个Textbox。
因为每次循环,如果没有定义Textbox的位置,第二次都会重叠在上面,产生只出现一次Textbox的假象。
可以在实例化一个Textbox的时候,定义好Textbox的位置。
重点代码:t.Location = new Point(100, i * 50);Textbox的y坐标每次下移50个像素,这样可以避免重叠
  1. int a = Convert.ToInt32(txtboxhs.Text.Trim());
  2. for (int i = 0; i < a; i++)
  3. {
  4. TextBox t = new TextBox();
  5. t.Text = i.ToString();
  6. t.Location = new Point(100, i * 50);
  7. this.panel1.Controls.Add(t);
  8. }
复制代码

运行效果:

作者: 邵帅    时间: 2012-12-12 09:56
欧玉斌 发表于 2012-12-12 09:53
楼上的代码也是不可行的,运行后仍然只能出现一个Textbox。
因为每次循环,如果没有定义Textbox的位置,第 ...

明白了,谢谢~
作者: 张小平    时间: 2012-12-12 10:08
邵帅 发表于 2012-12-12 09:52
厄~你试过你的了吗?貌似不行啊

我试过的,可以生成控件,只是因为没改location属性,所以会堆在一起.所以建议你修改location属性




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2