C# TableLayoutPanel拉伸以填充表单中的父面板

C# TableLayoutPanel拉伸以填充表单中的父面板,c#,user-interface,resize,resolution,tablelayoutpanel,C#,User Interface,Resize,Resolution,Tablelayoutpanel,我正在制作一个与分辨率无关的WinForms GUI(即,所有控件在原地拉伸/收缩,而不管用户的分辨率如何) 我的问题是:出于某种原因,只要表单是收缩的,而不是拉伸的,我所有的控件都可以完美地调整大小 如果用户调整窗口大小使其变小(一旦我完成,它将被锁定为最大化,但出于测试目的,我将其保留为可调整大小),那么窗口中的所有控件都会随之调整。如果用户将窗口拉伸到超出其初始大小,控件将保持不变,这意味着它们不再位于正确的位置,因为窗口现在变大了。它们从很小的尺寸调整到初始尺寸,然后停止;当窗口继续增长

我正在制作一个与分辨率无关的WinForms GUI(即,所有控件在原地拉伸/收缩,而不管用户的分辨率如何)

我的问题是:出于某种原因,只要表单是收缩的,而不是拉伸的,我所有的控件都可以完美地调整大小

如果用户调整窗口大小使其变小(一旦我完成,它将被锁定为最大化,但出于测试目的,我将其保留为可调整大小),那么窗口中的所有控件都会随之调整。如果用户将窗口拉伸到超出其初始大小,控件将保持不变,这意味着它们不再位于正确的位置,因为窗口现在变大了。它们从很小的尺寸调整到初始尺寸,然后停止;当窗口继续增长时

我的布局如下:

Main form
   --> 1x3 TableLayoutPanel
      --> 1x1 TableLayoutPanel in center row of parent panel
         --> User control that populates parent 1x1 TableLayoutPanel on button click

            User Control
               --> 1x1 TableLayoutPanel
                  --> Multiple TableLayoutPanel's laying out multiple controls inside parent 1x1 TableLayoutPanel
我的所有面板都设置为锚定顶部/底部/左侧/右侧

我尝试了自动调整大小、增长样式、停靠和锚定的不同组合,但似乎无法使我的主面板(即包含用户控件的面板)的大小大于其初始大小

我希望我已经很好地描述了我的问题,能够理解,但是基本上;我的项目布局由许多TableLayoutPanel组成,对于每个自定义控件,每个控件内部都有许多TableLayoutPanel,该自定义控件在我的主窗体中填充一个1x1 TableLayoutPanel,它充当GUI的“主”面板。然后,用户通过位于父1x3 TableLayoutPanel顶行的按钮选择要在主窗体上显示的用户控件

如果我需要更好的解释,请告诉我,以便您回答


编辑:我发现,如果我将用户控件的
AutoScaleMode
设置为
Font
,它将准确地调整大小。这个解决方案的唯一问题是,当控件加载到窗体中时,它太大了,其中一些被主窗体的边缘切断。一旦我手动调整表单的大小(哪怕是一点点),控件就会将自己固定到表单中的适当大小

所以我觉得我很接近了,但不是很接近,就像成品一样,用户将无法控制窗口的大小,它将被迫最大化

编辑2:我已尝试将其添加到按钮事件中,该事件在面板中显示用户控件:

            MyUserControl MainPanelControls = new MyUserControl();
            MainPanel.SuspendLayout();
            MainPanel.Controls.Clear();
            MainPanel.Controls.Add(MainPanelControls); 
            MainPanel.Dock = DockStyle.Fill;  //This seems to have no effect               
            MainPanel.ResumeLayout(false);

原来唯一的问题是出于某种原因,我使用了
MainPanel.ResumeLayout(false)而不是
true
。我不知道为什么我把它设置为false,但现在一切都正常了

因此,回答我自己的问题:

要使用户控件正确缩放,我必须将其设置为
AutoScaleMode
Font
,然后在将用户控件添加到主TableLayoutPanel的按钮事件中,我必须将
MainPanel.ResumeLayout(false)
更改为
MainPanel.ResumeLayout()


我还应该提到,我的主窗体上的所有控件都在它们的TableLayoutPanels中正确地伸展,只有用户控件在我的主窗体中没有伸展超过它的初始大小。
private void Button1_Click(object sender, EventArgs e)
       {
        MyUserControl MainPanelControls = new MyUserControl();
        MainPanel.SuspendLayout();
        MainPanel.Controls.Clear();
        MainPanel.Controls.Add(MainPanelControls);             
        MainPanel.ResumeLayout();
       }