【问题标题】:Scale WindowsForm缩放窗口窗体
【发布时间】:2016-02-27 22:28:24
【问题描述】:

基本上,我希望所有内容(控件等)在通过拖动调整其大小时与 WindowsForm 一起缩放,以便用户可以自己确定 UI 的大小。 图片并不完美,但我希望它能够解释它:

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

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

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

我的问题是:位置设置不正确,确定“scaleFactor”所需的四舍五入会导致不一致。

有没有一种干净的方法来做这一切?我必须使用 LayoutPanels 来获得干净的方式吗?

【问题讨论】:

  • 不确定是否要重写所有内容,但 WPF 可以说让这类事情变得更容易
  • 我们只有 2 个程序员,程序是工程师使用的(不一定要漂亮),使用视觉设计器非常好。目前我们只有 UI,但我担心 WPF 学习和编写会比较慢。
  • 也许吧,虽然这可能是什么是可能的,什么是不可能的问题。 WinForms 不会轻易缩放字体,而 WPF 会。 WPF 中的一切都是transform。在 WinForms 中,您可以将所有内容呈现为屏幕外图像;炸掉它;并渲染它。虽然它是静态的,但遗憾的是不确定它有多大用处。 :(
  • 你是在倒退。为什么用户想要改变窗口的大小?为了不使文本更具可读性,视力障碍适用于任何程序,用户只会增加 DPI,您无需做任何事情。我从您的 UI 设计中看到的唯一可能原因是在文本框中提供更多可用空间。这实现起来非常简单,只需使用正确的锚点。剩下要做的就是确保当他使窗口变小时它仍然可用,MinimumSize 和 AutoScroll 也很简单。
  • 它将为用户提供一个一致的 UI,例如一个不改变比例的屏幕,而用户可以分配他认为合适的屏幕区域。然而;看到我的方法没有好的解决方案并看到其他方法的优势,我将创建带有布局的 UI。

标签: c# winforms visual-studio scale designer


【解决方案1】:

您确定要缩放这些文本框和标签吗?例如,文本框有一个相当标准的高度。如果窗口太小以至于文本对于按钮/文本框等而言太大,您会期待什么?

可调整大小的窗口内容的典型调整逻辑有点不同。我宁愿为组框创建一个无边框面板,并像这样堆叠/停靠所有内容:

如果我调整此窗口的大小,它将如下所示:

顺便说一句,我不喜欢这样调整按钮的大小。我只会为他们使用Anchor = Left, Right,这样他们就可以保持身高。并且不要忘记为表单设置一个正确的MinimumSize

【讨论】:

    【解决方案2】:

    最简单、最干净的方法是使用布局面板。
    很难对控件的位置进行编码,这取决于先前控件的位置和大小(当您知道控件的顺序时除外)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 2021-08-18
      • 1970-01-01
      相关资源
      最近更新 更多