Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Txtbox per valori float
mercoledì 06 agosto 2003 - 11.48
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
giulio_santorini
Profilo
| Newbie
4
messaggi | Data Invio:
mer 6 ago 2003 - 11:48
ciao
vorrei avere un textbox che contenga solo valori numerici con un numero definito di decimali.
In c# .NET non c'è una proprietà per fare ciò?
Potreste consigliarmi un tutorial o un HOWTO?
Grazie!
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 6 ago 2003 - 12:21
Ciao Giulio e Benvenuto,
in effetti di base non esiste niente di simile.
Prova all'interno dell'evento OnKeyPress di una Textbox ad incollare il seguente codice:
int max_decimals=3;
if( ( (e.KeyChar < '0') || (e.KeyChar > '9') ) && (e.KeyChar!=8) && (e.KeyChar!=46))
e.Handled = true;
else
{
if (e.KeyChar==46)
{
if (textBox1.Text.IndexOf(".")!=-1)
e.Handled=true;
}
else if (e.KeyChar==8)
{
}
else
{
int pos=textBox1.Text.IndexOf(".");
if (pos!=-1)
{
if (textBox1.Text.Length-pos>max_decimals)
e.Handled=true;
}
}
}
In questo modo in quella textbox potrai solo scrivere numeri, una virgola sottoforma di punto "." e il numero di decimali specificato dalla variabile max_decimals!
Provala e fammi sapere.
Ciao
David De Giacomi
giulio_santorini
Profilo
| Newbie
4
messaggi | Data Invio:
mer 6 ago 2003 - 15:26
ciao David,
grazie del benvenuto e grazie della tua proposta di soluzione!
Avevo visto qualcosa di simile, ma non avevo avuto lo spunto di gestire lì oltre il filtro anche la formattazione!
Ho fatto 1 piccola modifica per l'inserimento di un numero di caratteri interi. E un controllo quando lascio il textbox per vedere se il valore è dentro i limiti stabiliti.
Niente di particolare ma li riporto lo stesso:
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
int max_decimals = 3;
int max_int = 3;
// se il carattere non è un numero
// eliminalo
if( ( (e.KeyChar < '0') || (e.KeyChar > '9') ) && (e.KeyChar!=8) && (e.KeyChar!=44))
{
e.Handled = true;
}
// altrimenti
else
{
// se è un separatore di decimali...
if (e.KeyChar==44)
{
// se è già inserito evito il nuovo inserimento
if (textBox1.Text.IndexOf(",") != -1)
e.Handled=true;
}
// carattere backspace
else if (e.KeyChar==8)
{
}
// caratteri generici
else
{
// memorizzo lunghezza del testo
int len = textBox1.Text.Length;
// memorizzo posizione del separatore decimale
int pos = textBox1.Text.IndexOf(",");
// se il separatore decimale non esiste
if (pos == -1)
{
// se la lunghezza della stringa supera il limite
// annullo l'inserimento del nuovo carattere
if (len >= max_int)
{
e.Handled = true;
}
}
// altrimenti se il separatore decimale esiste
else
{
// se la posizione supera il terzo carattere la annullo
if (pos > max_int)
{
e.Handled = true;
}
}
if (pos != -1)
{
if (textBox1.Text.Length - pos >max_decimals)
e.Handled=true;
}
}
}
}
private void textBox1_Leave(object sender, System.EventArgs e)
{
if(float.Parse(this.textBox1.Text) > 100.008f)
{
MessageBox.Show("Il valore è maggiore del limite!");
this.textBox1.Focus();
}
}
In pratica funziona, e anche il piccolo concetto che stà dietro al controllo che ho aggiunto dovrebbe filare.
L'unica cosa è l'estetica :-)
Potrò costruirò un metodo (purtroppo di questi maledetti textbox statici ne ho davvero tantissimi da gestire) per il filtro input... ma per il limite devo fare un lungo taglia incolla. :-0
Peccato non ci siano soluzioni più eleganti! :-\
Diceci delle regular expression. Io qualcosa ho scritto per gestirne una che fà a caso mio, ma poi non saprei come integrarla! Nel keypress se caricavo il valore attuale del textbox mi sembra non avevo un valore aggiornato... ma a parte questo si tratta di gestire nuovamente gli eventi di ogni controllo.
Mah per ora penso lascerò cosi! :-)
Grazie!
giulio_santorini
Profilo
| Newbie
4
messaggi | Data Invio:
mer 6 ago 2003 - 18:03
credo che il mio "add on" per limitare anche i numeri interi a 3 caratteri non funziona bene! :-)
Adesso lo ho guardato con attenzione e me ne sono accorto!
Secondo tè è possibile controllare il numero sia di decimali che di interi? Si sà solo dove è la virgola non dove è stato inserito il carattere quindi come faccio a sapere se il carattere supera o meno il limite dei caratteri (decimali o interi)?
Grazie del tuo parere!!!
Torna su
Stanze Forum
Elenco Threads
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 !