即使网格视图没有聚焦,我还能处理关键事件吗?

时间:2009-02-06 18:37:43

标签: c# .net-3.5 event-handling

我在控件中有一个数据网格视图,它显示在应用程序的某个区域中。

我希望在按下F5时刷新此活动网格。

通过处理Key Up事件,当活动网格视图是屏幕上当前聚焦的元素时,这很容易做到这一点,但是当另一个元素(例如菜单栏)是最后一个元素时,这显然不起作用点击了。

在这种情况下,有没有办法跟踪按键?我无法访问数据网格视图/控件之外的代码。

对此的答案可能是明确的否定,但我想确保在做这项工作时我没有遗漏任何明显的东西。

4 个答案:

答案 0 :(得分:0)

没有

如果您无法访问当时可能具有焦点的其他控件,则无法将密钥消息从它们传递给您的控件。

答案 1 :(得分:0)

您可以在控件所在的表单上执行一些全局键盘事件处理。

如果将其添加到表单中,则可以在将全局键事件发送到控件之前获取它们。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    switch (keyData)
    {
        case Keys.F5:
            // Send Refesh Event To Grid
            return true; // Mark Key As Handled

            // Add Any Extra Command Keys Here
    }

    return base.ProcessCmdKey(ref msg, keyData); // Resend To Base Function
}

答案 2 :(得分:0)

您是否尝试在Form本身上捕获事件,然后调用数据网格的事件处理程序?您必须将表单的KeyPreview设置为true才能获得键盘事件的通知。

答案 3 :(得分:0)

处理此问题的最佳方法是获取主应用程序表单以处理所有按键。 为此,请将主Form属性“KeyPreview”设置为True。

然后,处理主窗体上的所有KeyUp事件。 有关KeyPreview的更多信息,请访问:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx