【发布时间】:2014-04-23 20:15:41
【问题描述】:
我正在尝试设置窗口窗体可以设置的最大尺寸,这可能会根据需要显示的数据而有所不同。
有没有一种方法可以在无需自己计算的情况下获得窗体周围边框的大小?
目前,我使用了Size和ClientSize属性的区别,比如:
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