最大化拥有的表单不能正确恢复

我在表格上有一个按钮,可以作为拥有的表单打开一个新表单。 (这很简单,没有其他逻辑比下面)

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Form form = new Form();
        form.Show(this);
    }
}

我的问题如下:

  • 如果我点击按钮来获取拥有的表单的实例并将其拖动到它自己的显示器上。
  • 最大化拥有的表格
  • 最小化原始主窗体(Form1)
  • 恢复原始主窗体(Form1)
  • 然后在恢复最大化拥有的形式不再最大化,但具有正常状态。

    编辑:拥有的窗体被设计为一个工具窗口,所以我不能打破所有者/拥有关系。 它似乎是与winforms的东西,但我知道它应该有可能纠正,因为VS行为正确,并恢复窗口最大化,而不是正常。


    这是一种可能性...

    将属性添加到拥有的窗体以跟踪其最后一个FormWindowState (如果不打算公开它,则可能是private ):

    private FormWindowState _lastState;
    public FormWindowState LastWindowState { get { return _lastState; } }
    

    WndProc的覆盖添加到拥有的窗体中:

    protected override void WndProc(ref Message message)
    {
        const Int32 WM_SYSCOMMAND = 0x0112;
        const Int32 SC_MAXIMIZE = 0xF030;
        const Int32 SC_MINIMIZE = 0xF020;
        const Int32 SC_RESTORE = 0xF120;
    
        switch (message.Msg)
        {
        case WM_SYSCOMMAND:
            {
            Int32 command = message.WParam.ToInt32() & 0xfff0;
            switch (command)
            {
                case SC_MAXIMIZE:
                _lastState = FormWindowState.Maximized;
                break;
                case SC_MINIMIZE:
                _lastState = FormWindowState.Minimized;
                break;
                case SC_RESTORE:
                _lastState = FormWindowState.Normal;
                break;
            }
            }
            break;
        }
    
        base.WndProc(ref message);
    }
    

    最后,为Owned表单的VisibleChanged事件添加一个处理程序:

    private void Form2_VisibleChanged(object sender, EventArgs e)
    {
        WindowState = _lastState;
    }
    
    链接地址: http://www.djcxy.com/p/29195.html

    上一篇: Maximized owned Form not restoring correctly

    下一篇: How to restore minimized form