Filtrare testo di input di un textbox

sabato 01 settembre 2007 - 18.26

Giovanni_3478 Profilo | Senior Member

Ciao

Ho un textbox e vorrei che
si potessero inserire solo i numeri (0123456789) e i caratteri . e , .
senza che il textbox presenti nessuna maschera.

Bisogna usare un maskedtextbox?
Ma come bisogna settare la proprietà mask per ottenere il risultato di cui sopra?

O altrimenti come pocedere?

bostongeorge985 Profilo | Newbie

Ciao,

bisogna solo inserire il seguente codice nell'evento keypress della tua textbox:

If Not Char.IsNumber(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then
e.Handled = True
End If

P.S. se risolvi il problema clicca su accetta risposta

Giovanni_3478 Profilo | Senior Member

Sì funziona.

Volendo permettere però il carattere virgola quale metodo devo usare?

alextyx Profilo | Expert

Dovresti aggiungere un 'And Not Char...' anche per la virgola o il punto decimale.
Purtroppo, se ho capito quello che vuoi fare, la cosa non è semplice. Ad esempio, vuoi permettere che possano essere inserite due virgole? Oppure, che ci si possano incollare parti di testo a piacere (l'evento KeyPress non viene scatenato dal 'copia incolla' con un click del mouse e comunque coinvolge ben più di un carattere, quindi dovresti usare l'Undo)?
Il creare una textbox che impedisca a qualcuno di scrivere qualcosa che non sia un numero ben formattato, è una bella impresa. Il consiglio è di provare con MaskedEdit, altrimenti l'impegno può diventare importante!

bostongeorge985 Profilo | Newbie

dopo il codice che ti ho dato inserisci questo

If Char.IsPunctuation(e.KeyChar) AndAlso Not CType(sender, TextBox).Text.Contains(",") Then
e.Handled = True
CType(sender, TextBox).Text += ","
CType(sender, TextBox).SelectionStart = CType(sender, TextBox).Text.Trim.Length
End If

alextyx Profilo | Expert

>dopo il codice che ti ho dato inserisci questo
>
>If Char.IsPunctuation(e.KeyChar) AndAlso Not CType(sender, TextBox).Text.Contains(",")
>Then
> e.Handled = True
> CType(sender, TextBox).Text += ","
>CType(sender, TextBox).SelectionStart = CType(sender, TextBox).Text.Trim.Length
>End If
>
>

Sono dei buoni scampoli di codice, per carità, ma il problema non è così semplice. Puoi tornare indietro con le freccette e inserire la virgola dove te l'eri dimenticata e quindi il selectionstart che ti ributta a fine testo non va bene. Inoltre rimane aperto il problema del copia-incolla.
Insomma, la cosa non è banalissima e richiede qualche riga di codice in più, ecco perchè, forse, il maskededit potrebbe essere da prendere in considerazione. Oppure c'è da perdere un po' di tempo anche per pensare tutte le varie circostanze che devono essere previste.
Ci saranno separatori delle migliaia (da noi i punti, in USA le virgole)? Eccetera.....

Giovanni_3478 Profilo | Senior Member

...sì il codice inizialmente assolve al suo scopo
ma poi ha quel difetto che ha detto alextyx .......
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5