0

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

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

当 Activity Grid View 是屏幕上当前聚焦的元素时,通过处理 Key Up 事件很容易做到这一点,但是当另一个元素(例如菜单栏)是最后一个被点击的东西时,这显然不起作用.

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

这个问题的答案可能是一个明确的否定,但我想确保我在完成这项工作时没有遗漏一些明显的东西。

4

4 回答 4

0

不。

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

于 2009-02-06T18:42:06.800 回答
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
}
于 2009-02-06T18:50:22.837 回答
0

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

于 2009-02-06T18:50:45.550 回答
0

处理这个问题的最好方法是让主应用程序表单来处理所有按键。为此,请将主窗体属性“KeyPreview”设置为 True。

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

于 2009-02-06T18:51:08.297 回答