对于普通form窗体中的控件布局基本上都可以用Dock和Anchor来定位。
  但是我在向panel中动态加入一个usercontrol时,这个usercontrol中的控件就不能按照其在usercontrol中设置的anchor属性来定位。
  具体代码如下:
usercontrol:
其中有两个控件:一个是textbox,一个是button。它们的设置如下:
this.button1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
//button的anchor是右下,textbox的anchor按默认的左上。

this.Controls.Add(this.textBox1);
this.Controls.Add(this.button1);包括usercontrol的窗体:
布局是这样的,左边是一个treeview,其dock属性为left,再加一个spliter,其dock属性同样为left,然后再加一个panel,其dock属性为fill。
我是想在panel中动态加入不同的usercontrol。作为测试,我在窗体的构造函数中加入:
TestingUserControl userControl = new TestingUserControl();
userControl.Dock = DockStyle.Fill;
userControl.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
this.panel1.Controls.Add(new TestingUserControl());运行示例,当我改变窗体大小的时候,usercontrol中的textbox和button,不会根据其anchor属性,自适应其位置。这个问题,还请各位指教!!!

解决方案 »

  1.   

    TestingUserControl userControl = new TestingUserControl();
    userControl.Dock = DockStyle.Fill;
    userControl.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
    this.panel1.Controls.Add(new TestingUserControl());-----------------------
    userControl.Dock = DockStyle.Fill;
    userControl.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;//这个代码就无效了,因为你前面已经
    DockStyle.Fill
    this.panel1.Controls.Add(new TestingUserControl());//?????
    this.panel1.Controls.Add(userControl);
      

  2.   

    在usercontrol中,加一层panel,然后把textbox和button放到此panel上,其anchor属性相对于此panel,而其用fill填充usercontrol。
      

  3.   

    谢谢各位,得确是我写错了
    this.panel1.Controls.Add(new TestingUserControl());//?????
    this.panel1.Controls.Add(userControl);还请问各位,如何让各输入控件,如textbox,按照其大小,根据其容器的大小,按比例伸缩。这个问题,有没有什么好的解决方法?
      

  4.   

    重载sizechanged事件,然后在其中处理