我知道这是重复的问题,但我检查了所有其他相关问题,他们的答案没有帮助(结果仍然与屏幕截图2中显示的相同)
我是c#windows表单的新手。如屏幕截图1所示,我有Form1
一些控件,每组控件都放在一个面板中。我在PC1中设计了应用程序,如屏幕截图1所示,它符合屏幕分辨率并且运行良好。
我的应用程序是在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
昨天我一直在寻找解决这个问题,但我失败了,请帮助我任何想法/建议它可能会起作用。谢谢
答案 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。在这种情况下,您已经非常清楚客户将使用哪种尺寸的屏幕,因为它是所有专业硬件。