1

嗨,伙计们,另一个菜鸟的问题我设法用分号分隔文本框中的数字类型,但问题是使用退格键时分号不能被删除..

我的代码是这个

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As   System.EventArgs) Handles TextBox1.TextChanged

    If TextBox1.TextLength Mod 3 = 2 Then
        SendKeys.SendWait(":")

    End If
End Sub
4

2 回答 2

1

尝试这个:

Dim backPressed As Boolean = False

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    If backPressed Then
        backPressed = False
        Return
    End If

    If TextBox1.TextLength Mod 3 = 2 Then
        SendKeys.SendWait(":")
    End If

End Sub

Private Sub TextBox1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    If e.KeyChar = ChrW(8) Then
        backPressed = True
    End If
End Sub
于 2013-07-03T18:48:08.403 回答
1

稍微软糖,也许是一个更优雅的解决方案,但是......

Dim ValidKey As Boolean = True

Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress

    If Char.IsLetterOrDigit(e.KeyChar) Then

        ValidKey = True

    Else

        ValidKey = False

    End If

End Sub

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

    If ValidKey And TextBox1.TextLength Mod 3 = 2 Then
            SendKeys.SendWait(":")

    End If
End Sub

如果您愿意,您当然可以通过仅审查数字键来扩展此功能....

编辑:您可以将此代码最小化为;

Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress

    If Char.IsLetterOrDigit(e.KeyChar) And TextBox1.TextLength Mod 3 = 2 Then
        SendKeys.SendWait(":")

    End If

End Sub

删除 TextChanged Sub、多余的变量和 else 语句......

编辑2:仅限于数字输入...

Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress

    If Char.IsDigit(e.KeyChar) And TextBox1.TextLength Mod 3 = 2 Then

        SendKeys.SendWait(":")

    ElseIf Char.IsLetter(e.KeyChar) Then

        e.Handled = True

    End If

End Sub
于 2013-07-03T18:33:30.693 回答