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

Ho un ListBox contenente una 50ina di items e configurato con
Style = "1 - Checkbox".
Il ciclo per deselezionare tutti i CheckBox:
	For Cnt = 0 To MyListBox.ListCount- 1
		MyListBox.Selected(Cnt) = False
	Next
e' velocissimo mentre quello per selezionarli tutti:
	For Cnt = 0 To MyListBox.ListCount- 1
		MyListBox.Selected(Cnt) = True
	Next
ci mette un po' di piu' perche' implicitamente seleziona (evidenziandolo 
con lo sfondo blu) ogni singolo item.
Non e' un problema enorme pero' e' fastidioso e temo che con grandi 
quatita' di items l'attesa possa essere eccessiva. Ho fatto qualche 
prova ma non c'e' verso di eliminare quell'effetto... come posso fare? 
Qualche idea...? Ringrazio anticipatamente tutto il NG.
Rusko


Dovresti provare con l'API SendMessage, come in questo esempio:
http://vbnet.mvps.org/code/listapi/clearlistitems.htm
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 	Next
  MyListBox.visible=true
-- 
A)bort, R)etry, I)nfluence with large hammer.
News 2002 [v 2.07] / StopDialer / PopDuster - 
http://www.socket2000.com
Akapulce portal: 
http://www.akapulce.net

   MyListBox.visible=true
Fantastico! E' esattamente quello che cercavo!!! Le avevo provate tutte
ma non questa perche' ero convinto che si avrei visto sparire la lista
per una frazione di secondo... invece va benissimo!!! Grazie mille!!!!!
A proposito... ma perche' la lista non sparisce? Oltre alla selezione
tutti/nessuno ho anche dei filtri che ne selezionano "alcuni"... e
anche se il ciclo e' un po' piu' complesso non vedo comunque sparire il
controllo... come mai?
Grazie ancora!!
Rusko

 
http://vbnet.mvps.org/code/listapi/clearlistitems.htm
Davvero molto interessante! Grazie mille per il link!
Per le necessita' della mia applicazione la soluzione che mi ha dato
DueDiPicche e' piu' adatta, ma il link che mi hai dato ed anche il sito
(che non conoscevo...) e' davvero interessante! Grazie ancora!!!
Rusko



Perchè non fai il refresh del form dopo aver messo MyListBox.visible=false
--
ciao
  Stefano

 Perchè non fai il refresh del form dopo aver messo MyListBox.visible=false
gia'... m'e' venuto il sospetto che fosse cosi' dopo aver postato il
messaggio ;-)
Comunque lo trovo un comportamento un po' allucinante... devo
nascondere un oggetto sicuro del fatto che non verra' realmente
nascosto per evitare che venga aggiornato selezionandone un item...
mah...
Grazie ancora per l'aiuto!
Rusko

nascosto per evitare che venga aggiornato selezionandone un item...
No, perchč?
Invece č un bel trucco quello di nascondere, lavorare su un controllo e poi
rimettere visibile il tutto, prima che il s.o. se ne accorga.
--
ciao
  Stefano

 rimettere visibile il tutto, prima che il s.o. se ne accorga.
Sicuramente e' un bel trucco! :-)
Pero' trovo allucinante che per fare delle cose tutto sommato
"normali", in VB bisogna sempre ricorrere a trucchi!
Personalmente trovo il VB molto divertente, mi ricorda un po' le
vecchie adventures della LucasArt dove, per esempio (me l'ha appena
ricordato qualcuno) per far piovere bisogna pulire la macchina...!!!
:-)))
Non sto criticando il VB, pero' a volte, soprattutto passando dal C a
VB, non so se ridere o mettermi a piangere...
Grazie ancora per l'aiuto!
Ciao!
Rusko



Io lavoro sia con il C (quasi mai su pc) che con il VB, e secondo me è come
passare da un mondo rigidissimo a uno di gomma.
E poi ci si mette davvero poco a sviluppare e a debuggare qualcosa in VB, magari
bisogna conoscere qualche trucco in più, ma il risultato è maggior velocità.
--
ciao
  Stefano

 per una frazione di secondo... 
Mai fidarsi, sempre provare prima!
Ciao.
-- 
"Close the fridge door, I'm dressing!" cried the mayonnaise 


>[...]
Ma non è un trucco, è il modo di fare del VB e che secondo me è anche una 
ottima strategia e basta conoscerla, si tratta di questo:
Per non appesantire l'esecuzione del codice lui fa meno aggiornamenti a 
video possibili e li rimanda a quando il processore è libero.
In questo modo se uno deve fare varie modifiche le può fare velocemente 
senza aspettare il tempo di richiamare le API grafiche e spedire alla scheda 
video dei passaggi parziali..
Secondo me è un vantaggio enorme, e poi se proprio uno ha l'esigenza di 
visualizzare e continuare a elaborare c'è sempre il refresh..
Il fatto che con la listbox si rallentasse se era visibile è solo perchè 
chio ha fatto la listbox ci ha messo dentro nel codice i refresh (o le 
chiamate equivalenti visto che credo sia stata fatta in C) al variare della 
selezione. In questo modo non permette di utilizzare in maniera standard il 
vantaggio della strategia di VB.
Quindi secondo me è il controllo listbox che costringe al trucco, non il VB, 
il VB va conosciuto per usarlo bene, finchè viene considerato un gioco come 
spesso mi capita di sentire, si continuerà a usarlo come un gioco..
Per quest'ultimo discorso scusatemi ma sono sempre infastidito da chi non 
considera il VB un buon linguaggio, di solito non lo conosce bene anzi 
spesso neanche l'ha mai usato, chiaramente questo non è il vostro caso..
Ciao,
    Diego 

 e poi rimettere visibile il tutto, prima che il s.o. se ne accorga.
Sě, ma puň dare problemi, nel caso in cui la routine sia lunga,
oppure ci sia un DoEvents da qualche parte o magari si verifichi
un errore e si esca dalla routine, la ListBox rimane non visibile.
Il sistema piů corretto sarebbe di usare l'API LockWindowUpdate
****************
Declare Function LockWindowUpdate Lib "user32" _
(ByVal hwndLock As Long) As Long
      Dim N As Long
      LockWindowUpdate List1.hWnd
      For N = 0 To 100
            List1.Selected(N) = True
      Next N
      List1.Visible = True
      LockWindowUpdate 0
****************
In alternativa si puň usare la SendMessage giostrando col parametro
WM_SETREDRAW:
****************
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
 Const WM_SETREDRAW = &HB
SendMessage List1.Parent.hwnd, WM_SETREDRAW, False, 0
      Dim N As Long
      For N = 0 To 100
            List1.Selected(N) = True
      Next N
    SendMessage List1.Parent.hwnd, WM_SETREDRAW, True, 0
    List1.Refresh
****************
Bye, G. 

 Il sistema piů corretto sarebbe di usare l'API LockWindowUpdate
avevo pero' verificato che se blocchi il lb, e davanti al tuo prog, mentre 
lavora, passi un'altra finestra, quando poi la togli il lb si sblocca per 
conto suo.
riprovato adesso con un vecchio programma che uso ancora. portata davanti la 
finestra di oe6, poi ridotta a icona, il lb si e' messo beatamente a 
scorrere.
un miglioramento notevole nelle prestazioni direi si abbia eliminando gli 
effettini grafici introdotti da w98.
piu' o meno come quando li disattivi in xp e il pentium sembra 
improvvisamente guadagnare 1 ghz :>
ciao, a. 

 piu' o meno come quando li disattivi in xp e il pentium sembra improvvisamente guadagnare 1 ghz :>
Perché, c'è qualcuno che li tiene attivi ? ==8-O
Bye, G. 

 Perché, c'è qualcuno che li tiene attivi ? ==8-O
perche', conosci qualcuno che sa che si possono disattivare? :)

 perche', conosci qualcuno che sa che si possono disattivare? :)
Veramente conosco poca gente che sa che esistono, e piuttosto
pochi che riuscirebbero a riattivarli. Come sai, qui le installazioni
le faccio io >:-=].
Bye, G. 

 le faccio io >:-=].
per curiosita', hai mai provato a mettere su un redhat, ma con un bel logo 
ms, se qualcuno se ne accorge? >:-> 

 "Paperino" ha scritto

Mmmmm. RH no [1], ma ricordo che c'è una distro con i vari "temi"
Windows. Quasi quasi... :-D
Avevo pensato seriamente tempo fa di provare una macchina Linux
come alternativa, il problema sono i programmi proprietari e verticali.
Pe resempio su quasi tutte le macchine qui deve girare un programma
proprietario che vuole una finestra DOS, e conosco Dosemu solo di
nome e per aver letto un po' di documentazione. E' anche piuttosto
rognoso, è stato gia un bel problema farlo girare sotto Windows, con
incompatibilità diverse ad ogni versione, dal 3.1 a XP SP2....
[1] appropo': ho installato Vista in un'altra partizione e sto scaricando
Fedora 5 e Kubuntu, ho intenzione di fare un po' di confronti, e anche
con VMware. Mi sento sperimentalista :-)).
Bye, G.