延迟或暂时暂停窗口消息

时间:2009-12-09 15:35:16

标签: c# .net winforms .net-3.5

我的应用程序中有一个Winforms DataGridView。当用户选择一行并按Enter键时,我会加载一个新表单,其中包含与该行相关的详细信息。获取数据并显示屏幕大约需要一秒钟。一些用户非常快,并且他们开始输入与表格相关的击键,例如Pg Down / Pg Up,甚至在它加载之前并且抱怨网格向下滚动而不是在加载的表格上看到预期的效果。

我需要一种方法来暂停处理按键消息,直到加载表单。任何想法都高度赞赏。

4 个答案:

答案 0 :(得分:1)

您可以捕获WM_KEYDOWN消息并在表单加载时忽略它(可能设置标记),或者您可以将消息发布到当前加载的表单。

查看IMessageFilter

答案 1 :(得分:1)

不是解决方案,而是一种不同的方法: 当用户选择一行并按Enter键时,你现在做什么?:

  1. 显示表单并加载数据
  2. 加载数据并显示表单
  3. 选项1最好与加载图标/消息结合使用。如果你真的必须启用击键,那么捕获它们并在完成加载后重新启动它们。新表单将接收击键,因为它是最顶层和活动的(如果正确完成)。

答案 2 :(得分:0)

您是否可以将enabled属性设置为false,并在数据加载后返回true?

答案 3 :(得分:0)

应该进行简单的布尔检查。

创建一个bool,将其命名为“busy”,并在按下enter按钮时将其检查为true。

if (!busy)
{
busy = true;
//do your thing
}

加载完成后,再次将其重新设置为false