Problema MaskedTextBox

giovedì 30 novembre 2006 - 12.43

man27 Profilo | Newbie

Buongiorno a tutti, sto cercando di risolvere un problema che sembra facile ma in realtà non riesco ad uscirne.Mi spiego, ho una procedura che dato un datatable contentene dati anagrafici esegue una select in base a quello che l'utente mi inserisce nel controllo MaskedTextBox, ogni volta che il risultato della select è maggiore di zero vado ad inserire nel controllo MaskedTextBox il primo datarow estratto, selezionando quindi il testo meno quello inserito dall'utente.

Questa procedura viene eseguita ogni volta che viene chiamato l'evento MaskedTextBox__TextChanged.

Ora il problema sta proprio nella selezione del testo, in quanto il testo non viene selezionato sebbene vengano impostati correttamente sia selectionStart che selectionLength

Se non inserisco il testo a runtime il tutto funziona ma se modifico a runtime il testo della MaskedTextBox la selezione non viene effettuata.
Da precisare inoltre che il testo inserito è conforme con il tipo di dati impostato per la maschera.

Spero in un aiuto.


lucios Profilo | Newbie

Ma setti il focus sulla MaskedEditBox ? Mi sembra che con le caselle di testo normali vada fatto...

Ciao

man27 Profilo | Newbie

si il focus viene settato, secondo me il problema nasce dall'assegnazione di un valore al MaskedTextBox, in quanto come è giusto che sia fa scattare l'evento textchanged, quindi viene riavviata la procedura ed eseguita. Alla fine di essa come è lecito pensare riprende quella lasciata in sospeso, e setta i valori selectionStart e selectionLenght. A debug i valori sono corretti ed in effetti il comportamento della procedura è corretto, però quando esce non viene eseguita nessuna selezione e il cursore si muove sull'ultimo carattere come se tenesse in considerazione solo i valori del selectionStart e selectionLengt impostati in precedenza quando cioè ho settato il valore della MaskedTextBox.

Per intenderci una cosa simile:

data.focus
data.Text = r(0).Item("DATANASCITA")
data.focus
data.SelectionStart = Len(T.Replace("/", "").TrimEnd(" "))
data.SelectionLength = Len(Convert.ToDateTime(r(0).Item("DATANASCITA")).ToShortDateString) - ((Len(T.Replace("/", "").TrimEnd(" ")) + 2))

se tolgo l'assegnazione tutto funziona correttamente ma se assegno il valore come sopra la selezione non funziona.
???

man27 Profilo | Newbie

Ho risolto il problema è dato dalla proprietà mask, in effetti se non si utilizza nessuna mask la selezione come descritto sopra funziona, se invece la si utilizza essa blocca la selezione del testo, nel mio caso era una maschera per date del tipo:

00/00/0000

impostando la maschera uguale a "" prima di inserire il valore a runtime e reimpostandola subito dopo il problema scompare.
Naturalmente perchè questo sia vero bisogna impostare la proprietà TaskMaskFormat a ExcludePromptAndLiterals.

Ora è un metodo sporco per risolvere però nel mio caso è stata l'unica soluzione.

Ringrazio per la collaborazione.
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