我有一个问题,如何为我的代码创建多个handels。我找到了一些例子,但仍然不知道如何与我的代码结合起来。 (我是初学者,所以任何帮助或建议都会非常有帮助)
以下是我要创建的内容:
Private Sub t_VDOSC_LostFocus(sender As Object, e As EventArgs) Handles t_VDOSC.LostFocus, t_VDOCC.LostFocus, t_VSOCC.LostFocus, t_VSOSC.LostFocus
Dim not_ok As Boolean = False
If IsNumeric(t_VDOSC.Text) = True Then
If (CDbl(t_VDOSC.Text) >= 0 And CDbl(t_VDOSC.Text) <= 2.0) Or CDbl(t_VDOSC.Text) = 99999 Then
Else
not_ok = True
End If
Else
not_ok = True
End If
If not_ok = True Then
MsgBox("Values must be between 0 and 2!")
t_VDOSC.Focus()
End If
text_default(sender)
End Sub
在此代码中,第二个,第三个和第四个句柄不起作用。我可以自己编写每个句柄,但我认为这个编码之王对于审查和管理来说更快更好。
对于最简单的代码,多个handel工作正常,但我不知道如何管理我的,我有一些条件。
适用于我的多个句柄:
Private Sub t_VDOSC_GotFocus(sender As Object, e As EventArgs) Handles t_VDOSC.GotFocus, t_VDOCC.GotFocus, t_VSOCC.GotFocus, t_VSOSC.GotFocus
text_aktive(sender)
End Sub
text_aktive
和text_default
是颜色设置。
我在VB6中找到了示例,简单的代码,它有索引,我不喜欢在我的代码中。
IF Index = 1 Or Index = 2, or Index = 6, or Index = 7 Then
If Text3(Index) >=0 And Text3(Index) <=4 Then
我的代码有更好的解决方案吗?我有很多TextBoxes,我希望它简单易读。
答案 0 :(得分:1)
(1)如上所述,您可以在一个处理程序中处理多个事件。但问题是你只使用t_VDOSC
,第一个TextBox,所以,它似乎第二,第三和第四不起作用。您应该使用sender
而不是t_VDOSC
,即第一个TextBox。
(2)您正在检查LostFocus
事件中的验证;如果值无效,则显示MessageBox
并重新设置焦点。这就是问题。
让我们说 - TextBox A 失去焦点,然后 TextBox B 获得焦点;
检查 TextBox A 的LostFocus
事件中的验证,然后将焦点设置回 TextBox A < /强>;它会再次触发 TextBox B LostFocus
事件,然后将焦点设置回 TextBox B 再次; (它将创建一个无限循环)。
要避免无限循环,可以使用Validating
事件。
(3)解决方案是......让LostFocus
事件处理程序像这样
Private Sub t_VDOSC_LostFocus(sender As Object, e As EventArgs) Handles _
t_VDOSC.LostFocus, t_VDOCC.LostFocus, t_VSOCC.LostFocus, t_VSOSC.LostFocus
text_default(sender)
End Sub
(4)检查Validating
事件中的数据验证过程
Private Sub t_VDOSC_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) _
Handles t_VDOSC.Validating, t_VDOCC.Validating, t_VSOCC.Validating, t_VSOSC.Validating
Dim t_sender As TextBox
t_sender = CType(sender, TextBox)
Dim not_ok As Boolean = False
If IsNumeric(t_sender.Text) = True Then
If (CDbl(t_sender.Text) >= 0 And CDbl(t_sender.Text) <= 2.0) Or CDbl(t_sender.Text) = 99999 Then
Else
not_ok = True
End If
Else
not_ok = True
End If
If not_ok = True Then
'You don't need to call t_sender.Focus() here
e.Cancel = True 'This will prevent losing focus with invalid data
MsgBox("Values must be between 0 and 2!")
End If
text_default(t_sender)
End Sub