C# 使用键盘输入关闭可停靠控件窗格

C# 使用键盘输入关闭可停靠控件窗格,c#,infragistics,C#,Infragistics,我在做一个使用基础设施控制的项目。它创建一个UserControl,将其放入一个DockableControl窗格,然后将其放入一个DockAreaPane,该DockAreaPane位于表单中的UltraDockManager内部。当其中一个可停靠控件窗格松开并具有焦点时,我需要一种方法来捕获按键,以便关闭该窗口。我遇到的问题是,基础设施控件似乎没有公开任何键盘事件。我在主窗体中重写了OnKeyUp,它在所有子窗口都停靠时捕获按键,但如果其中一个窗口处于浮动状态且处于焦点状态,则不会捕获按键。

我在做一个使用基础设施控制的项目。它创建一个UserControl,将其放入一个DockableControl窗格,然后将其放入一个DockAreaPane,该DockAreaPane位于表单中的UltraDockManager内部。当其中一个可停靠控件窗格松开并具有焦点时,我需要一种方法来捕获按键,以便关闭该窗口。我遇到的问题是,基础设施控件似乎没有公开任何键盘事件。我在主窗体中重写了OnKeyUp,它在所有子窗口都停靠时捕获按键,但如果其中一个窗口处于浮动状态且处于焦点状态,则不会捕获按键。我尝试在DockableControlPane内的控件中重写OnKeyUp,但从未调用过。我完全不知道在这些浮动窗口中,我在哪里可以始终捕捉到按键,或者一些可以使键盘快捷键关闭它们的设置。在这一点上,我不太挑剔什么键盘快捷键可以完成这项工作。而从内部注册表切换是不可行的选择。

我可以通过在UltraToolbarsManager中添加一个隐藏按钮来处理这个问题,在我的例子中,这个按钮吞没了键盘输入,并将其快捷键设置为Ctrl-F4。

您可以覆盖Form类的ProcessCmdKey:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        switch (keyData)
        {
            // open panel combination keys  Ctrl + F
            case (Keys.Control | Keys.F):
                if (this.ultraDockManager1.ControlPanes["Your Pane Name"] != null)
                    if (this.ultraDockManager1.ControlPanes["Your Pane Name"].Pinned)
                    {
                        this.ultraDockManager1.ControlPanes["Your Pane Name"].Pinned = false;
                    }
                    else if (this.ultraDockManager1.ControlPanes["Your Pane Name"].IsInView)
                    {
                        this.ultraDockManager1.FlyIn(false);
                    }

                    else
                    {
                        // this.ultraDockManager1.ControlPanes["Your Pane Name"].Pin();
                        this.ultraDockManager1.ControlPanes["Your Pane Name"].Activate();
                    }
         }
    }
也许下一个:D