我在应用程序的某个区域中显示的控件内有一个数据网格视图。
我希望在按下 F5 时刷新此活动网格。
当 Activity Grid View 是屏幕上当前聚焦的元素时,通过处理 Key Up 事件很容易做到这一点,但是当另一个元素(例如菜单栏)是最后一个被点击的东西时,这显然不起作用.
在这种情况下有没有办法跟踪按键?我无权访问我的数据网格视图/控件之外的代码。
这个问题的答案可能是一个明确的否定,但我想确保我在完成这项工作时没有遗漏一些明显的东西。
我在应用程序的某个区域中显示的控件内有一个数据网格视图。
我希望在按下 F5 时刷新此活动网格。
当 Activity Grid View 是屏幕上当前聚焦的元素时,通过处理 Key Up 事件很容易做到这一点,但是当另一个元素(例如菜单栏)是最后一个被点击的东西时,这显然不起作用.
在这种情况下有没有办法跟踪按键?我无权访问我的数据网格视图/控件之外的代码。
这个问题的答案可能是一个明确的否定,但我想确保我在完成这项工作时没有遗漏一些明显的东西。
不。
如果您无权访问当时可能具有焦点的其他控件,则无法将按键向上消息从它们传递给您的控件。
您可以在控件所在的表单上进行一些全局键盘事件处理。
如果将此添加到表单中,则可以在将全局键事件发送到控件之前获取它们。
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
}
您是否尝试过捕获表单本身的事件,然后调用数据网格的事件处理程序?您必须将 KeyPreview 设置为 true 才能使表单获得键盘事件通知。
处理这个问题的最好方法是让主应用程序表单来处理所有按键。为此,请将主窗体属性“KeyPreview”设置为 True。
然后,处理主窗体上的所有 KeyUp 事件。关于 KeyPreview 的更多信息:http: //msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx