Newsgroup: it.comp.lang.visual-basic
Titolo: ListBox

Su un form ho diverse listbox, e quando l'untente zompa da una all'altra,
alla fine se le ritrova che tutte hanno intem selezionato e non si capisce
piu una cippa :(
Vorrei fare in modo che quando si seleziona un item di una listbox, sulle
altre listbox non vi siano piu item selezionati.
Ma se imposto da codice .selected=false mi parte levento clik che non è
desiderato.
C'è un modo per ovviare? A parte il list.clear e conseguente riempimento che
faccio già, ma non è il massimo.
--
Greg

 ha scritto

non puoi semplicemente cambiare il backcolor di quella che man mano e'
attiva, mettendogli vbyellow o simili ?
direi che se le altre le metti enabled=false il testo si ingrigisce ma la
barra di selezione rimane bella colorata.
ciao, a.

 desiderato.
C'è un sistema non molto bello esteticamente, ma funzionante, anche
detto "SporcoTrucco®" :-).
Usa un flag globale, settalo nella LostFocus e controllalo nella Click.
Esempio...
Nel form, generale, dichiarazioni, metti un
        Dim blnUscendo As Boolean
Nella click:
        Private Sub List1_Click()
            If blnUscendo Then Exit Sub
            Debug.Print "ahi !"
        End Sub
e nella LostFocus:
        Private Sub List2_LostFocus()
            blnUscendo = True
            List2.ListIndex = -1
            blnUscendo = False
        End Sub
quando, nella LostFocus, deselezioni, viene sempre scatenata
la Click, ma esce immediatamente perché trova il flag
settato, e l'esecuzione torna alla Lost, dove il flag viene rimesso
a posto.
Si potrebbe anche settare il flag a False solo nella GotFocus
di ogni ListBox, con qualche piccola differenza nel funzionamento.
Bye, G.

 Click. Esempio...
Grazie Paperino, mi hai dato la dritta giusta.
Poi visto che funzionava, l'ho modificata cosi:
    Private Sub List1_LostFocus()
            'blnUscendo = True
            List1.ListIndex = -1
            'blnUscendo = False
        End Sub
        Private Sub List2_LostFocus()
            'blnUscendo = True
            List2.ListIndex = -1
            'blnUscendo = False
        End Sub
Praticamente basta solo impostare listindex a -1 per non scatenare l'evento
clik senza bisogno del flag globale.
Ciao
--
Greg

 l'evento clik senza bisogno del flag globale.
A me non funziona, per questo ho aggiunto il flag...
=8-?
L'unica ipotesi che vedo possibile, è che io uso VB5 (SP3)
che magari si comporta diversamente.
Ora però non ho voglia né tempo di andare a guglare :-)
Bye, G.

 L'unica ipotesi che vedo possibile, è che io uso VB5 (SP3)
Può essere, da me va ma sono appena passato a vb6 + SP?
--
Greg

 Poi visto che funzionava, l'ho modificata cosi:
Purtroppo ho controllato meglio oggi, e la riga di codice
List1.ListIndex = -1
scatena comunque l'evento click :(
come pure List1.Selected(x) = false
Mi sa che bisognerà proprio ricorrere allo "sporco trucco"
--
Greg

 Mi sa che bisognerà proprio ricorrere allo "sporco trucco"
Risolto, e dovrebbe funzionare pure in vb5
Private Sub List1_LostFocus()
            List1.ListIndex = -1
End Sub
Private Sub List1_Click()
     If List1.ListIndex = -1 then  exit sub
    codice
End Sub
ciao
--
Greg

 End Sub
Bella, davvero :-).
Bye, G.

 Mi sa che bisognerà proprio ricorrere allo "sporco trucco"
io continuo a non capire l'impostazione iniziale.
tenderei a ragionare su quella.
hai varie lb. cosa fanno, e l'utente cosa deve farci?
ciao, a.

 ciao, a.
Dunque ho una form dove si fanno una serie di ricerche sugli ordini emessi.
Parte alta del form c'è una grid che resituisce gli ordini trovati.
Parte bassa:
1 LB con gli anni per cui vi sono ordini - 9 item per adesso
2 LB reparti che hanno richiesto emissioni di ordini - 20 item
3 LB  tipologia di ordini - 5 item
4 LB ditte che hanno ricevuto ordini - 300 item
Ogni volta che si clikka sulle LB 2,3,4 vengono restuiti nella griglia gli 
ordini per per tipo/reparto/ditta per l'anno selezionato nella LB 1
Lo scopo era di fare in modo che solo la listbox appena cliccata abbia il 
suo intem colorato di blu, e che quella eventualmente cliccata in precedenza 
imposti il suo item a backcolor bianco.
Altrimenti, dopo poco, hanno tutte un item slezionato, ed è facile 
dimenticarsi cosa si aveva selezionato.
ciao
greg

 ha scritto

quindi non ti serve disabilitare le altre, ma evidenziare l'attiva.
dai tempi archeologici (cit.) di clipper in casi simili io farei (anzi,
faccio) qc tipo:
    lb_gotfocus
        lb.backcolor=vbyellow ' o hilight
    lb_lostfocus
        lb.backcolor=vbwhite ' o window_background
adesso sono di corsa, ma direi che con un flag o ragionando sui vari
lb_click riesci a mantenere l'evidenziazione anche se perdi il focus, p.e.
cliccando sulla griglia.
se le lb le hai in matrice, in questo caso semplifichi molto.
in ogni caso non ti vai a incasinare sui listindex. anche perche' se uno
vuole rivedere una scelta precedente, se ogni volta gli tiri via la vecchia
selezione p.e. in lb4 e deve tornare a scegliere fra 300 item, ti pensa
molto senz'altro :)
ciao, a.

 vuole rivedere una scelta precedente
riclicca! che ci vuole?
ciao
greg

 riclicca! che ci vuole?
tu non fai mai data entry, vero ? io si', e pure parecchio..
ciao, a.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 tu non fai mai data entry, vero ? io si', e pure parecchio..
Si certo, ma questa č una form di ricerca
ciao
greg

 mantenga ancora l'aspetto di "cliccata"
ripeto: con questa logica, se ho capito cosa intendi, non dovrebbe proprio
vedersi. quelle nattive o le metti backcolor = command_face o le nascondi
proprio. gli altri, anzi gia' il backcolor, sono escamotage, che per di
piu' ti appesantiscono abbastanza il codice.


 proprio vedersi. quelle nattive o le metti backcolor = command_face o
Andrea, ma cosa hai oggi?
Stiamo dicendo che il problema era di settare il backcolor di un singolo
intem della listbox. E non dell'intera listbox.
Tu sai come settare il colore del singolo item slezionato, ossia da blu a
bianco, quando la listbox perde il focus?
Mo vedo di mandarti una foto, che vale sempre più di mille parole :)
--
Greg

 ha scritto nel messaggio
news:dla04e$vte$1...@domitilla.aioe.org...

Scusate se mi intrometto nel vostro scambio di idee...
Avete considerato l'ipotesi di utilizzare un listview in modalità report al
posto di un semplice listbox?
Esso ha la possibilità di nascondere la selezione quando il controllo perde il
focus (proprietà HideSelection=True).
Oppure può essere comunque comodo settare HideSelection=False, tanto l'item
selezionato in un listview senza il focus ha un backcolor diverso (grigio
anziché blu).
My 2 cents
Raf

 diverso (grigio anziché blu).
E no! L'item deve essere dello stesso colore degli altri.
--
Greg

 My 2 cents
l'idea non e' male, ma (common controls a parte, che se uno proprio non
deve, imho e' meglio lasciarli perdere) lascia il form sporco. 3 listview
settate a backcolor=window_background si vedono comunque.
avete mai guardato bene i vecchi db interfaccia carattere, vecchie anagrafi
ecc.?
il campo attivo in genere e' -- come dicono le mie colleghe -- illuminato.
l'utente vede quello, al resto non bada.
se un problema a valle crea casino, forse non e' male ripensarlo a monte...
my 2 eurocents :)
ciao, a.

 Mo vedo di mandarti una foto, che vale sempre più di mille parole :)
rispedita schermata, con due vbp. uno in cui si ingrigiscono, uno in cui si
vede solo quella attivata dal combo. tutti e due mi sembrano, per usare la
tua definizione, piu' eleganti. per usare la mia, molto piu' puliti.
ciao, a.

 rispedita schermata, con due vbp. uno in cui si ingrigiscono
Si ok, ma non è lo stile standard che si vede in giro, e non è quello che
volevo fare.
Te l'ho rimandata, modificata , adesso fa quello che volevo io, ed è piu
corta di 12 righe :)
ciao
greg

 E no! L'item deve essere dello stesso colore degli altri.
Perfetto, allora per le tue esigenze HideSelection = True!
Ciao
Raf

 ciao, a.
Ciao
Raf

 Ecco, su questo sono decisamente d'accordo.
pfiuuu. almeno questo :)
ciao, a.

 ciao, a.
Raf

 corta di 12 righe :)
non e' piu' arrivata. sono curiosissssimo di vedere come sei riuscito ad
accorciare di 12 righe un codice che, linee fake comprese, era sulle 18 :)
ciao, a.