退格键在文本框(VB.Net)中不起作用

退格键在文本框(VB.Net)中不起作用,vb.net,visual-studio,Vb.net,Visual Studio,下面是我将文本框中的数据输入限制为最多两位小数的代码。但是,删除文本框中输入的数据时,退格键不起作用 Private Sub txtbasicsalary_keypress(sender As Object, e As KeyPressEventArgs) Handles txtbasicsalary.KeyPress If Not Char.IsDigit(e.KeyChar) And Not e.KeyChar = "." Then e.Handled = True

下面是我将文本框中的数据输入限制为最多两位小数的代码。但是,删除文本框中输入的数据时,退格键不起作用

Private Sub txtbasicsalary_keypress(sender As Object, e As KeyPressEventArgs) Handles txtbasicsalary.KeyPress

    If Not Char.IsDigit(e.KeyChar) And Not e.KeyChar = "." Then
        e.Handled = True
    ElseIf e.KeyChar = "." And txtbasicsalary.Text.IndexOf(".") <> -1 Then
        e.Handled = True
    ElseIf e.KeyChar = "." Then
        e.Handled = False
    ElseIf e.KeyChar = ControlChars.Back Then
        e.Handled = False
    ElseIf Char.IsDigit(e.KeyChar) Then
        If txtbasicsalary.Text.IndexOf(".") <> -1 Then
            If txtbasicsalary.Text.Length >= txtbasicsalary.Text.IndexOf(".") + 3 Then  'replace 2 for greater numbers after decimal point
                e.Handled = True
                txtconveyance.Focus()
            End If
        End If
    End If

End Sub
Private Sub txtbasicsalary\u keypress(发送方作为对象,e作为KeyPressEventArgs)处理txtbasicsalary.keypress
如果不是Char.IsDigit(e.KeyChar)而不是e.KeyChar=“”。,则
e、 已处理=真
ElseIf e.KeyChar=“”和txtbasicsalary.Text.IndexOf(“.”)则为-1
e、 已处理=真
ElseIf e.KeyChar=“”然后
e、 已处理=错误
ElseIf e.KeyChar=ControlChars.Back Then
e、 已处理=错误
ElseIf Char.IsDigit(e.KeyChar)然后
如果txtbasicsalary.Text.IndexOf(“.”)为-1,则
如果txtbasicsalary.Text.Length>=txtbasicsalary.Text.IndexOf(“.”)+3,则“小数点后的较大数字替换为2
e、 已处理=真
txt.Focus()
如果结束
如果结束
如果结束
端接头
请审阅并提出建议

谢谢
萨尔曼。

几周前我也有类似的问题。 我编辑了你的代码!然后检查了一下。 现在它工作得很好。 享受吧! 此外,您还可以下载完整的工作项目表格

Private Sub txtbasicsalary\u KeyPress(发送方作为对象,e作为KeyPressEventArgs)处理txtbasicsalary.KeyPress
如果不是Char.IsDigit(e.KeyChar)而不是e.KeyChar=“”。,则
e、 已处理=真
如果结束
如果e.KeyChar=“”和txtbasicsalary.Text.IndexOf(“.”)为-1,则
e、 已处理=真
如果结束
如果e.KeyChar=“”,则
e、 已处理=错误
如果结束
如果e.KeyChar=Chr(Keys.Back),则
e、 已处理=错误
如果结束
如果Char.IsDigit(例如KeyChar),那么
如果txtbasicsalary.Text.IndexOf(“.”)为-1,则
如果txtbasicsalary.Text.Length>=txtbasicsalary.Text.IndexOf(“.”)+3,则“小数点后的较大数字替换为2
e、 已处理=真
txt.Focus()
如果结束
如果结束
如果结束
端接头

如果限制输入非常重要(相对于验证),为什么不使用NumericUpDown?第一个If语句也匹配一个退格,很容易通过调试器看到。我不使用调试器。我只写完美的代码,但我喜欢问它什么时候不起作用。我是说,我已经试了好几个小时了。我会在睡觉前问你,等我醒来我会得到答案。调试器?它不在安装列表中。我认为微软犯了一个错误,没有安装VS.Nah!我很完美!
 Private Sub txtbasicsalary_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtbasicsalary.KeyPress
    If Not Char.IsDigit(e.KeyChar) And Not e.KeyChar = "." Then
        e.Handled = True
    End If
    If e.KeyChar = "." And txtbasicsalary.Text.IndexOf(".") <> -1 Then
        e.Handled = True
    End If
    If e.KeyChar = "." Then
        e.Handled = False
    End If
    If e.KeyChar = Chr(Keys.Back) Then
        e.Handled = False
    End If
    If Char.IsDigit(e.KeyChar) Then
        If txtbasicsalary.Text.IndexOf(".") <> -1 Then
            If txtbasicsalary.Text.Length >= txtbasicsalary.Text.IndexOf(".") + 3 Then  'replace 2 for greater numbers after decimal point
                e.Handled = True
                txtconveyance.Focus()
            End If
        End If
    End If
End Sub