domenica 9 gennaio 2011

textbox solo numerica in VB.Net e C#

Il frammento di codice qui di seguito, illustra una tenica, in ambiente windows application, di come rendere un controllo textbox, solo numerico e quindi l'impossibilità di inserire lettere o altri caratteri il tutto tranne VB.Net e C#.

Nell'evento Keypress, viene effettuato un controllo sul codice del carattere, se è diverso dal tasto back (quello di cancellazione) e non è un numerico, imposta la proprietà Handled a true, in modo che il carattere non viene inserito.


VB.Net



Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress



If (e.KeyChar <> Microsoft.VisualBasic.ChrW(Keys.Back)) And (Char.IsNumber(e.KeyChar.ToString(), 0) = False) Then



e.Handled = True



End If



End Sub



C#



private void textBox1_KeyPress(object sender, KeyPressEventArgs e)



{



if ((e.KeyChar != (char)Keys.Back) && (!char.IsNumber(e.KeyChar.ToString(), 0)))



e.Handled = true;



}


8 commenti:

Anonimo ha detto...

Navigando ho letto codici di 200 righe per permettere l'inserimento di soli numeri, alcuni nemmeno accettano il backspace questo è perfetto.
Complimenti

WebMaster ha detto...
Questo commento è stato eliminato dall'autore.
Emanuele ha detto...

Grazie per l'apprezzamento.
Continua a seguirmi

Anonimo ha detto...

Salve vorrei riuscire a inserire il " - " (45)
Ma non so come fare la stringa "If (e.KeyChar ........" blocca e mi si inseriscono le lettere che non voglio !

Vi ringrazio per ogni consiglio, non so' come uscirne dalla logica.
Dim tempC As Integer
Dim KeyAscii As Short = Asc(e.KeyChar)
If (e.KeyChar <> Microsoft.VisualBasic.ChrW(Keys.Back)) And (Char.IsNumber(e.KeyChar.ToString(), 0) = False) Then
e.Handled = True
End If

If e.KeyChar = Char.ConvertFromUtf32(13) Then
e.Handled = True
End If


If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 44 And KeyAscii <> 45 And KeyAscii <> 8 Then
KeyAscii = 0
ElseIf KeyAscii > 57 Then
KeyAscii = 0
End If
If (KeyAscii = 45) And txttemp.Text.IndexOf("-") > 0 Then
e.Handled = True
End If

Luciano

Anonimo ha detto...

Pardon le lettere sono escluse, ma mi serve il meno, per inserire esempio una temperatura di -5 ° oppure un 35 esempio.

Luciano

Emanuele Mattei ha detto...

Ciao Anonimo,
prova con questo codice per inserire anche il meno.


If (e.KeyChar <> Microsoft.VisualBasic.ChrW(Keys.Back)) And (Char.IsNumber(e.KeyChar.ToString(), 0) = False) And (e.KeyChar <> "-") Then

e.Handled = True

End If

Luciano ha detto...

Preg. Emanuele Mattei, colgo l'occasione di porgerti
Un cordiale Augurio di un felice 2019 a noi tutti di questa magnifica piazza.-
Posto il codice con la "TUA MODIFICA" - compilato con MSVStudio 2017 . VB.NET Linguaggio.
Il tutto funziona perfettamente,.
==POSSO INSERIRE SOLO NUMERI NEGATIVI & NUMERI, MA NON I CARATTERI !
Questo e' quello che mi serve posto il codice anche per chi ne avesse bisogno e lo condivido con tutti !
--------------------------------------------------------------------------

Public Sub TxttempC_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txttemp.KeyPress
Dim tempC As Integer
Dim KeyAscii As Short = Asc(e.KeyChar)
If (e.KeyChar <> Microsoft.VisualBasic.ChrW(Keys.Back)) And (Char.IsNumber(e.KeyChar.ToString(), 0) = False) And (e.KeyChar <> "-") Then
e.Handled = True
End If
'.. modificato da https://www.blogger.com/, Gentile Emanuele Mattei. !

If (tempC > maxTemp) Then
MsgBox("Temp.Range -10-80", MsgBoxStyle.Exclamation, "RANGE Temp !")
txttemp.Clear()
txttemp.Focus()
e.Handled = True
End If
If (tempC < minTemp) Then
MsgBox("Temp.Range -10-80", MsgBoxStyle.Exclamation, "RANGE Temp !")
txttemp.Clear()
txttemp.Focus()
e.Handled = True
End If
End Sub
=============================================
Il maxTemp e il minTemp sono inserite subito dopo il Class iniziale, come Const(costanti)
Public Class pincopallino ..........
Const minTemp As Integer = -10
Const maxTemp As Integer = 80

Mettendoli come costanti se , volessi modificare il range, posso farlo senza andare a fare modifiche nel codice. Sono un autodidatta che ha imparato da solo, ma che non pretende di andare oltre la logica, ma almeno quella logica di base credo sia corretta.
Colgo l'occasione per ringraziarti e un sentito grazie per tutto questo.
Almeno condivido tutto quello che può essere utile anche con le altre persone.

Luciano ! (AL)

Emanuele Mattei ha detto...

Ciao Luciano,
ma tu cosa vuoi fare? perchè se è solo per il trattino (meno) - il codice che ho postato va bene, altrimenti fammi capire bene.
Grazie Emanuele