关于ImText的Leave事件和Button的MouseDown事件触发顺序的问题
在VB6的Source里,如果鼠标左键单击“取消”按钮,会取消ImText的Leave事件。比如:
Private Sub cmdExit_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
bolCancelf = True
End If
End Sub
Private Sub imt_Test_LostFocus()
If bolCancelf = True Then
Else
...
End IF
Exit Sub
但是移行到VB.net的时候,会先触发LostFocus事件,然后才触发MouseDown事件。这样的话会多走一些逻辑,造成VB6跟VB.net的效果不一致了。
这个问题如何解决? 事件的顺序遵循.net标准,所以你应当对的你代码做出修改,在button的click或MouseDown事件里处理你的逻辑。 回复 2楼linnerchen的帖子
但是那样的话我的光标从InputMan里面离开的处理就没了。 那个啥,我猜测按照你的代码的写法,在 InputMan 控件的 LostFocus 事件里面,你是期望做这样的逻辑判断:如果用户按下了 Cancel 按钮,我就什么都不处理,否则处理一些诸如值校验的逻辑,对么? 回复 4楼Leo的帖子
对,就是这个想法。。。 .NET 提供了另一套解决方案叫做 Validation。
你看看这个模型适合不?
Public Class Form1
Dim _cancelButtonClick = False
Protected Overrides Sub OnLoad(e As EventArgs)
MyBase.OnLoad(e)
' Cancel Button.
Me.Button1.CausesValidation = False
End Sub
Private Sub TextBox1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
Debug.WriteLine(e.Cancel)
End Sub
Private Sub TextBox1_Validated(sender As Object, e As EventArgs) Handles TextBox1.Validated
If (_cancelButtonClick) Then
Return
Else
' Do your validation logic here.
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
_cancelButtonClick = True
Me.Close()
_cancelButtonClick = False
End Sub
End Class
页:
[1]