【发布时间】:2017-02-20 05:01:03
【问题描述】:
我实施的内容
- 当用户打开其他子表单以保留最后输入的数据时,我的应用程序会保留 mdi 子表单(不要关闭)。
- 子表单显示为已最大化。
我要停止的事情
- 当用户在打开两个以上子窗体后输入箭头键时(我认为是子窗体聚焦时),子窗体被导航(上/左:上一个子打开,下/右:下一个子)并显示为最大化属性被释放(有些情况没有)。
我已经搜索了很长时间,有一些关于捕获密钥的解决方案,但任何解决方案都可以阻止这种情况。
请帮帮我。
+重现此问题的条件
- MDI 父级在右侧有 ToolStripPanel 和 ToolStrip 停靠
- 父级也有 MenuStrip(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;
}
【问题讨论】:
-
你想建立这个导航还是你有它并想停止它?
-
@GuidoG 我想要阻止它
-
我的 mdi 应用程序中没有这个。你能描述一下我需要在我的 mdi 应用程序中做什么来重现问题吗
-
@GuidoG 我上传图片和示例代码。
-
请有人编辑语法错误
标签: c# .net forms winforms mdi