VB.Net - TextBox, limitar a entrada só para números

Maio 2017


Dois exemplos para limitar a entrada só para números, em um textbox, levando em conta o separador decimal do PC host.

Exemplo n° 1

Esta é a maneira mais « simples » de limitar a digitação.
  • Abrir um novo projeto "Windows Forms"
  • No formulário, cole
    • Um textBox
    • Uma marca
    • Um botão

E cole este código no...
Public Class Form1 
Dim Sep As Char
Dim Número As Double

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Número = CDbl(TextBox1.Text)
Label1.Text = Número
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Detectar o separador decimal do aplicativo.
Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
TextBox1.Focus()
End Sub

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If Not (Char.IsNumber(e.KeyChar) Or e.KeyChar.Equals(Sep) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
End Sub
End Class

Exemplo n° 2

No entanto, eu acho que a solução n° 1 não é muito flexível para o usuário.

Na verdade, a entrada do separador decimal depende da configuração do PC host, isso poderia resultar, por exemplo, na entrada da vírgula do teclado alfanumérico, caso o aplicativo não tenha alterado o ponto do teclado decimal, para vírgula (se a vírgula for necessária).

L'avantage de cette deuxième solution : l'utilisateur peu taper au choix, un point ou une virgule, le code rectifie en fonction du PC.
Vantagem desta segunda solução: o usuário pode digitar como quiser um ponto ou uma vírgula, o código corrige, em função do PC.
  • Adicioanr um segundo formulário, com os mesmos componentes.
  • Cole o código no...

Public Class Form2 
Dim Sep As Char
Dim Número As Double

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Applique()
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Detectar o separador decimal do aplicativo.
Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
End Sub

Private Sub Data_KeyDown(ByVal sender As Object, ByVal As System.Windows.Forms.KeyEventArgs) Handles Data.KeyDown
If e.KeyCode = 13 Then
Applique()
End If
End Sub

Private Sub Data_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Data.TextChanged
If Data.Text = Sep Then
'se o separador decimal for digitado diretamente
Data.Text = "0" & Sep
Data.SelectionStart = Len(Data.Text)
ElseIf Not IsNumeric(Trim(Data.Text)) Then
Beep()
If Len(Data.Text) < 1 Then
Data.Text = ""
Else
Data.Text = Microsoft.VisualBasic.Left(Data.Text, Len(Data.Text) - 1)
Data.SelectionStart = Len(Data.Text)
End If
End If
End Sub
Sub Applique()
Dim DT As String
'Para adaptar à configuração do PC host.
DT = Replace(Data.Text, ".", Sep)
DT = Replace(DT, ",", Sep)
Label1.Text = CDbl(DT)
On Error Resume Next
Data.SelectionStart = 0
Data.SelectionLength = Len(Data.Text)
Data.Focus()
End Sub
End Class

Download

Você pode baixar um projeto, exemplo aqui (em francês)

Veja também

Artigo original publicado por . Tradução feita por pintuda. Última modificação: 13 de outubro de 2016 às 05:50 por ninha25.
Este documento, intitulado 'VB.Net - TextBox, limitar a entrada só para números', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.