窗体缩放

3

基本上,我希望所有的控件(等等)都能随着 WindowsForm 的拖动调整大小而自动缩放,以便用户可以自己确定 UI 的大小。 这张图片并不完美,但我希望它能解释清楚:

Resize approximation

最简单的方法是使用(Flow/Table)LayoutPanel和适当的Anchor/Drop属性,但我觉得这会限制我的设计,目前我的设计看起来像这样:

My Design

我的想法是在调用Resize()时缩放所有组件:

foreach(Control c in Controls){
            c.Scale(scaleFactor);
        }

我的问题是:位置没有正确设置,需要进行四舍五入以确定“scaleFactor”,这导致不一致性。
是否有一种简洁的方法来完成所有这些操作?我必须使用LayoutPanels才能得到一个干净的方法吗?

1
不确定您是否想要重写所有内容,但WPF可以说使这种事情变得更容易。 - user585968
我们只有两个程序员,工程师使用该程序(不必漂亮),使用可视化设计工具非常好。目前,我们只有用户界面,但我担心学习和编写WPF会更慢。 - knallfrosch
也许,这可能是一个关于可行性的问题。WinForms不容易缩放字体,而WPF可以。在WPF中,一切都是“变换”。在WinForms中,您可以将所有内容呈现为离屏图像;将其放大;然后呈现它。但它会是静态的,所以不确定它有多少用处。 :( - user585968
你在倒过来做。为什么用户会想要改变窗口的大小呢?不是为了使文本更易读,视觉障碍适用于任何程序,用户只需增加DPI,无需进行任何操作。我从你的UI设计中唯一可能看到的原因是为了在文本框中提供更多的空间。这很容易实现,只需使用正确的锚定即可。剩下要做的就是确保当他缩小窗口时它仍然可用,最小大小和自动滚动也很容易实现。 - Hans Passant
它可以为用户提供一致的用户界面,例如当用户能够分配自己适合的屏幕区域时,不会改变任何比例。但是,鉴于我的方法没有好的解决方案并且看到其他方式的优点,我将使用布局创建用户界面。 - knallfrosch
2个回答

1
你确定要放大这些文本框和标签吗?例如,文本框有一个相当标准的高度。如果窗口太小,文本对于按钮/文本框等来说太大,那么你会期望什么?
可调整大小的窗口的典型调整逻辑有些不同。我宁愿为分组框创建无边框面板,并像这样堆叠/停靠所有内容:

before resize

如果我调整窗口大小,它会变成这样:

after resize

顺便说一下,我不喜欢按钮被这样重新调整大小。我会只使用Anchor = Left, Right来保持它们的高度。并且不要忘记为窗体设置适当的MinimumSize

-1

最简单和最清晰的方法是使用布局面板。
编写依赖于前一个控件位置和大小的控件位置代码很困难(除非您知道控件的顺序)。

在WPF中,所有内容都在ContentControl上,它是布局面板。控件的位置会自动计算。

另一个问题可能是缩放组合框中的字体或图标。在WPF中,这是最简单且受支持的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接