我正在创建一个独立于分辨率的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);
答案 0 :(得分:-1)
事实证明唯一的问题是出于某些原因我有MainPanel.ResumeLayout(false);
而不是true
。我不确定为什么我会把它设置为假,但现在一切正常。
所以回答我自己的问题:
为了使用户控制比例正确,我必须将它设置为AutoScaleMode
到Font
,然后在我的按钮事件上将用户控件添加到主TableLayoutPanel我必须更改{{1} } MainPanel.ResumeLayout(false)
MainPanel.ResumeLayout()