我在表单上有一个按钮,可以将新表单作为自有表单打开。 (这很简单,除了下面没有其他逻辑)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Form form = new Form();
form.Show(this);
}
}
我的问题如下:
然后在恢复时,最大化的拥有形式不再最大化,但状态为正常。
修改 拥有的表单被设置为工具窗口,因此我无法打破所有者/所有者的关系。它似乎是winforms的一个东西,但我知道应该可以正确地纠正VS行为,并将窗口恢复到最大化而不是正常。
答案 0 :(得分:1)
这是一种可能性......
将属性添加到“拥有”表单以跟踪其上一个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;
}