我的应用程序中有一个Winforms DataGridView。当用户选择一行并按Enter键时,我会加载一个新的表单,其中包含与该行相关的详细信息。获取数据并显示屏幕大约需要一秒钟。有些用户速度很快,他们开始输入与表单相关的按键,例如Pg Down/Pg Up。甚至在它加载之前,并抱怨网格向下滚动,而不是在加载的窗体上看到预期的效果。我需要一种方法来暂停击键消息从被处理,直到加载的形式。任何想法高度赞赏。
w46czmvw1#
您可以捕获WM_KEYDOWN消息,并在表单正在加载时忽略它(可能设置了一个标志),或者您可以将消息发布到当前正在加载的表单中。请查看IMessageFilter
WM_KEYDOWN
yiytaume2#
不是解决方案,而是不同的方法:当用户选择一行并按Enter键时,您现在会做什么?1.显示窗体并加载数据1.装入数据并显示表格选项1最好与加载图标/消息结合使用。如果你真的需要启用击键,那么当你完成加载时,捕获它们并重新启动它们。新表单将接收击键,因为它是最上面的并且是活动的(如果正确完成的话)。
wribegjk3#
不能将enabled属性设置为false,然后在加载数据后再设置回true吗?
4jb9z9bj4#
一个简单的布尔值检查就可以了。创建一个bool,命名为“busy”,当按下回车键时,检查它是否为true。
if (!busy) { busy = true; //do your thing }
加载完成后,只需再次将其检查回false即可
4条答案
按热度按时间w46czmvw1#
您可以捕获
WM_KEYDOWN
消息,并在表单正在加载时忽略它(可能设置了一个标志),或者您可以将消息发布到当前正在加载的表单中。请查看IMessageFilter
yiytaume2#
不是解决方案,而是不同的方法:当用户选择一行并按Enter键时,您现在会做什么?
1.显示窗体并加载数据
1.装入数据并显示表格
选项1最好与加载图标/消息结合使用。如果你真的需要启用击键,那么当你完成加载时,捕获它们并重新启动它们。新表单将接收击键,因为它是最上面的并且是活动的(如果正确完成的话)。
wribegjk3#
不能将enabled属性设置为false,然后在加载数据后再设置回true吗?
4jb9z9bj4#
一个简单的布尔值检查就可以了。
创建一个bool,命名为“busy”,当按下回车键时,检查它是否为true。
加载完成后,只需再次将其检查回false即可