我实现的功能
- 我的应用程序在用户打开其他子窗体时,保留mdi子窗体(不要关闭)以保留上次输入的数据。
- 子窗体显示为最大化。
我想要停止的问题
- 当用户在已经打开了两个以上子窗体之后输入箭头键(我认为是当焦点在子窗体上时),子窗体会被导航(向上/向左:打开前一个子窗体,向下/向右:打开下一个子窗体)并释放最大化属性(某些情况下没有释放)。
我已经搜索了很长时间,有一些关于捕获按键的解决方案,但没有解决这个问题的解决方案。
请帮帮我。
+ 重现该问题的条件
- MDI父窗体具有位于右侧的ToolStripPanel和ToolStrip停靠。
- 父窗体还具有菜单栏(Visible属性设置为false)停靠在顶部以隐藏子窗体的控制框。
- ToolStripButton的Click事件处理程序使用类似于意面式函数的方式显示子窗体。
private void tsbChildForm1_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
if (m_frmChild != null)
{
if (typeof(Form1) != this.ActiveMdiChild.GetType())
{
m_frmChild = new Form1();
OpenChildForm(m_frmChild);
}
else
{
// do nothing. prevent memory increase
}
}
else
{
m_frmChild = new Form1();
OpenChildForm(m_frmChild);
}
}
private void OpenChildForm(Form frmChild)
{
if (LoadExistForm(frmChild))
{
// do nothing.
}
else
{
frmChild.MdiParent = this;
frmChild.WindowState = FormWindowState.Maximized;
frmChild.Show();
}
}
private bool LoadExistForm(Form frmChild)
{
foreach (Form frmEach in this.MdiChildren)
{
if (frmEach.Name.Equals(frmChild.Name, StringComparison.OrdinalIgnoreCase))
{
frmEach.Select();
frmEach.WindowState = FormWindowState.Maximized;
frmChild.Dispose();
return true;
}
}
return false;
}