2017-08-16 2 views
0

小数の入力をTextBoxにフォーマットする次のコードがあります。キャレット位置のTextBox入力の妥当性確認

If Char.IsDigit(e.KeyChar) OrElse e.KeyChar = "."c Then 
    If e.KeyChar = "."c Then 
     If txtPrice.Text.Contains("."c) Then 
      e.Handled = True 
     End If 
    ElseIf Char.IsDigit(e.KeyChar) Then 
     If txtPrice.Text.Contains("."c) Then 
      Dim value As String = txtPrice.Text 
      Dim units As String = value.Substring(value.IndexOf("."c) + 1) 

      If units.Length >= 2 Then 
      e.Handled = True 
      End If 
     End If 
    End If 
ElseIf e.KeyChar <> Chr(8) Then 
    e.Handled = True 
End If 

この私がTextBoxに値を入力すると、すべてが、しかし、正常に動作し、例えば10.50、最初の0を削除して11.50に値を変更しようとすると、他のすべてのユーザー入力をキャンセルする小数点の後に2桁があるので、小数点以下2桁しか保証しません入力することができます。

小数点の前後に数字が追加されているかどうかを確認する方法がありますか?それとも、キャレットの位置に基づいてチェックできますか?

おそらくTestBoxで小数を検証する簡単な方法がありますが、このコードはグリッドやその他のコントロールの検証にも使用されるため、この形式のものが必要です。

答えて

0

SelectionStartプロパティを確認します。上記のコード

If units.Length >= 2 AndAlso txtPrice.SelectionStart > txtPrice.Text.IndexOf(".") Then 
    e.Handled = True 
End If 

説明:

テキストが既に2つの文字.後、あなたがキー入力を防ぐため、別のものを追加しようとしている場合。 .の前に追加する場合は許可してください。