【问题标题】:How can I re-size controls based on resolution?如何根据分辨率重新调整控件的大小?
【发布时间】:2011-12-15 16:31:37
【问题描述】:
在 WinForms 应用程序中,根据屏幕分辨率调整控件大小以匹配以及最大化和调整窗口大小的最佳方法是什么。我有 3 列是这样设置的。每列中的 LABEL TEXTBOX。你可以把它算作 6 列。我尝试过向右锚定,但问题是第 1 列中的文本框将与接下来的 2 列重叠。我也尝试过对接,但这似乎没有奏效。有什么简单的方法可以做到这一点吗?
【问题讨论】:
标签:
winforms
visual-studio
resize
anchor
dock
【解决方案1】:
TL;DR:你不能不手动编码调整大小的逻辑。附带说明一下,您可能不应该尝试这样做。
据我所知,在传统的 WinForms 中,如果不滚动您自己的解决方案,就没有自动的方法。 Sean87 suggested AutoScaleMode 属性,但是虽然它是自动的,但它不支持按分辨率自动调整大小。它提供了基于 Windows 中的字体大小设置或 DPI 设置进行缩放的选项。仅更改屏幕分辨率时,这些都不会直接更改,老实说,大多数典型用户(甚至可能是高级用户)可能永远不会修改 DPI 或字体大小设置。
此外,从基本用户的角度来看,提高屏幕分辨率的重点是为放置应用程序窗口提供更多虚拟桌面“空间”。的确,现在大多数显示器都是基于 LCD 的,因此具有native resolutions使改变这一点主要是 CRT 过去的事情。但是,购买一台新的、更大的显示器仍然会让普通用户增加这个虚拟屏幕空间,以便他们可以同时在屏幕上看到更多窗口。我认为始终保持与屏幕分辨率相同的相对大小的应用程序非常少见,并且违背了大多数用户的期望,甚至包括我们高级开发人员用户。
通常情况下,如果调整窗口大小,您将编写应用程序以智能且有用地调整其内容,但通常您会听从用户的管理,因为这是他们的机器和他们的偏好(将其视为“我的房子,我的规则”原则)。这也是为什么大多数(所有?)应用程序不会更改窗口位置的原因,除非用户直接操作(通过拖动窗口框架等)。事实上,所有这些都可能解释了为什么微软选择不包含任何基于分辨率的自动调整大小规则。
【解决方案2】:
您没有定义“列”的含义。通常,您应该使用TableLayoutPanel 并在每个“单元格”内设置控件的锚点。
【解决方案3】:
您可以更改表单的AutoScaleMode 以及每个控件的自动大小属性。并且您可以使用 splitcontainer 或面板来形成您的列。