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

时间:2016-01-09 21:12:10

标签: c# user-interface resize resolution tablelayoutpanel

我正在创建一个独立于分辨率的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

我的所有面板都设置为锚定TOP / BOTTOM / LEFT / RIGHT

我为每个主面板尝试了自动调整,增长样式,停靠和锚点的不同组合,但似乎无法让我的主面板(即包含用户控件的面板)调整大小超过其初始大小。

我希望我已经很好地理解了我的问题,但基本上;我的项目布局包含每个自定义控件内部的许多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);

1 个答案:

答案 0 :(得分:-1)

事实证明唯一的问题是出于某些原因我有MainPanel.ResumeLayout(false);而不是true。我不确定为什么我会把它设置为假,但现在一切正常。

所以回答我自己的问题:

为了使用户控制比例正确,我必须将它设置为AutoScaleModeFont,然后在我的按钮事件上将用户控件添加到主TableLayoutPanel我必须更改{{1} } MainPanel.ResumeLayout(false)

MainPanel.ResumeLayout()