C# 不允许用户调整最大化窗体的大小

C# 不允许用户调整最大化窗体的大小,c#,winforms,C#,Winforms,我正在用C开发一个Windows窗体应用程序,其中有一个窗体必须以最大化状态启动,并且不允许用户恢复或调整其大小。我已经将表单配置为以最大化模式启动,禁用还原和最大化按钮,并锁定表单的边框,但双击标题栏时,表单会还原为较小的大小,这是意外的。以下是我为实现所需行为而设置的属性: FormBorderStyle = FixedSingle MaximizeBox = False WindowState = Maximized 有人能帮我解决这个问题并给我解释一下解决方法吗 提前感谢。这可以通过捕

我正在用C开发一个Windows窗体应用程序,其中有一个窗体必须以最大化状态启动,并且不允许用户恢复或调整其大小。我已经将表单配置为以最大化模式启动,禁用还原和最大化按钮,并锁定表单的边框,但双击标题栏时,表单会还原为较小的大小,这是意外的。以下是我为实现所需行为而设置的属性:

FormBorderStyle = FixedSingle
MaximizeBox = False
WindowState = Maximized
有人能帮我解决这个问题并给我解释一下解决方法吗


提前感谢。

这可以通过捕获事件并覆盖它来实现:

private void Form_Load(object sender, EventArgs e)
{
    this.FormBorderStyle = FormBorderStyle.FixedSingle;
    this.WindowState = FormWindowState.Maximized;
    this.MaximizeBox = false;
    this.MinimumSize = Screen.GetWorkingArea(this.Location).Size;
}

private const int WM_NCLBUTTONDBLCLK = 0x00A3; 
//double click on a title bar

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_NCLBUTTONDBLCLK)
    {
        m.Result = IntPtr.Zero;
        return;
    }
    base.WndProc(ref m);
}

这可以通过捕获事件并覆盖它来实现:

private void Form_Load(object sender, EventArgs e)
{
    this.FormBorderStyle = FormBorderStyle.FixedSingle;
    this.WindowState = FormWindowState.Maximized;
    this.MaximizeBox = false;
    this.MinimumSize = Screen.GetWorkingArea(this.Location).Size;
}

private const int WM_NCLBUTTONDBLCLK = 0x00A3; 
//double click on a title bar

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_NCLBUTTONDBLCLK)
    {
        m.Result = IntPtr.Zero;
        return;
    }
    base.WndProc(ref m);
}

您必须记住,表单以一些默认大小值开始,双击只是在两种状态之间切换。 在您的正常状态下,表单将检索您可以覆盖的最后一个默认大小:

Width = Screen.PrimaryScreen.Bounds.Width;
Height = Screen.PrimaryScreen.Bounds.Height;
另一件事是,您的应用程序有一个名为“开始位置”的东西,我记得它默认位于屏幕中央,您可以使用以下方法更改它:

Form.StartPosition = new Point(0, 0); // top-left corner
现在,您在应用程序中所要做的就是检查窗口状态之间的切换。最简单的方法是使用WndProc并等待中列出的消息:


您必须记住,表单以一些默认大小值开始,双击只是在两种状态之间切换。 在您的正常状态下,表单将检索您可以覆盖的最后一个默认大小:

Width = Screen.PrimaryScreen.Bounds.Width;
Height = Screen.PrimaryScreen.Bounds.Height;
另一件事是,您的应用程序有一个名为“开始位置”的东西,我记得它默认位于屏幕中央,您可以使用以下方法更改它:

Form.StartPosition = new Point(0, 0); // top-left corner
现在,您在应用程序中所要做的就是检查窗口状态之间的切换。最简单的方法是使用WndProc并等待中列出的消息:



只需在表单上粘贴一个onresize事件处理程序,然后将其放回原处。有人想知道为什么你这么努力地激怒你的用户。@TonyHopkinson那么你想说的是我在事件处理程序代码中将WindowState设置为最大化?嘿,怎么会惹人生气@stuartd您的意思是在运行时将最大化窗体的大小设置为MinimumSize属性吗。@hecate添加了一个答案,并对其进行了测试,双击时它不会调整大小anymore@Hecate这会激怒我,这是我的windows安装,不是你的只需在表单上粘贴一个onresize事件处理程序,然后将其放回原处。有人想知道为什么你这么努力地激怒你的用户。@TonyHopkinson那么你想说的是我在事件处理程序代码中将WindowState设置为最大化?嘿,怎么会惹人生气@stuartd您的意思是在运行时将最大化窗体的大小设置为MinimumSize属性吗。@hecate添加了一个答案,并对其进行了测试,双击时它不会调整大小anymore@Hecate这会激怒我,这是我的windows安装,不是你的这比我的答案要优雅一点,学到了更多!道具you@m.rogalski谢谢你的帮助和努力:这比我的答案要优雅一点,学到了更多!道具you@m.rogalski谢谢你的帮助和努力:谢谢你的努力和帮助。这并不是说你的答案不正确或者没有达到预期效果,但我会选择m.rogalski写的答案,因为它解释得非常详细。所以必须实施一个系统来接受2个答案!!!!:@他说我从他的回答中学到了一些东西,这肯定是被接受的答案!谢谢你的投票:谢谢你的努力和帮助。这并不是说你的答案不正确或者没有达到预期效果,但我会选择m.rogalski写的答案,因为它解释得非常详细。所以必须实施一个系统来接受2个答案!!!!:@他说我从他的回答中学到了一些东西,这肯定是被接受的答案!谢谢你的投票: