C# 在.NET WinForms中,如何制作高度小于34的无边框窗体?

C# 在.NET WinForms中,如何制作高度小于34的无边框窗体?,c#,.net,winforms,C#,.net,Winforms,我正在使用Visual Studio,并用C#创建了一个新的Windows应用程序,该应用程序使用WinForms 我采用了与项目一起创建的表单,并将.FormBorderStyle属性设置为None 然后我将表格的高度设置为18 在designer上,一切正常,它确实显示为高度=18 但当我运行它时,高度会增加,出于某种原因会变为34 我需要表格的高度是18,而不是34 我该怎么做才能使它达到我想要的高度 谢谢Winforms将最小大小约束应用于表单,该约束基于保持标题栏可用。即使表单没有,这

我正在使用Visual Studio,并用C#创建了一个新的Windows应用程序,该应用程序使用WinForms

我采用了与项目一起创建的表单,并将.FormBorderStyle属性设置为None

然后我将表格的高度设置为18

在designer上,一切正常,它确实显示为高度=18

但当我运行它时,高度会增加,出于某种原因会变为34

我需要表格的高度是18,而不是34

我该怎么做才能使它达到我想要的高度


谢谢

Winforms将最小大小约束应用于表单,该约束基于保持标题栏可用。即使表单没有,这也是大多数程序员称之为“bug”的怪癖

但是,您仍然可以通过在Load事件的事件处理程序中设置ClientSize属性来覆盖最终大小。请注意需要在具有不同视频DPI设置的机器上重新缩放窗口,您不想硬编码大小。最好的方法是根据控件的位置调整其大小。例如:

    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        this.ClientSize = new Size(
            this.ClientSize.Width,
            OKButton.Bottom + OKButton.Margin.Bottom
        );
    }

假设一个名为OKButton的控件是最下面的控件。根据需要进行调整。

Winforms对表单应用最小大小约束,该约束基于保持标题栏可用。即使表单没有,这也是大多数程序员称之为“bug”的怪癖

但是,您仍然可以通过在Load事件的事件处理程序中设置ClientSize属性来覆盖最终大小。请注意需要在具有不同视频DPI设置的机器上重新缩放窗口,您不想硬编码大小。最好的方法是根据控件的位置调整其大小。例如:

    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        this.ClientSize = new Size(
            this.ClientSize.Width,
            OKButton.Bottom + OKButton.Margin.Bottom
        );
    }

假设一个名为OKButton的控件是最下面的控件。必要时进行调整。

粘贴一些代码,以便我们可以测试它,并为您提供满意的答案您的表单有任何控件Majkelodev:没有代码,因为所有这些都是使用Visual Studio的设计器完成的。。当我将.FormBorderStyle属性设置为None时,VS的设计器也完成了此操作。普拉莫德·莫里亚:我在表单上放了3个按钮,它们很小,大小也不错,不会改变,但是表单的高度会改变。。你必须使用Visual Studio才能看到它。你得到的高度是34或38,我得到的高度是38像素,始终..粘贴一些代码以便我们可以测试它并提供满意的答案你的表单有任何控件Majkelodev:没有代码,因为所有这些都是使用Visual Studio的设计器完成的。。当我将.FormBorderStyle属性设置为None时,VS的设计器也完成了此操作。普拉莫德·莫里亚:我在表单上放了3个按钮,它们很小,大小也不错,不会改变,但是表单的高度会改变。。你必须使用Visual Studio才能看到它。你得到的高度是34或38。我得到的高度始终是38像素。谢谢你,汉斯!将用于调整表单大小的代码放入Load事件处理程序中确实解决了这个问题。我想知道为什么将代码放在表单的Ctor代码中(在调用Initialize()方法之后)并没有解决这个问题-只有在Load事件处理程序中才有帮助。。非常感谢你!汉斯,我可以再问你一件事吗?当我将尺寸更新代码放入Load事件中时,它确实可以很好地调整表单的高度。但是如果我将相同的代码放在表单的Ctor中,就在InitializeComponent()之后;打电话,那么调整大小的OES就不起作用了。为什么呢?Ctor(在调用InitializeComponent()之后)和窗体的加载事件之间有什么区别?创建窗口时强制执行最小大小约束。加载事件在此之后运行。那么在Ctor结束后会发生什么?有趣。我认为如果我在调用InitializeComponent()之后,将代码放在Ctor中,那么一切都已经好了。显然不是。。非常感谢你,汉斯谢谢你,汉斯!将用于调整表单大小的代码放入Load事件处理程序中确实解决了这个问题。我想知道为什么将代码放在表单的Ctor代码中(在调用Initialize()方法之后)并没有解决这个问题-只有在Load事件处理程序中才有帮助。。非常感谢你!汉斯,我可以再问你一件事吗?当我将尺寸更新代码放入Load事件中时,它确实可以很好地调整表单的高度。但是如果我将相同的代码放在表单的Ctor中,就在InitializeComponent()之后;打电话,那么调整大小的OES就不起作用了。为什么呢?Ctor(在调用InitializeComponent()之后)和窗体的加载事件之间有什么区别?创建窗口时强制执行最小大小约束。加载事件在此之后运行。那么在Ctor结束后会发生什么?有趣。我认为如果我在调用InitializeComponent()之后,将代码放在Ctor中,那么一切都已经好了。显然不是。。非常感谢你,汉斯