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
ListView, evento "ItemSelectionChanged" e bloccaggio nuova selezione
mercoledì 25 luglio 2007 - 10.39
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
S4turno
Profilo
| Junior Member
75
messaggi | Data Invio:
mer 25 lug 2007 - 10:39
Ho una listView dove ogni volta che viene selezionato un item vengono caricate dei dati nella form. Questi dati sono modificabili, e nel caso siano modificati senza prima salvarli e si tenti di selezionare un nuovo item, appare una MessageBox (YesNoCancel) con la classica interrogazione sul da farsi. Nel caso venga selezionato Cancel, dovrei bloccare la nuova selezione e lasciar selezionato l'attuale.
Per fare questo uso l'evento "ItemSelectionChanged" della ListView, che viene scatenato ogni volta che c'è un cambio dello stato della selezione e quindi viene scatenato due volte ogni volta che selezione un nuovo oggetto: la prima volta per la deselezione del precedente, la seconda volta per la selezione del nuovo.
Allo scatenarsi dell'evento posso chiaramente sapere in quale dei due stati sono. Quindi se ho due items (A,B), e voglio passare da A a B (tenendo presente che se dall'evento "ItemSelectionChanged" forzo una nuova selezione, lo riscateno ricorsivamente), la procedura sarebbe:
ItemSelectionChanged - deselezione A: { nessuna azione }
ItemSelectionChanged - selezione B: { Se dati modificati forzo la selezione ad A
ItemSelectionChanged - deselezione B: { nessuna azione}
ItemSelectionChanged - seleziono A { nessuna azione }
}
Il problema è che quando seleziono A, dato che i dati sono nello stato modificato, viene nuovamente riforzata la selezione, innestando un ciclo che teoricamente dovrebbe essere infinito, mentre praticamente si ripete 4 volte (2 se seguo il codice con qualche break point). Sto cercando soluzioni facendo varie prove, come disassociare l'evento alla mia funzione quando seleziono B, oppure usare una variabile booleana per scegliere se forzare la selezione o meno, ma o alla fine del percorso il risultato è che nessun item è selezionato, oppure mi appare più volte la MessageBox (o entrambe le cose!).
Qualcuno si è mai trovato con un problema simile?
Spero di essere riuscito a spiegarmi...
Ciao
Ciciu
Profilo
| Senior Member
233
messaggi | Data Invio:
ven 27 lug 2007 - 12:32
Ciao.
Avrei un'idea da proporTi, magari è una fesseria, ma non è detto. Beh, comunque ci provo.
PotresTi mettere il Tuo dettaglio (ovvero tutti i campi editabili) in un panel.
PotresTi aggiungere una variabile booleana a livello di Form che faccia da semaforo : sfruttando l'evento Enter del panel dovresTi settarla a FALSE, in quanto non ci sono variazioni.
La variazione di un campo dovrebbe porla a TRUE.
L'evento Leave del panel potrebbe verificare lo stato della variabile e, se è a True, chiedere conferma delle variazioni.
Se ok, aggiorni l'Item della ListView. Se no, aggiorni i dati con quelli dell'item corrente. Se è cancel, metti il focus su un campo qualsiasi dei Tuoi, il che ti obbliga a stare nel panel.
Nel frattempo, la modifica di uno dei tuoi campi, dovrebbe anche disabilitare il Listview, altrimenti l'utente potrebbe comunque spostarsi....
Ciao - Fabio
Fabio G
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 !