Como limitar a digitação de números no TextBox

Agosto 2017

Dois exemplos para limitar a digitação de números, no Texbox, considerando o separador decimal do PC hóspede.


Exemplo 1

A maneira mais simples para limitar a digitação é a seguinte:


Abra um novo projeto Windows Forms ,e na forma, cole um textBox, um label, um botão e cole este código dentro.
Public Class Form1 
Dim Sep As Char
Dim Nombre 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 de aplicação.
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 2

A solução 1 não é muitoflexível para o usuário, pois a digitação decimal é condicionada pela configuração do PC hóspede, o que poderia provocar, por exemplo, a digitação ada vírgula do teclado numérico se a aplicação não mudou o ponto do teclado decimal em vírgula (se for necessário uma vírgula). A vantagem desta segunda solução reside nisso: o usuário pode digitar escolhendo um ponto ou uma vírgula, o código retifica em função do PC.

Como acrescentar uma segunda forma com os mesmos componentes

Cole o código dentro...
Public Class Form2 
Dim Sep As Char
Dim Nombre 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 separados decimal do aplicativo.
Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
End Sub

Private Sub Data_KeyDown(ByVal sender As Object, ByVal e 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 é digitar 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
'Pour adapter à la configuration du PC hôte.
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

Como fazer o download

Você pode baixar um projeto exemplo aqui
Foto: © Pixabay.

Veja também

Publicado por ninha25. Última modificação: 15 de dezembro de 2016 às 07:57 por ninha25.
Este documento, intitulado 'Como limitar a digitação de números no TextBox', 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.