gpt4 book ai didi

winforms - FormBorderStyle 为 NONE 时的表格高度问题

转载 作者:行者123 更新时间:2023-12-01 11:07:17 24 4
gpt4 key购买 nike

我有一个无边框表单(FormBorderStyle = None),高度为 23 像素(在设计器中设置)

当 .NET 在运行时绘制我的表单时 - 它绘制它 38 像素高(由于某种原因,它增加了标题栏的高度)。

MessageBox.Show(this.Height.ToString()); //this shows 38!! why?

为了解决这个问题,我必须设置“Height = 23;”在 Form_Load 事件中。
private void MyForm_Load(object sender, EventArgs e)
{
this.Height = 23; //workaround. wtf??
}

您可以在 Visual Studio 2010(Winforms 应用程序,目标框架 - 2.0)中自己尝试。

哇?

最佳答案

是的,这是一个错误,各种各样。请注意在设计器中如何使用 Width 和 Height 属性设置窗体的大小。这些属性包括边框和标题栏的大小。但是,这是一个问题,您的表单可能会在用户增加了标题栏字体大小的机器上运行。这将减少窗口客户区的大小。或者换句话说,表单的 ClientSize 属性会在该机器上更改。为控件留出更少的空间,并且非常严重地弄乱了表单的设计。

在创建 Handle 之后,就在 Load 事件运行之前,Form 类中有一些代码运行。它使用您机器上的相同 ClientSize 重新计算表单的大小。现在一切都很好,表单的高度将与您在设计器中设置的高度不匹配,但表单在其他方面看起来相同并且控件的布局相同。

相同的代码还确保窗口不会变得太小。这就是它失败的地方,它没有对 FormBorderStyle 属性给予足够的关注。如您所见,将高度裁剪为标题栏大小加上客户区高度。它还可以防止表单变得太窄,以确保图标和最小/最大/关闭按钮始终可见。即使你没有。

解决方法是在此代码运行后更改 ClientSize,OnLoad 覆盖或 Load 事件处理程序是正确的位置。请注意,如果您像这样对表单大小进行硬编码,那么您还应该将 AutoScaleMode 属性设置为 None。确保这不会在具有不同 DPI 设置的机器上造成问题。

关于winforms - FormBorderStyle 为 NONE 时的表格高度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4163655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com