Newsgroup: it.comp.lang.visual-basic
Titolo: BUG VB .NET?

Ciao a tutti,
Ho scoperto una cosa, è forse un bug di Vb .net 2003?
Create una form con una listbox, nell'evento DoubleClick della listbox
mettete "Me.Dispose" perr fare l'unload della form.
Eseguite il tutto ed ecco una bella Exception. Come mai??
Grazie,
Andy

Mi sono dimenticato di dire che la listbox deve contenere qualche items di
esempio per poter fare doppioclick su uno di essi.
Grazie,
Andy

esempio per poter fare doppioclick su uno di essi.
Succede anche se il Listbox e' vuoto e se si chiama il dispose anche
sul Click.
Ho provato sul 
vs.net
 vecchio (framework 1.0, per capirci) e mi sono
beccato anch'io la mia brava eccezione di tentato accesso ad un
oggetto Listbox che non esiste piu'.
Sembra che la listbox venga distrutta prima del previsto, dal codice
di base del form, infatti se si rimuove la listbox dalla collection
Controls del Form allora l'eccezione non si verifica piu' ed il form
si chiude regolarmente.
 Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, 
				ByVal e As System.EventArgs) 
				Handles ListBox1.DoubleClick
        Controls.Remove(ListBox1)
        Me.Dispose()
 End Sub
Chi ha voglia e tempo potrebbe divertirsi ad indagare sul perche'.
-- 
ciao, hal

 Chi ha voglia e tempo potrebbe divertirsi ad indagare sul perche'.
Manco a farlo apposta, ho cercato su Google e visto che in una versione di
VB6 c'era un bug che provocava un GPF quando dall'evento DoubleClick di una
listbox facevi l'unload della form. Poi è stato corretto in un SP. Che MS
non guardi al passato? :-)
Comunque grazie, mi hai fornito un ottimo aiuto per evitare l'exception, ora
provo...
Andy

 > Chi ha voglia e tempo potrebbe divertirsi ad indagare sul perche'.
Ho eseguito qualche prova:
Evento doppio click.
con
 Me.Dispose()
ottengo
Eccezione non gestita di tipo "System.ObjectDisposedException" in
system.windows.forms.dll
Informazioni aggiuntive: Impossibile accedere all'oggetto eliminato di nome
"ListBox".
e il nome della classe viene evidenziata
con
 Me.Dispose()
 GC.Collect(0)
ottengo come prima MsgBox
Eccezione non gestita di tipo "System.ObjectDisposedException" in Modulo
sconosciuto.
Informazioni aggiuntive: Impossibile accedere all'oggetto eliminato di nome
"ListBox".
Come seconda MsgBox
"Codice sorgente non disponibile per il percorso corrente."
e il nome della classe non viene evidenziato
con GC.Collect(0)
elimino la memoria di tutti gli oggetti non utilizzati di generazione 0
Quindi la classe form è eliminata ma la ListBox risulta viva.
---------------------------
Nell'evento SelectedIndexChanged
la form con tutti i componenti finiscono nel cestino
con il doppio click, ho l'impressione che,
al primo click il tutto va a finire nel secchio,
il secondo evento click è in vita e tenta di accedere all'oggetto ma non lo
trova, e non può essere istanziato in quanto la classe form è inutilizzata.
Ave
giuseppeD

 si chiude regolarmente.
La butto lì: con Me.Dispose() la form chiama la Dispose() di ogni controllo
contenuto in essa, rendendo di fatto inacessibile la listbox, ancora legata
all'evento.
Prova a usare anzichè Dispose() il metodo Close(), che è a più altro
livello, e per curiosità metti un breakpoint nell'evento Disposed del
listBox.
Se questo scatta prima dell'eccezione è verificata la teoria :)
Ciao.
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

non guardi al passato? :-)
Il mio sospetto, che sta trovando parecchie conferme dai post che
leggo, e' che .net sia in realta' un nuovo imballaggio per un vecchio
pacco.
-- 
ciao, hal

Se questo scatta prima dell'eccezione è verificata la teoria :)
Che il listbox venga distrutto prima del tempo e' evidente, tant'e'
che il crash si verifica sia con Dispose che con Close.
Sfido che .net e' piu' veloce di java: non gestisce la memoria :-P
-- 
ciao, hal

 non guardi al passato? :-)
non solo. in vb6 se generi a runtime un combo (appartenente ad un array)
e poi invochi l'unload in risposta all'avento click del combo stesso,
genera
un errore. solo con le combo, funziona con tutti gli altri controlli. e
non
l'hanno corretto in nessun sp... :-/
Ciao,
Moreno
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Invecie di criticare, fanne uno tu se sei capace :PPP


Invecie di criticare, fanne uno tu se sei capace :PPP
Se intendi il GC, non ci penso nemmeno, perche' secondo me si tratta
di una soluzione inutile e scomoda, che ti costringe a creare tutti
gli oggetti sullo heap senza poter sfruttare lo stack quando sarebbe 
piu' conveniente e senza sapere quando tali oggetti verranno
distrutti.
E poi... saro' anche un cane di programmatore, ma a me un bug non 
dura anni...
-- 
ciao, hal