假设您有一个Windows Forms应用程序,该应用程序的主窗口带有子窗口。
如果最大化主窗口和子窗口,然后最小化主窗口,则子窗口也会自动最小化。这是正确和预期的。
如果您随后还原主窗口(通过在任务栏中单击其图标),则主窗口将正确还原为最大化,而辅助窗口将还原为非最大化。
有什么办法可以解决这个问题? (这似乎是WinForms的错误,但也许是设计使然...)
要复制(需要两个监视器):
Form1
的主表单。Project | Add Windows Form...
,然后单击Add
,添加一个名为Form2
的新表单。将Form1
构造函数更改为如下形式:
public Form1()
{
InitializeComponent();
new Form2().Show(this); // New line of code.
}
运行应用程序。
将Form1移至一个监视器,并将Form2移至另一监视器。
最大化Form1和Form2。
最小化Form1,方法是单击其标题栏上的最小化图标。观察到Form2也被最小化了。
还原Form1。
实际结果:
Form1恢复到其最大化状态。 Form2不会还原到其最大化状态。
预期结果:
两种形式都恢复到最大化状态。
答案 0 :(得分:0)
进一步搜索后,我找不到任何记录的解决方案,所以我提出了自己的解决方案。如果将以下方法和字段添加到子窗体的实现中,它将解决此问题:
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (!Visible)
{
_lastState = WindowState;
}
else
{
if (_lastState == FormWindowState.Maximized)
WindowState = FormWindowState.Maximized;
}
}
FormWindowState _lastState = FormWindowState.Normal;
但是,如果有人有更好的修复程序,我将非常有兴趣听到它。