sxyweiren 发表于 2017-8-25 11:58:45

GcClassicFunctionKey按键后,对后一个画面产生影响

我们现有的程序里面,用到了GcClassicFunctionKey,但是现在f10压下后,启动了子画面,接着触发了子画面的F10的动作。
i
下面我做了一个小的Sample,结果发现也是有同样的问题的。
请问通过什么属性设定,可以阻止这种现象的发生?

1,新建一个画面,F5动作是在控制台输出字符串,然后启动画面2
Public Class Form1
    Private Sub GcClassicFunctionKey_FunctionKeyPress_1(sender As Object, e As GrapeCity.Win.Bars.FunctionKeyPressEventArgs) Handles GcClassicFunctionKey1.FunctionKeyPress
      Select Case e.KeyIndex
                Case 42,新建画面2,控制台输出字符串。
Public Class Form2
      Private Sub GcClassicFunctionKey_FunctionKeyPress_1(sender As Object, e As GrapeCity.Win.Bars.FunctionKeyPressEventArgs) Handles GcClassicFunctionKey1.FunctionKeyPress
                Select Case e.KeyIndex3,画面启动,在Form1画面里面,按下F5,启动画面2.控制台只出力了Form1的F5的内容。这个动作是正确的。
http://gcdn.gcpowertools.com.cn/forum.php?mod=image&aid=33034&size=300x300&key=d4ef2ba3544915c0&nocache=yes&type=fixnone
4,关闭画面2,然后在画面1里面,重新按下F5,控制台出力了两条数据。Form2的F5的动作竟然也触发了。
http://gcdn.gcpowertools.com.cn/forum.php?mod=image&aid=33035&size=300x300&key=bb77fb3de1750496&nocache=yes&type=fixnone
5,这个动作对我们现有的系统是由影响的。因为我们的F10按钮都是检索功能。现在的结果是第一次画面2启动正常,后面每次画面2启动都进行了一遍DB操作。
甚至有的画面启动就爆出了MSG。
有没有什么属性可以控制这个动作??

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

给个Demo瞅瞅。我改改看。

sxyweiren 发表于 2017-8-30 17:41:56

Leo 发表于 2017-8-30 17:27
给个Demo瞅瞅。我改改看。

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

我看看明天整个demo给传上去.
但是我这里的版本跟你那里不一样,有可能需要你自己换参照.

Leo 发表于 2017-8-30 17:47:43

sxyweiren 发表于 2017-8-30 17:41
就是上面的那个方式,作出两个Form来,然后直接整事件就好了.

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


那个无所谓,在Key处理这一块, v8 和v10区别不大。应该也能重现。你是Win10 啊?

sxyweiren 发表于 2017-8-30 18:57:30

Leo 发表于 2017-8-30 17:47
那个无所谓,在Key处理这一块, v8 和v10区别不大。应该也能重现。你是Win10 啊?

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





Leo 发表于 2017-8-31 09:52:27

我能重现你说的那个问题。
你试试看把业务逻辑框上ActiveForm的判定:
                If Object.ReferenceEquals(Form.ActiveForm, Me) Then
                  Console.WriteLine("Form1的GcClassicFunctionKey1_FunctionKeyPress")
                End If

sxyweiren 发表于 2017-8-31 18:20:28

Leo 发表于 2017-8-31 09:52
我能重现你说的那个问题。
你试试看把业务逻辑框上ActiveForm的判定:

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

我这边尽量增加一些逻辑什么的看能够让拦截无效么。
页: [1] 2 3
查看完整版本: GcClassicFunctionKey按键后,对后一个画面产生影响