2016-02-16 78 views
1

我知道这是重复的问题,但我检查了所有其他相关的问题,他们的答案并没有帮助(结果还是一样,如图截图2)如何适合/重新调整Windows窗体到任何屏幕分辨率?

screenshot1

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

Screenshot2

我的申请是在1366 x 768屏幕分辨率开发(如图Screenshot1),但是当我运行在不同的计算机(PC2)具有不同的显示器尺寸,不同的屏幕分辨率此应用程序的形式出现太大部分应用程序缺失或不在屏幕上。

但是我使用锚解决了这个问题,但又出现了另一个问题:用户控件没有重新调整自身的大小(如screenshot2所示),其中一部分被剪切或在panel1下面。我不知道这个问题是关系到用户控制的或与在Form1中所有控件(他们应该调整自己)

我甚至尝试下面的代码,但结果还是一样:

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

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

+3

了解“TableLayoutPanel”和“FlowLayoutPanel”。 – Sinatr

+0

右键单击中间的控件,选择面板并选择前置。看起来你的面板有z索引问题。还有一个文档大纲控件可以帮助将控件移动到正确的位置。对于使用面板的新手来说,这是很常见的。您还需要确保面板与您的中间面板正在填充,并且左右外部面板处于对接状态。 – DoomVroom

回答

4

如果您正在使用Windows窗体,并且无法切换到WPF,那么您将更愿意按照必须运行的最低分辨率完成所有设计。

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

另一种选择是LayoutPanels,因为Sinatr说他们试图提供WPF面板功能。

2

默认情况下,在WinForms中,设计时放置在窗体上的所有控件都有一个固定大小。如果你没有做任何特别的事情,无论你放置什么样的机器,放置它们时控制器的大小都是它们总是会有的大小。

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

此代码

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

没有做任何事情。你需要的唯一东西就是第一行。一旦你使表格最大化,它将填满整个屏幕。您无需通过设置其SizeLocation属性来强制执行此操作。事实上,这些对最大化的形式没有影响。

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

这不是一个完美的情况。即使您编写了完美的动态布局,如果您尝试在系统上运行应用程序并且屏幕比您的设计要小得多,那么您最终将得到的按钮太小而无法捅捅。这就是为什么应用程序通常不以这种方式设计的原因。屏幕上的按钮是可怕的用户界面。这种设计唯一可以接受的是当你设计一个触摸屏用户界面,如餐厅POS。在这种情况下,你已经有了一个很好的主意,你的客户将使用什么尺寸的屏幕,因为它们都是专业硬件。