代码之家  ›  专栏  ›  技术社区  ›  Redwood

即使网格视图没有聚焦,我也能处理一个键启动事件吗?

  •  0
  • Redwood  · 技术社区  · 17 年前

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

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

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

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

    这个问题的答案可能是明确的不,但我想确保我在工作中没有遗漏一些明显的东西。

    4 回复  |  直到 17 年前
        1
  •  0
  •   Yes - that Jake.    17 年前

    不。

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

        2
  •  0
  •   VBNight    17 年前

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

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

    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
  •  0
  •   Tundey    17 年前

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

        4
  •  0
  •   jgallant    17 年前

    处理这个问题的最佳方法是获得处理所有按键的主申请表。 为此,请将主窗体属性“keypreview”设置为true。

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