Visual Basic多句柄事件

时间:2014-03-21 15:19:28

标签: vb6 visual-studio-2013

我有一个问题,如何为我的代码创建多个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_aktivetext_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,我希望它简单易读。

1 个答案:

答案 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

参考:Validating Event