首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止在输入箭头键时MDI子窗体更改?

如何防止在输入箭头键时MDI子窗体更改?
EN

Stack Overflow用户
提问于 2017-02-20 05:01:03
回答 1查看 437关注 0票数 3

我实现的

  • 当用户打开其他子窗体以保存最后的输入数据时,我的应用程序保存mdi子窗体(不要关闭)。
  • 子窗体显示为最大化。

我想要阻止的

  • 当打开两个以上的子窗体后,用户输入箭头键(我认为是子窗体焦点突出的时候),子窗体被导航(上/左: prev子窗体打开,Down/Right : next子表),并显示为释放最大化属性(有些情况没有)。

我已经搜索了很长时间,有一些解决方案关于捕获键,但任何解决方案,以停止这一点。

请帮帮我。

+复制此问题的条件

  • MDI父级的ToolStripPanel & ToolStrip停靠在右侧
  • 父级还将MenuStrip(可见属性设置为false)停靠在顶部,以隐藏子窗体的控制框
  • ToolStripButton的Click使用意大利面条函数显示子表单,如next
代码语言:javascript
复制
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;
}
  1. 负载MDIParent

  1. 单击每个ToolStripButton并加载子窗体
  1. 只按一次“向上”箭头键

EN

回答 1

Stack Overflow用户

发布于 2018-09-24 11:55:17

PreviewKeyDown事件处理程序添加到MDI子窗体中。它可以过滤您希望您的子窗体处理的密钥。

代码语言:javascript
复制
private void Form_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Up:
        case Keys.Down:
        case Keys.Left:
        case Keys.Right:
            e.IsInputKey = true;
            break;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42336825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档