C# 如何根据任何屏幕分辨率调整Windows窗体的大小?

C# 如何根据任何屏幕分辨率调整Windows窗体的大小?,c#,winforms,C#,Winforms,我知道这是重复的问题,但我检查了所有其他相关问题,他们的答案没有帮助(结果仍然与截图2所示相同) 我不熟悉c#windows窗体。如屏幕快照1所示,我有一些控件的Form1,每组控件都放在一个面板中。我在PC1中设计了应用程序,如Screenshot1所示,它符合屏幕分辨率,运行良好 我的应用程序是以1366 x 768屏幕分辨率开发的(如屏幕快照1所示),但当我在不同的计算机(PC2)上以不同的显示器大小和不同的屏幕分辨率运行此应用程序时,表单显得太大,部分应用程序丢失或不在屏幕上 然而,

我知道这是重复的问题,但我检查了所有其他相关问题,他们的答案没有帮助(结果仍然与截图2所示相同)

我不熟悉c#windows窗体。如屏幕快照1所示,我有一些控件的
Form1
,每组控件都放在一个面板中。我在PC1中设计了应用程序,如Screenshot1所示,它符合屏幕分辨率,运行良好

我的应用程序是以1366 x 768屏幕分辨率开发的(如屏幕快照1所示),但当我在不同的计算机(PC2)上以不同的显示器大小和不同的屏幕分辨率运行此应用程序时,表单显得太大,部分应用程序丢失或不在屏幕上

然而,我使用锚解决了这个问题,但出现了另一个问题:用户控件本身没有重新调整大小(如screenshot2所示),部分被剪切或放在panel1下。我不知道问题是与用户控件有关,还是与Form1中的所有控件有关(它们应该自行调整大小)

我甚至尝试了以下代码,但结果仍然相同:

this.WindowState = FormWindowState.Maximized;
this.Location = new Point(0, 0);
this.Size = Screen.PrimaryScreen.WorkingArea.Size;
Screen.PrimaryScreen.WorkingArea

我昨天一整天都在寻找解决这个问题的方法,但是我失败了,请帮助我提出任何可能有效的想法/建议。谢谢

如果您使用的是Windows窗体,而无法切换到WPF,那么您将更愿意以最低分辨率执行所有设计,您必须以最低分辨率运行

在WinForms中,您正在设置每个元素的大小,以便它们不会根据应用程序大小重新调整大小。他们将要做的是沿着空空间分布(如果你让他们这样做的话),增加他们之间的自由空间,仅此而已


另一个选项是布局面板,正如Sinatr在尝试提供WPF面板功能时所说的那样。

在WinForms中,默认情况下,在设计表单时放置在表单上的所有控件都具有固定大小。如果你不做任何特别的事情,不管你放置控件时控件的大小是什么,不管你在哪台机器上运行,它们的大小总是一样的

正如你所注意到的,这并不总是能带来好的结果。解决此问题的方法是自由使用
TableLayoutPanel
和/或
FlowLayoutPanel
容器控件,以及单个子控件的
Anchor
Dock
属性。如果您特别注意在窗体上正确布局控件,则可以动态调整控件的大小并重新排列,以适应可用的屏幕空间

此代码

this.WindowState = FormWindowState.Maximized;
this.Location = new Point(0, 0);
this.Size = Screen.PrimaryScreen.WorkingArea.Size;
Screen.PrimaryScreen.WorkingArea
什么都不做。你唯一需要的就是第一行。一旦将表单最大化,它将填充整个屏幕。您不需要通过设置其
大小
位置
属性来强制它。事实上,这些对最大化形式没有影响

问题大概是放置在表单上的控件不会自动调整大小(如上所述)。如果你有一个足够大的屏幕,你会看到空白的地方,表格正在填充屏幕,但没有控制。你有相反的问题:在一个较小的屏幕上,控件不合适,因此相互重叠


这不是一个完美的情况。即使你编写了一个完美的动态布局,如果你试图在一个屏幕比你设计的要小得多的系统上运行应用程序,你最终也会得到一个小得不能戳的按钮。这就是为什么应用程序通常不是这样设计的。一屏的按钮是糟糕的用户界面。这种设计唯一可以接受的是当你为触摸屏用户界面(如餐厅POS)设计时。在这种情况下,你已经非常清楚你的客户将使用什么尺寸的屏幕,因为它是所有的特殊硬件。

学习<代码> TabelayayOuts4/<代码>和<代码> FlowLayoutPanel <代码>。右键单击中间的控件,选择面板并选择带到前面。看起来您的面板有z索引问题。还有一个文档大纲控件,它还可以帮助将控件移动到正确的位置。这对于刚接触面板的人来说很常见。您还需要确保面板与中间面板对接,外部面板为左侧和右侧。