Domanda

Qualcuno sa perché Microsoft non fornisce una casella di testo numerica con il suo framework .NET, ad es.una casella di testo che garantisca che i caratteri immessi siano sempre un numero valido?È qualcosa che viene comunemente utilizzato in applicazioni di diverso tipo e in effetti qualcosa che la maggior parte delle librerie GUI (beh, quelle che conosco) forniscono in qualche modo.Mentre non lo è Quello difficile scriverne uno tuo, non è nemmeno banale.

Quindi, sono interessato a scoprire se qualcuno può razionalizzare questa omissione.

modificare:Grazie per i suggerimentiMentre le caselle di testo mascherate e i numeri su-giù hanno il loro posto;Sono interessato a un controllo che assomiglia a una casella di testo ma esegue automaticamente la convalida alla pressione di un tasto che l'input corrisponde a un numero valido.Nella mia (certamente limitata) esperienza, questo è qualcosa che viene utilizzato parecchio (non sempre vogliamo i vincoli statici imposti dalle caselle di testo mascherate, così come non sempre vogliamo i controlli su-giù laterali) .

Ci sono molte implementazioni con vari gradi di qualità in rete e in effetti ce n'è anche un esempio su MSDN.

modifica2:Grazie ragazzi, quindi sembra che il numerico su-giù sia il controllo .NET da utilizzare solo per l'input numerico (e il motivo per cui in realtà non abbiamo un controllo esplicito della casella di testo numerico).Sarebbe stato fantastico se impedisse automaticamente l'immissione di caratteri non numerici (alla pressione di un tasto, all'incollamento, ecc.) Ma immagino che sia abbastanza buono da eseguire la convalida quando il controllo perde il focus.E si potrebbe fare la convalida premendo un tasto o incollando se si fosse davvero appassionati...

È stato utile?

Soluzione

Secondo il consiglio di Garry Shutlers di utilizzare NumericUpDown.Potrebbero non piacerti i controlli su-giù, ma quello È l'aspetto standard di un controllo di immissione numerica in Windows e dovresti pensarci due volte prima di utilizzare un aspetto diverso.

Se finisci per codificare la tua implementazione (o trovarne una sul web), ci sono alcune insidie ​​a cui prestare attenzione.Ricorda che ci sono molti modi in cui un valore può entrare in un controllo oltre alla pressione dei tasti.Quello nel tuo collegamento su MSDN non sovrascrive nemmeno l'incollatura, quindi puoi facilmente ctrl-V una stringa non numerica nel controllo.

Altri suggerimenti

Potresti usare a MaskedTextBox

C'è la NumericoSuGiù controllo creato appositamente per l'immissione di numeri e che può essere utilizzato come una casella di testo.

A partire da WinForms 2.0, hai un MaskedTextBox.Puoi impostare la maschera come preferisci, ad es.per i numeri usa la maschera tutti 0.

Alcuni controlli .NET Framework stranamente non espongono tutte le funzionalità del controllo Windows sottostante che racchiudono.In questo caso, per qualche motivo il ES_NUMBER lo stile non è stato implementato.

Potresti eventualmente gestire l'evento HandleCreated (o sovrascrivere OnHandleCreated, poiché TextBox non è sigillato) e chiamare Imposta finestra lunga per impostare il ES_NUMBER style sul controllo Modifica sottostante. ES_NUMBER è definito come 0x2000 in WinUser.h.

Puoi anche derivare la classe TextBox e acquisire l'evento della tastiera e assicurarti che non venga scritto altro che numeri.

Se fosse una pagina Web, lo stesso sarebbe stato fatto con una casella di testo html utilizzando Javascript.

Microsoft lascia a terze parti il ​​compito di colmare le lacune relative ai controlli mancanti nella casella degli strumenti.Immagino che tempo e costi siano presenti nella loro logica.

In questo caso, però, penso che il FilteredTextBox fornisce la funzionalità che descrivi.

Basato sulla seconda modifica:

IL Domande frequenti su Windows Form ti spiega come limitare i caratteri in una casella di testo in questione 26.12:

26.12 Come posso limitare i caratteri che la mia casella di testo può accettare?

Puoi gestire l'evento KeyPress della casella di testo e se il carattere passato non è accettabile, contrassegna l'argomento events come se mostrasse che il carattere è stato gestito.Di seguito è riportato un TextBox derivato che accetta solo cifre (e caratteri di controllo come backspace, ...).Anche se lo snippet utilizza una casella di testo derivata, non è necessario poiché puoi semplicemente aggiungere il gestore al modulo principale.

Consulta le domande frequenti per l'esempio di codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top