none
winform 在动态创建的GroupBox中加入TextBox控件无显示的问题 RRS feed

  • 问题

  • 我在winform的界面中有一个button按钮,点击button去创建一个新的groupbox,在groupbox里加入一个textbox,代码如下

    private void button1_Click(object sender, EventArgs e)
            {
                GroupBox groupBox = new GroupBox();
                TextBox tb = new TextBox();
                tb.Text = count.ToString();
                tb.Location = new Point(25, 100 * count);
                groupBox.Controls.Add(tb);
                
                
                groupBox.Location = new Point(20, 100 * count + 10);
    
                //this.Controls.Add(tb);
                this.Controls.Add(groupBox);
               
    
                count++;
            }
    


    结果是groupbox正常显示,而textbox总是显示不出来。

    请大家帮忙解答,谢谢。

     

    2011年12月21日 15:14

答案

  • 我在winform的界面中有一个button按钮,点击button去创建一个新的groupbox,在groupbox里加入一个textbox,代码如下

     

    private void button1_Click(object sender, EventArgs e)
            {
                GroupBox groupBox = new GroupBox();
                TextBox tb = new TextBox();
                tb.Text = count.ToString();
                tb.Location = new Point(25, 100 * count);
                groupBox.Controls.Add(tb);
                
                
                groupBox.Location = new Point(20, 100 * count + 10);
    
                //this.Controls.Add(tb);
                this.Controls.Add(groupBox);
               
    
                count++;
            }
    

     


    注意:任意一个控件被加入到Container(容器控件——诸如GroupBox等),Location是相对于这个容器控件的高和宽,但是你的代码是相对于整个Form的尺寸计算的,显然不对的。

    解决方法——直接固定尺寸,不要高和宽,或者使得你的高和宽小于GroupBox的那个高和宽即可。

    参考:

     private void button1_Click(object senderEventArgs e)
            {
                GroupBox groupBox = new GroupBox();

                groupBox.Location = new Point(20100 * count + 10);
                TextBox tb = new TextBox();
                tb.Text = count.ToString();
                groupBox.Controls.Add(tb);
                tb.Location = new Point(20, 20);

                //this.Controls.Add(tb);
                this.Controls.Add(groupBox);

                count++;

            }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2011年12月22日 3:22
    版主

全部回复

  • 我在winform的界面中有一个button按钮,点击button去创建一个新的groupbox,在groupbox里加入一个textbox,代码如下

     

    private void button1_Click(object sender, EventArgs e)
            {
                GroupBox groupBox = new GroupBox();
                TextBox tb = new TextBox();
                tb.Text = count.ToString();
                tb.Location = new Point(25, 100 * count);
                groupBox.Controls.Add(tb);
                
                
                groupBox.Location = new Point(20, 100 * count + 10);
    
                //this.Controls.Add(tb);
                this.Controls.Add(groupBox);
               
    
                count++;
            }
    

     


    注意:任意一个控件被加入到Container(容器控件——诸如GroupBox等),Location是相对于这个容器控件的高和宽,但是你的代码是相对于整个Form的尺寸计算的,显然不对的。

    解决方法——直接固定尺寸,不要高和宽,或者使得你的高和宽小于GroupBox的那个高和宽即可。

    参考:

     private void button1_Click(object senderEventArgs e)
            {
                GroupBox groupBox = new GroupBox();

                groupBox.Location = new Point(20100 * count + 10);
                TextBox tb = new TextBox();
                tb.Text = count.ToString();
                groupBox.Controls.Add(tb);
                tb.Location = new Point(20, 20);

                //this.Controls.Add(tb);
                this.Controls.Add(groupBox);

                count++;

            }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2011年12月22日 3:22
    版主
  • 您好

    由於您的 TextBox 是在 GroupBox 內,TextBox 的座標原點是 GroupBox 的左上角,試試看以下代碼

            private void button1_Click(object sender, EventArgs e)
            {
                GroupBox groupBox = new GroupBox();
                TextBox tb = new TextBox();
                tb.Text = count.ToString();
                tb.Location = new Point(10, 10 * count);
                groupBox.Controls.Add(tb);
                groupBox.Location = new Point(20, 100 * count + 10);
                //this.Controls.Add(tb);
                this.Controls.Add(groupBox);
                count++;
            }
    

     


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年12月22日 5:57
  • 您好

    由於您的 TextBox 是在 GroupBox 內,TextBox 的座標原點是 GroupBox 的左上角,試試看以下代碼

            private void button1_Click(object sender, EventArgs e)
            {
                GroupBox groupBox = new GroupBox();
                TextBox tb = new TextBox();
                tb.Text = count.ToString();
                tb.Location = new Point(10, 10 * count);
                groupBox.Controls.Add(tb);
                groupBox.Location = new Point(20, 100 * count + 10);
                //this.Controls.Add(tb);
                this.Controls.Add(groupBox);
                count++;
            }
    

     


    歡迎參觀我的Blog.NET菜鳥自救會


    这样虽然运行正确了,但是我觉得有一个问题:因为TextBox相对于GrouoBox的高进行缩放的。因此你仔细看截图,每次TextBox的位置(高)总是下沉的,如果再多几个GroupBox,就恐怕又看不到TextBox了。所以我不建议对高或者宽进行缩放,这样做就是避免这个问题,同时也是美观。

    【截图证明——每次高总是下沉……】


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年12月22日 6:00
    版主
  • 發問者沒有特別提說不要讓高度下沉,因此並未對發問者原本的程式碼多做修改

    我想表達的是 [TextBox 是在 GroupBox 內,TextBox 的座標原點是 GroupBox 的左上角]


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年12月22日 6:15
  • 發問者沒有特別提說不要讓高度下沉,因此並未對發問者原本的程式碼多做修改

    我想表達的是 [TextBox 是在 GroupBox 內,TextBox 的座標原點是 GroupBox 的左上角]


    歡迎參觀我的Blog.NET菜鳥自救會

    哈哈!和我想要表达的意思一样,只是说法略有不同——关键问题在于:开发者没有弄清楚Location是相对谁的。
       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年12月22日 6:22
    版主