我写了一段代码
for(int i=0;i<100;i++)
            {
                TextBox tbox = new TextBox();
                tbox.Location = new Point(50*i,80);
                tbox.Size = new Size(30, 50);
                tbox.Name = "tbox" + i.ToString();
                this.Controls.Add(tbox);
            }
我想做的是生成的TextBox中间没有缝隙,一个排一个,并且到窗体的边缘后自动换到下一行去,可是我做的只在一行里,请问高手如何做?

解决方案 »

  1.   

                    tbox.Location = new Point(50*i,80); 
                    tbox.Size = new Size(30, 50); 大小和 起始位置
    你把这2个值改改就能达到没有间隙
      

  2.   

    没间隙达到了,可是换行怎么换,form窗体是可以最大化的,是跟窗体的宽度换呢还是跟显示器的宽度,哪位给点提示吧??
      

  3.   

     int a = Convert.ToInt32(this.Size.Width / 50);
                int countW = 50;
                int countH = 80;
                for (int i = 0; i < 100; i++)
                {
                    TextBox  tbox = new TextBox ();
                    tbox.AutoSize = false;
                    tbox.Name = "tbox" + i.ToString ();
                    tbox.Location = new Point(countW * (i % a ),countH * (i / a ));
                    tbox.Size = new Size(50, 80);
                    tbox.Enabled = true;
                    this.Controls.Add(tbox);
                }
    试试,在修改一下,应该可以了
      

  4.   


    override Form的OnResize方法,在里面重新计算textbox的位置
      

  5.   

    计算整个窗体的大小(主要宽度),然后再算每个TextBox的宽度,根据计算结果来布局。这里存在一个重要的问题就是这样做了以后如果页面重新画了(Resize)这些控件的位置就会错误,需要你再次调整。
    你可以使用窗体布局控件来避免这类问题的发生你可以尝试动态生成TableLayoutPanel,计算方法一样,添加TextBox的时候计算位置,添加到指定的单元格即可。