【问题标题】:Is there a programmatic variable for borders around windows form application?Windows 窗体应用程序周围的边框是否有编程变量?
【发布时间】:2014-04-23 20:15:41
【问题描述】:

我正在尝试设置窗口窗体可以设置的最大尺寸,这可能会根据需要显示的数据而有所不同。

有没有一种方法可以在无需自己计算的情况下获得窗体周围边框的大小?

目前,我使用了SizeClientSize属性的区别,比如:

windowDressingWidth = this.Size.Width - this.ClientSize.Width;
windowDressingHeigth = this.Size.Height - this.ClientSize.Height;

这可行,但似乎有点倒退。是否有某种SystemInformation 或类似的变量来存储它(就像SystemInformation.HorizontalScrollBarHeight 对滚动条高度所做的那样)。

我找到的最接近的是 SystemInformation.FrameBorderSize,它在我的系统上是 8,是我的 windowDressingWidth (16) 的一半,所以这可能适用于每一侧。

在这个程序的情况下,它没有菜单,但(在我的系统上)周围有航空边框,标题和最大化、最小化和关闭控件顶部较粗。

【问题讨论】:

  • 我认为您的计算是最可靠的选择,因为仅举一个简单的例子,在 Windows 中可能会设置更大的字体大小,这可能会影响这个“全局”值。
  • 强烈建议让最终用户决定他们的窗口的最大尺寸,而不是自己硬编码。如果您将最大尺寸设置为 1900 x 800 或类似大小,请考虑当屏幕分辨率为 8000 x 5000 的人尝试使用您的应用程序时会发生什么。但是,在 winforms 中实现完全独立的分辨率确实很麻烦,这就是为什么还建议避免使用 winforms 并使用相关的当前技术创建应用程序的原因。
  • @HighCore 在这种情况下,数据显示在DataGridView 中,我正在限制大小,以便我可以限制DataGridView 的大小以不显示未使用的区域DataGridView。目前,maximumWidth = DataGridViewWidth.Location.X + DataGridViewWidth + windowDressing + 边距,其中边距是硬编码的“这个距离客户大小的边缘数很远”。所以我通过它需要显示的内容来计算最大值,所以如果他们加载的文件只需要在 8000x5000 屏幕上的窗口为 900x600,它仍然应该只显示 900x600。
  • @Xantham 这真的很糟糕,因为您的应用程序看起来就像屏幕左上角的一个小方块。你真的应该让你的 UI 分辨率独立。
  • @HighCore 这应该考虑到用于更高分辨率的更大字体,因为这将是 DataGridViewWidth 计算的一部分,或者其他使窗口在 8000x5000 屏幕上仍然可读的事情。我想最终学习 WPF,但这是目前可以做的。不过,这个复杂的部分是处理 DataGridView 的一些缺点。

标签: c# winforms user-interface


【解决方案1】:

您可能需要的唯一另一个是 SystemInformation.CaptionHeight

我应该注意到这是一个坏主意。始终设置 ClientSize 属性,这会自动确保窗口足够大以提供您需要的客户区。设计器的工作方式也是如此,当您在“属性”窗口中设置表单的 Size 属性时,设计器实际上会在 InitializeComponent() 方法中记录 ClientSize 值。这确保您的表单仍然可以在用户更改了首选项的另一台机器上工作。像标题字体和按钮大小。或者关闭 Aero 的机器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多