Newsgroup: it.comp.lang.visual-basic
Titolo: Motivo per il quale un RaiseEvent non scatena l'evento

Esiste un dannato motivo per il quale un raiseevent dopo due
volte smette di "raisare" l'evento???
Sto diventando scemo nel capirlo.
Variabile globale
dim withevents x as new form1
nell'unload di form1, ci metto il raiseevent unload (dove unlod
è un evento che ho dichiarato) ... le prime due form che eseguo
e che chiudo l'evento viene scatenato, di li in poi, passa sopra la
riga di raiseevnt ma l'evento non viene generato e di li tutta
una menata di problemi, tra i quali il fatto che non mi gestisce
la chiusura di alcuni file.
-- 
Saluti
Andrea Moro
Sito Comune : 
http://www.it-lang-vb.net

 volte smette di "raisare" l'evento???
la sparo al buio...
Non è che l'evento viene "lanciato" ma non c'è più l'oggetto che dovrebbe
riceverlo?
Salutoni
Sergio

CSSoft (
news...@cssoft2001.com
) ha scritto, tanto per cambiare ...
Di fatto ad ogni raiseevent, nella form globale dove ho impostato
l'oggetto withevent faccio anche un bel set x = nothing ... però
mi aspetto che per ogni volta che ho fatto set x = new form1 ...
il vb si segni da qualche parte l'handle della nuova form e ad
ogni set x = nothing vada a distruggere uno e solo un oggetto
x ... non tutti.
Quello che dici mi lascia perplessso ... se così fosse, o non dovrebbe
funzionare da nessuna parte nel programma, cosa che non è vero,
oppure s'è riconglionito il pc ... (mi sono ritrovato oggi un file
che nell'aprirlo mi diceva "file passed end of length" o qualcosa di
simile- vado a vedere il sorgente ci mancava tutto tutto tutto il
codice del form che era stato sostituito da tanti begli spazi. Bestemmie
come un porco e il buon backup di sabato.)


 x ... non tutti.
[SNIP]
Non sono sicuro di cosa tu faccia esattamente... quante istanze di form1
apri contemporaneamente? una sola spero...
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 Ciao


 nuova istanza di form1
Benissimo: dato che la variabile dichiarata 'WithEvents' e' una sola, come
puoi gestire gli eventi di piu' di una form contemporaneamente? verranno
intercettati soltanto quelli dell' *ultima* istanza di form assegnata ad x
Ammesso e non concesso che abbia capito esattamente come e' strutturato il
tuo codice, quello che hai fatto puo' funzionare se apri e chiudi piu' form
in sequenza, ma se ne apri piu' di una e poi le chiudi successivamente,
verra' scatenato soltanto uno dei possibili eventi Unload...


 Ciao
Caxxo ... hai ragione ... avevo l'illusione che funzionasse anche altrove,
ma evidentemente non ci avevo fatto caso.
Morale della favola così non si fà; convinto eppure che vb riuscisse
a gestirsi sta cosa delle form e crearsi un pool di oggetti.
Quindi non mi rimane che farmi un'array di form che si aprono con lo
stesso nome??? Fattibile o inverosimile?


 stesso nome??? Fattibile o inverosimile?
Dipende sempre da cosa vuoi fare... una possibile ripiego, che funziona
entro certi limiti, e' mettere in piedi una cosa del genere:
Crea una funzione pubblica di questo tipo
Public Sub SetCurrentForm(f As Form)
'main e' la tua form principale, e x e' la
'variabile withevents dichiarata come pubblica
Set Main.x = f
End Sub
Nella form figlia aggiungi
Private Sub Form_Activate()
SetCurrentForm Me
End Sub
Private Sub Form_GotFocus()
SetCurrentForm Me
End Sub
in questo modo, quando attivi una delle possibili istanze, la variabile
"sentinella" x viene impostata di conseguenza e processera' gli eventi della
finestra figlia corrente
(nota per inciso che se ti interessanno gli eventi standard della classe
form, come il nostro Unload, non e' necessario che tu faccia manualmente il
RaiseEvent, perche' e' gia' implicito).
A seconda di quello che fai, per esempio se vuoi chiudere le finestre via
codice e intercettare gli eventi, questo potrebbe non essere sufficiente, ma
comunque e' un punto di partenza eventuale...




Fino a qui l'ho fatto anche io ... ed è il principio sul quale ero convinto
che vb si facesse un array di form ...
a me invece serve controllare gli eventi di ogni singola form.
Ci devo pensare su ... credo sia fattibile la cosa con un paio di procedure
private, un array per ogni form che voglio controllare e credo basta.
Ma devo fare delle prove.
Intanto grazie



Scusate se mi intrometto nel 3ad ma io mi sono già trovato in questa
situazione ed ho risolto in questo modo il problema:
' In un modulo dichiaro una varialbile pubblica che sarà l'isatnza della
form
Public FRM As frmMultiIstanza
' Costante di conteggio istanze create
const ContForms as long
' In una routine dove creo le istanze che mi servono
ContForms = ContForms + 1
' Creo la nuova istanza
Set FRM = New frmMultiIstanza
' Form è una variabile pubblica della form frmMultiIstanza alla quale
assegno il numero di istanza creata
FRM.Form = ContForms
Si ripete il ciclo quante volte si vuole e se si verifica il valore della
variabile Form di ogni istanza esso sarà diverso per tutte in quanto ogni
istanza ha le sue proprietà, metodi ed eventi indipendenti dalle altre
istanze.
Saluti,
Mattia

Mattia il quoting prima cosa.
Ti ringrazio per il suggerimento, ma la tua soluzione è del resto
solo parziale, perchè comunque non risolve il fatto che si possa
trappare gli eventi di tutte le form, ma solo dell'ultima.


Si č vero, io non uso eventi miei generati dalla form quindi non mi
interessa intercettarli.
Scusate,
Ciao,
Mattia