0

クライアントが特定の文字を入力できないように、WinForms の textBox に一種のフィルターを設定しました。ただし、修正の助けが必要な新しい問題が作成されたようです。

a) バックスラッシュをクリックすると、カーソルが正しい位置にとどまるのではなく、文字列の先頭に移動します。

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

ユーザーがテキストボックスに情報を貼り付ける際に、まだ問題があります。また、小数点を 1 つだけ許可する必要があります。現在のコードでは、複数の小数点を使用できます。

代わりに、これは実際にはMaskedTextBoxコントロールの仕事のようです。

于 2012-05-25T15:41:06.647 に答える
0

上記のすべてのコードは必要ではなく、e.Handledを設定する部分だけが必要だと思います。

おそらく問題を起こすのはあなたのコードです。

于 2012-05-25T14:47:58.247 に答える