2012-05-11 3 views
0

これは私のコードです:キープレスイベントで、テキストボックスの全文を取得することは

Private Sub prices_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles wholeprice_input_new_item.KeyPress, dozenprice_input_new_item.KeyPress, detailprice_input_new_item.KeyPress, costprice_input_new_item.KeyPress 

     Dim TxtB As TextBox = CType(sender, TextBox) 
     Dim rex As Regex = New Regex("^[0-9]*[.]{0,1}[0-9]{0,1}$") 

     'MsgBox(TxtB.Text())  

     If (Char.IsDigit(e.KeyChar) Or e.KeyChar.ToString() = "." Or e.KeyChar = CChar(ChrW(Keys.Back))) Then 
      If (TxtB.Text.Trim() <> "") Then 
       If (rex.IsMatch(TxtB.Text) = False And e.KeyChar <> CChar(ChrW(Keys.Back))) Then 
        e.Handled = True 
       End If 
      End If 
     Else 
      e.Handled = True 
     End If 

    End Sub 
最後の文字が含まれていないテキストボックスのTextプロパティが押さ

、例:私はしたい

Text entered = "12.1" 
TxtB.Text = "12." 

Text entered = "11.." 
TxtB.Text = "11." 

Text entered = "12" 
TxtB.Text = "1" 

すべての文字を検証します。どのようにしてイベントのkeypressをテキストボックスのすべての文字を検証できるようにするのですか?

+0

あなたの質問は、何が間違っているのか、コードに何をする必要があるのか​​を明確にしません。現在何か問題が起きている場合は、問題を明記してください。あなたが必要とすることの例を挙げることができれば、それは役に立ちます。 –

+0

私はSteveDogと何かが合わないことに同意します。あなたのコードは、TextBox文字列を無効にする場合、最後に入力された文字を削除します。しかし、あなたの例を明確にすることはできますか? "12.1"と入力すると最後のキーを削除して "12"にしますと言っていますか? (それは与えられた正規表現のパターンに対して "12.1"が明らかに有効であるため、私にとって謎かもしれません)。 – McGarnagle

+0

この例では、テキストボックスに「12.12」がある場合、keypressイベントを使用してイベントを何も検証しないことが実証されています。 "12.1"文字を削除せずにテキストボックスを含むすべての内容を検証するイベントが必要です –

答えて

1

問題は、KeyPressイベントで、押されているキーがまだテキストボックスに追加されていないことです。既存のテキストに押されています文字を追加することができ、このような何か:

Dim TxtB As TextBox = CType(sender, TextBox) 
If (Char.IsDigit(e.KeyChar) OrElse e.KeyChar = "."c Then 
    Dim fullText As String = TxtB.Text & e.KeyChar 
    'Do validation with fullText 
End If 
+0

これはちょうど私が必要としていたものです、私はあなたの助け+ REPに感謝します –

1

は実際には、それよりも少し複雑だ - ユーザーは、例えば、バックスペースキーを押した場合はどう?代わりにTextChangedイベントを使用することをお勧めします。このイベントは、最後に押されたキーによってTextプロパティが更新された後に発生します。

関連する問題