如何将Windows窗体适合/重新调整为任何屏幕分辨率?

时间:2016-02-16 13:56:00

标签: c# winforms

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

screenshot1

我是c#windows表单的新手。如屏幕截图1所示,我有Form1一些控件,每组控件都放在一个面板中。我在PC1中设计了应用程序,如屏幕截图1所示,它符合屏幕分辨率并且运行良好。

Screenshot2

我的应用程序是在1366 x 768屏幕分辨率下开发的(如屏幕截图1所示),但是当我在不同的计算机(PC2)中运行此应用程序时,显示器尺寸和屏幕分辨率不同,表单显得太大,部分应用程序是丢失或不在屏幕之外。

但是我使用Anchor解决了这个问题,但是出现了另一个问题:用户控件没有重新调整大小(如屏幕截图2所示),部分内容被剪切或移至panel1下。我不知道问题是与用户控制有关还是与Form1中的所有控件有关(他们应该自己调整大小)

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

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

昨天我一直在寻找解决这个问题,但我失败了,请帮助我任何想法/建议它可能会起作用。谢谢

2 个答案:

答案 0 :(得分:5)

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

在WinForms中,您要设置每个元素的大小,以便它们不会根据应用程序大小重新调整大小。他们将要做的是沿着空白区域分发(如果你为它们编程),增加它们之间的自由空间,就是这样。

另一个选项是LayoutPanels,正如Sinatr所说,他们试图提供WPF面板功能。

答案 1 :(得分:2)

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

正如您所注意到的那样,并不总能带来好结果。解决这个问题的方法是使用a fluid layout,自由使用TableLayoutPanel和/或FlowLayoutPanel容器控件,以及Anchor和{{1}单个子控件的属性。如果您特别注意在表单上正确布置控件,可以动态调整其大小并重新排列以适应可用的屏幕空间。

此代码

Dock

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

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

这不是一个完美的情况。即使您编写了一个完美的动态布局,如果您尝试在屏幕明显小于您的设计的系统上运行该应用程序,您最终会得到太小而无法戳的按钮。这就是为什么应用程序通常不是这样设计的。屏幕上的按钮是糟糕的 UI。这种设计唯一可以接受的是当你设计一个触摸屏UI,比如餐厅POS。在这种情况下,您已经非常清楚客户将使用哪种尺寸的屏幕,因为它是所有专业硬件。