【问题标题】:Can I handle a key up event even when grid view isn't focused?即使网格视图没有聚焦,我也可以处理按键事件吗?
【发布时间】:2009-02-06 18:37:43
【问题描述】:

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

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

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

在这种情况下是否也可以跟踪按键?我无权访问我的数据网格视图/控件之外的代码。

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

【问题讨论】:

  • 这个控件有公共刷新方法吗?如果有,那么您应该能够处理表单上的所有 F5 按下,并且只需调用控件刷新方法。

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


【解决方案1】:

没有。

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

【讨论】:

    【解决方案2】:

    您可以在控件所在的窗体上进行一些全局键盘事件处理。

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

    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
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-12-20
          • 2017-01-16
          • 1970-01-01
          • 1970-01-01
          • 2011-07-01
          • 2019-06-16
          • 2017-06-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多