A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵帅 中级黑马   /  2012-12-12 09:25  /  1797 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

自学的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());                          
            }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

6 个回复

倒序浏览
你的代码有错误。首先,你可以先实例化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后面括号内有错误

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
当然,如果你不改文本框的位置的话,所有生成的文本框就会堆在一起,看起来跟一个似的,其实程序还是生成了所需要的个数的。小小建议:修改文本框的location属性
回复 使用道具 举报
张小平 发表于 2012-12-12 09:44
你的代码有错误。首先,你可以先实例化textBox,如下:   int a = Convert.ToInt32(textBox1.Text.Trim()); ...

厄~你试过你的了吗?貌似不行啊
回复 使用道具 举报
楼上的代码也是不可行的,运行后仍然只能出现一个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. }
复制代码

运行效果:

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
欧玉斌 发表于 2012-12-12 09:53
楼上的代码也是不可行的,运行后仍然只能出现一个Textbox。
因为每次循环,如果没有定义Textbox的位置,第 ...

明白了,谢谢~
回复 使用道具 举报
邵帅 发表于 2012-12-12 09:52
厄~你试过你的了吗?貌似不行啊

我试过的,可以生成控件,只是因为没改location属性,所以会堆在一起.所以建议你修改location属性
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马