2012-06-28 2 views
1

Мне интересно, как я могу получить текстовое поле, чтобы принимать только цифры и точки. как:как разрешать только цифры и точки в текстовом поле vb.net

123,45 или 115 или 218,16978

и т.д ..

я Allready получил следующий код:

Private Sub TxtHStof_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtHStof.KeyPress 
    e.Handled = Not Char.IsDigit(e.KeyChar) 

End Sub 

Но это позволяет только цифры без точек. Как я могу изменить код, чтобы он мог также использовать точки, но ничего больше. (Копия паста не имеет значения, так как это не будет проблемой)

Большое спасибо

ответ

7
e.Handled = Not (Char.IsDigit(e.KeyChar) OR e.KeyChar=".") 
+0

отлично работает ти – Christoph

+0

задняя клавиша не работает! как добавить его в свой код? –

+1

@OsamaGadour: чтобы позволить обратному символу работать, вам нужно добавить условное выражение «Or Asc (e.KeyChar) = 8»). 8 - код ascii для символа обратного пробела. –

0

Исходя из C# и не VB, я принимаю удар на это, но это будет работать:

e.Handled = Not (Char.IsDigit(e.KeyChar) AndAlso e.KeyChar.Equals('.')) 
-1
Dim e As System.Windows.Forms.KeyPressEventArgs 

    If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 57 Then 
     e.Handled = True 
    Else 
     e.Handled = False 
    End If 
1

С помощью этого кода вы можете использовать ',' (Европа) и '.' (Американских) десятичных знаков.

Private Sub TGewicht_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TGewicht.KeyPress 
    e.Handled = Not (Char.IsDigit(e.KeyChar) Or Asc(e.KeyChar) = 8 Or ((e.KeyChar = "." Or e.KeyChar = ",") And (sender.Text.IndexOf(".") = -1 And sender.Text.IndexOf(",") = -1))) 
End Sub 
1

Вставить функцию вывода ФОРМЕ

Public Sub OnlyNumber(Ct As TextBox, MaxLength As Integer) 
    Ct.MaxLength = MaxLength 
    AddHandler Ct.KeyPress, AddressOf ValidarTeclaNumeros 
End Sub 

Private Sub ValidarTeclaNumeros(sender As Object, e As KeyPressEventArgs) 
    Dim Ct As TextBox 
    Ct = sender 
    If [Char].IsDigit(e.KeyChar) OrElse [Char].IsControl(e.KeyChar) Then 
     'ok 
     'e.Handled = True 
    ElseIf [Char].IsPunctuation(e.KeyChar) Then 
     If (Ct.Text.Contains(",") OrElse Ct.Text.Contains(".")) Then 
      e.Handled = True 
     End If 


    Else 
     e.Handled = True 
    End If 


End Sub 

В виде нагрузки добавить код для управления только численная (и только одна запятая или док)

OnlyNumber(txtControl, 10) 
1

Я начал с главным тот же вопрос, но я действительно заботился о возможности вставки. Во время поиска в Интернете, как это сделать, я обнаружил, что я действительно должен обрабатывать:

  1. Периоды или запятые в качестве десятичного индикатора в зависимости от того, как настроена ваша ОС.
  2. Только разрешение клавиш, которые соответствуют шаблону, при этом позволяя управлять символами курсора, как стрелки и обратные пространства.
  3. Только разрешение пасты в TextBox, которые соответствуют шаблону. Я выбрал это так, чтобы при вставке код обрабатывал вставленный текст так, как будто текст был введен в ключ, поэтому вставка «a1b.c2d, e3f.g4h, i5j» в TextBox будет отображаться как «1.2345», если периоды являются вашим десятичным индикатором и «12,345», если запятые - ваш десятичный индикатор.

Я попробовал MaskedTextBox и действительно не понравился, так как он обеспечил расположение десятичной точки, где я действительно просто хотел иметь возможность свободно заполнять любые числовые. Возможно, я немного переоценил использование RegEx для соответствия шаблону, но теперь я должен многократно использовать этот код в любом месте.

Public Class frmMain 

    Dim RegexValidator As System.Text.RegularExpressions.Regex 
    Dim FormLoaded As Boolean = False 

    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Dim RegexDecimalPattern As String = Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator 
     RegexDecimalPattern = IIf(RegexDecimalPattern = ".", "\.", RegexDecimalPattern) 
     RegexValidator = New System.Text.RegularExpressions.Regex("^\d*" & RegexDecimalPattern & "?\d*$", System.Text.RegularExpressions.RegexOptions.IgnoreCase) 
     FormLoaded = True 
    End Sub 

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress 
     ' Code below is based on 
     ' http://www.vbforums.com/showthread.php?626378-how-to-validate-textbox-allows-only-numeric-and-decimal-in-vb-net 
     ' but was modified to be based on Regex patterns. 
     ' 
     ' Note that: 
     ' KeyPress event validation covers data entry as it is being typed. 
     ' TextChanged event validation covers data entry by cut/pasting. 
     If Char.IsControl(e.KeyChar) Then 
      'Allow all control characters. 
     Else 
      Dim Text = Me.TextBox1.Text 
      Dim SelectionStart = Me.TextBox1.SelectionStart 
      Dim SelectionLength = Me.TextBox1.SelectionLength 
      Text = Text.Substring(0, SelectionStart) & e.KeyChar & Text.Substring(SelectionStart + SelectionLength) 
      If Not RegexValidator.IsMatch(Text) Then e.Handled = True 
     End If 
    End Sub 

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged 
     ' If default text is used in a textbox, a TextChanged event occurs before 
     ' RegexValidator is initialized during the Form Load, so we need to check. 
     If FormLoaded Then 
      ' Note that: 
      ' KeyPress event validation covers data entry as it is being typed. 
      ' TextChanged event validation covers data entry by cut/pasting. 
      Dim Text = Me.TextBox1.Text 
      Dim ValidatedText As String = "" 
      Dim KeyChar As Char 
      For Each KeyChar In Text 
       If RegexValidator.IsMatch(ValidatedText + KeyChar) Then ValidatedText += KeyChar 
      Next 
      If (ValidatedText.Length > 0) And (TextBox1.Text <> ValidatedText) Then 
       Me.TextBox1.Text = ValidatedText 
       Me.TextBox1.SelectionStart += ValidatedText.Length 
      End If 
     End If 
    End Sub 
End Class 
0
Private Sub TextBox2_KeyPress(
    ByVal sender As Object, 
    ByVal e As System.Windows.Forms.KeyPressEventArgs 
) Handles TextBox2.KeyPress 

    e.Handled = Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = "." Or Asc(e.KeyChar) = 8) 
End Sub 
+0

Даже когда ваше сообщение отвечает на вопрос OP. Предоставьте не только фрагмент, который работает. Но объясните, что происходит, почему он делает то, что должен и т. Д. – Lino

0
'****To Allow only Numbers with Decimal and BACKSPACE enabled**** 
    If Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = ".") And Not Char.IsControl(e.KeyChar) Then 
     e.Handled = True 
    End If 
Смежные вопросы