none
窗口样式设置为FixSingle了,为何还会最大化? RRS feed

  • 问题

  • 如题,如果在mid窗口调用一个子窗体,将其最大化,然后在打开我样式设置为FixSingle的子窗体,则该窗体也会被最大化显示出来。如何解决这一“bug”呢?

    陈锦巍

    2019年1月31日 5:06

答案

  • Hi 陈锦巍,

    的确存在这样一种情况,但这并不是MDI窗口的“Bug”,这是MDI设计时的一种默认实现。

    如果你想要第二个子窗口打开时显示的是默认大小,你可以尝试对它的窗体大小重新设置,但这将会导致原有的已最大化的第一个窗口也会恢复正常大小:

        private void subFormToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SubForm subForm = new SubForm();
            subForm.MdiParent = this;
            subForm.Show();
            // 重新设定窗口大小
            subForm.WindowState = FormWindowState.Normal;
        }
    
        private void anotherSubFormToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AnotherSubForm anotherSubForm = new AnotherSubForm();
            anotherSubForm.MdiParent = this;
            anotherSubForm.Show();
            // 重新设定窗口大小
            anotherSubForm.WindowState = FormWindowState.Normal;
        }

    此外,如果你想要保留第一个窗口的最大化,那么你可以尝试截获了子窗体的最大化事件,然后重写它,将子窗体的大小调整为正好填充父窗口,这只是一种“伪”最大化。

    Regards,

    Kyle


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 陈锦巍 2019年2月1日 7:13
    2019年2月1日 6:45
    版主

全部回复

  • Hi 陈锦巍,

    首先,你所指的是“MDI多文档界面”?

    我不太理解你说的这句话。“将其最大化”中“其”指代的是父窗口还是子窗口?同样,“则该窗体”中的“该”指代的又是什么?

    我的理解是:运行程序显示父窗口,然后将父窗口最大化,之后点击按钮显示子窗口,同时子窗口自动最大化。但是经过我的测试,并没有出现这个“bug”。而且“FixSingle”是窗口边框样式“FormBorderStyle”的枚举值,它与窗口的最大化没有任何关系。

    为了更高效地处理这个问题,或许你可以提供相关可以重现这个问题的简单示例的代码,并附以gif等图像进行注解。

    有关“MDI”,或许你可以参考“多文档界面 (MDI) 应用程序

    Regards,

    Kyle


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年1月31日 6:31
    版主
  • 是这样,如果先将一个可Resize的子窗体最大化,那么再打开那个Fixsingle的窗体,也会被最大化显示。如图:

    因为这是在打开它之前先最大化了一个窗口,导致该窗口默认是最大化的。


    陈锦巍

    2019年2月1日 6:23
  • Hi 陈锦巍,

    的确存在这样一种情况,但这并不是MDI窗口的“Bug”,这是MDI设计时的一种默认实现。

    如果你想要第二个子窗口打开时显示的是默认大小,你可以尝试对它的窗体大小重新设置,但这将会导致原有的已最大化的第一个窗口也会恢复正常大小:

        private void subFormToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SubForm subForm = new SubForm();
            subForm.MdiParent = this;
            subForm.Show();
            // 重新设定窗口大小
            subForm.WindowState = FormWindowState.Normal;
        }
    
        private void anotherSubFormToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AnotherSubForm anotherSubForm = new AnotherSubForm();
            anotherSubForm.MdiParent = this;
            anotherSubForm.Show();
            // 重新设定窗口大小
            anotherSubForm.WindowState = FormWindowState.Normal;
        }

    此外,如果你想要保留第一个窗口的最大化,那么你可以尝试截获了子窗体的最大化事件,然后重写它,将子窗体的大小调整为正好填充父窗口,这只是一种“伪”最大化。

    Regards,

    Kyle


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 陈锦巍 2019年2月1日 7:13
    2019年2月1日 6:45
    版主
  • 好的,您的回答解决了我的问题。谢谢!

    陈锦巍

    2019年2月1日 7:13