C# windows窗体应用程序周围是否有用于边框的编程变量?

C# windows窗体应用程序周围是否有用于边框的编程变量?,c#,winforms,user-interface,C#,Winforms,User Interface,我正在尝试设置windows窗体可以设置的最大大小,根据需要显示的数据,大小可能会有所不同 有没有一种方法可以在不必自己计算的情况下获得windows窗体周围边框的大小 目前,我使用了Size和ClientSize属性的差异,如: windowDressingWidth = this.Size.Width - this.ClientSize.Width; windowDressingHeigth = this.Size.Height - this.ClientSize.Height; 这是可行

我正在尝试设置windows窗体可以设置的最大大小,根据需要显示的数据,大小可能会有所不同

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

目前,我使用了
Size
ClientSize
属性的差异,如:

windowDressingWidth = this.Size.Width - this.ClientSize.Width;
windowDressingHeigth = this.Size.Height - this.ClientSize.Height;
这是可行的,但似乎有点倒退。是否有某种类型的
SystemInformation
或类似变量存储此信息(如
SystemInformation.HorizontalScrollBarHeight
用于滚动条高度)

我找到的最接近的是SystemInformation.FrameBorderSize,在我的系统上是8,这是我的windowDressingWidth(16)的一半,因此每一面都可能是8


在本程序中,它没有菜单,但(在我的系统上)四周都有aero边框,顶部较厚的边框用于标题以及最大化、最小化和关闭控件。

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


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

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