找回密码
 立即注册

QQ登录

只需一步,快速开始

sxyweiren

中级会员

73

主题

366

帖子

755

积分

中级会员

积分
755

活字格认证微信认证勋章

sxyweiren
中级会员   /  发表于:2017-8-25 11:58  /   查看:12301  /  回复:20
我们现有的程序里面,用到了GcClassicFunctionKey,但是现在f10压下后,启动了子画面,接着触发了子画面的F10的动作。
i
下面我做了一个小的Sample,结果发现也是有同样的问题的。
请问通过什么属性设定,可以阻止这种现象的发生?

1,新建一个画面,F5动作是在控制台输出字符串,然后启动画面2
  1. Public Class Form1
  2.     Private Sub GcClassicFunctionKey_FunctionKeyPress_1(sender As Object, e As GrapeCity.Win.Bars.FunctionKeyPressEventArgs) Handles GcClassicFunctionKey1.FunctionKeyPress
  3.         Select Case e.KeyIndex
  4.                 Case 4
复制代码
2,新建画面2,控制台输出字符串。
  1. Public Class Form2
  2.         Private Sub GcClassicFunctionKey_FunctionKeyPress_1(sender As Object, e As GrapeCity.Win.Bars.FunctionKeyPressEventArgs) Handles GcClassicFunctionKey1.FunctionKeyPress
  3.                 Select Case e.KeyIndex
复制代码
3,画面启动,在Form1画面里面,按下F5,启动画面2.控制台只出力了Form1的F5的内容。这个动作是正确的。

4,关闭画面2,然后在画面1里面,重新按下F5,控制台出力了两条数据。Form2的F5的动作竟然也触发了。

5,这个动作对我们现有的系统是由影响的。因为我们的F10按钮都是检索功能。现在的结果是第一次画面2启动正常,后面每次画面2启动都进行了一遍DB操作。
甚至有的画面启动就爆出了MSG。
有没有什么属性可以控制这个动作??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

20 个回复

倒序浏览
Leo
超级版主   /  发表于:2017-8-25 17:15:44
沙发
你在启动其他画面之前,调用一个Application.DoEvents() 看看好使不。
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2017-8-25 17:28:54
板凳
Leo 发表于 2017-8-25 17:15
你在启动其他画面之前,调用一个Application.DoEvents() 看看好使不。

不好使,还是照样触发
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2017-8-25 17:28:56
地板
Leo 发表于 2017-8-25 17:15
你在启动其他画面之前,调用一个Application.DoEvents() 看看好使不。

不好使,还是照样触发
回复 使用道具 举报
Leo
超级版主   /  发表于:2017-8-30 17:27:19
5#
给个Demo瞅瞅。我改改看。
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2017-8-30 17:41:56
6#
Leo 发表于 2017-8-30 17:27
给个Demo瞅瞅。我改改看。

就是上面的那个方式,作出两个Form来,然后直接整事件就好了.

我看看明天整个demo给传上去.
但是我这里的版本跟你那里不一样,有可能需要你自己换参照.
回复 使用道具 举报
Leo
超级版主   /  发表于:2017-8-30 17:47:43
7#
sxyweiren 发表于 2017-8-30 17:41
就是上面的那个方式,作出两个Form来,然后直接整事件就好了.

我看看明天整个demo给传上去.

那个无所谓,在Key处理这一块, v8 和v10区别不大。应该也能重现。你是Win10 啊?
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2017-8-30 18:57:30
8#
Leo 发表于 2017-8-30 17:47
那个无所谓,在Key处理这一块, v8 和v10区别不大。应该也能重现。你是Win10 啊?

恩。Win10,你看看好再现么。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Leo
超级版主   /  发表于:2017-8-31 09:52:27
9#
我能重现你说的那个问题。
你试试看把业务逻辑框上ActiveForm的判定:
  1.                 If Object.ReferenceEquals(Form.ActiveForm, Me) Then
  2.                     Console.WriteLine("Form1的GcClassicFunctionKey1_FunctionKeyPress")
  3.                 End If
复制代码
回复 使用道具 举报
sxyweiren
中级会员   /  发表于:2017-8-31 18:20:28
10#
Leo 发表于 2017-8-31 09:52
我能重现你说的那个问题。
你试试看把业务逻辑框上ActiveForm的判定:

虽然说Demo可以做到有效拦截了。但是在我们实际的程序中并不管用。
因为我们程序比较复杂的走了各种Check,
并且有DB查询,赋值的操作。
然后悲剧的走到这里发现ActiveForm=Me了。
还有没有其他有效的方法能够拦截?

我这边尽量增加一些逻辑什么的看能够让拦截无效么。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部