0

我在 WinForms 中的文本框上设置了一种过滤器,以排除客户端输入的特定字符。但是,我似乎遇到了需要帮助解决的新问题。

a) 单击 BackSlash 会使光标移动到字符串的前面,而不是停留在正确的位置

b) 后续单击 BACKSLASH 仍会导致从正确位置删除,但光标仍位于字符串的开头

Private Sub txtExp_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtExp.KeyPress
        Dim strtext As String = txtExp.Text 
            If (e.KeyChar = ChrW(Keys.Back)) Then
                If (strtext.Length > 0) Then
                    txtExp.Text = strtext.Substring(0, strtext.Length - 1)
                    txtExp.Update()
                End If
            ElseIf (Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar) Or (e.KeyChar = "."))) Then
                e.Handled = True
            Else
                txtExp.AppendText(e.KeyChar)
            End If
    End Sub

我想要的是始终将光标放在正确的位置。请问我该怎么做?

4

2 回答 2

1

我认为您可能有太多代码:

Private Sub txtExp_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles txtExp.KeyPress
  With DirectCast(sender, TextBox)
    If (Not (Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar) Or (e.KeyChar = "."))) Then
      e.Handled = True
    End If
  End With
End Sub

用户将信息粘贴到文本框中仍然存在问题。此外,您可能应该只允许一位小数。您当前的代码允许多个小数点。

看起来这确实是MaskedTextBox控件的工作。

于 2012-05-25T15:41:06.647 回答
0

我认为您不需要上面的所有代码,只需要设置 e.Handled 的部分。

可能是您的代码造成问题。

于 2012-05-25T14:47:58.247 回答