Newsgroup: it.comp.lang.visual-basic
Titolo: public hlpForm as Form

nell'utilizzo del programma questo hlpForm non mi da problemi.
l'ho messo per semplificarmi la vita quando un form lancia un form d'aiuto per codici, varie ed eventuali.
hlpForm diventa il form che lancia il form d'aiuto.
cosě che quando il form d'aiuto viene chiuso, torni ad essere abilitato il form lanciante.
ripeto che nell'utilizzo del programma funziona.
piccolo bugghino :o) :
quando passo un codice sullo scanner di codici, questo mi genera degli eventi.
gli eventi sono:
-ricevo dati
-verifico dati
-salvo nel database
ho verificato tutte le chiamate di hlpForm e la parte dello scanner non dovrebbe interessare quella variabile. (hlpForm non compare
nemmeno tra i cicli del form dello scanner)
eppure hlpForm perde il suo valore...
cosě quando unloado il form d'help, hlpForm prima non mi riabilita il form chiamante e poi si susseguono gli errori perchč il form
chiamante non č abilitato..

[*Utopian [ k n k ]* = 
utopianBARRIE...@katamail.com
 in
news:bkug34$t0c$
1...@newsreader.mailgate.org
] ha scritto:
...
Non si capisce nulla!

 ha scritto nel
messaggio news:bkug34$t0c$1...@newsreader.mailgate.org...
[cut]
mah... sarò stanco o ho perso anche il controllo dell'ultimo neurone... ma
non ci capisco un beep...
ciao
ugo

 eppure hlpForm perde il suo valore...
[SNIP]
Allora, da quel poco che si capisce (senza offesa, ma...) parrebbe che
'Public hlpForm as Form' sia una tua variabile globale in cui salvi un
riferimento alla form attiva, prima di chiarare l'altra fantomatica form di
aiuto, giusto?
Se e' cosi', per tracciare il problema arriva subito prima della chiamata
incriminata, aggiungi un watch con l'espressione "hlpForm Is Nothing" e
imposta l'opzione per interrompere quando l'espressione e' vera; a questo
punto vai avanti normalmente e quando l'esecuzione si interrompe, verifica
con lo stack di chiamate che "giri" sta facendo il tuo programma.
Senza codice e' il meglio che ti posso suggerire...
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 vera;
domanda: se un oggetto è autoistanziante, vale anche per le interruzioni
condizionali la regola che non sarà mai a nothing ?
--
Salutoni
Sergio

 condizionali la regola che non sarà mai a nothing ?
yes


eheh mi scuso per la poca chiarezza.
ora sto con un po di fretta, + tardi posto il codice incriminato.
al momento non uso hlpform (visto che il form chiamante al momento è sempre lo stesso, specifico direttamente il nome del form)

ho un modulo.bas con:
    Public hlpForm As Form
--
ho un form movimenti che apre un form di aiuto inserimento codice se si clicca su una label:
-il form movimenti viene disabilitato per impedire all'utente di toccarlo :o)
Private Sub Label1_DblClick(Index As Integer)
    If Index = 3 Then
        Set hlpForm = Me
        Load Hlp_CodBar
        Me.Enabled = False
    End If
End Sub
--
sul form d'help faccio tutte le mie belle cosine, quando decido di aver trovato il codice che mi serve o lo clicco o clicco sul
pulsante 'conferma'.
il pulsante fa eseguire un codice che controlla se ci sono records.
se ci sono records, imposta una chiave: chia_unload=1 , altrimenti la imposta = 0
a questo punto esegue: unload me.
--
segue l'unload del form:
-si puň vedere commentato il codice che mi da problemi.
il codice non commentato č quello attualmente funzionante.  (ma non mi va bene.. )
Private Sub Form_Unload(Cancel As Integer)
    'hlpForm.Enabled = True
    Frm_Mov.Enabled = True
    If Chia_Unload = 1 Then
        'hlpForm.Dopo_Help_Codbar Adodc1.Recordset!codbar
        Frm_Mov.Dopo_Help_Codbar Adodc1.Recordset!codbar
    End If
    Set hlpForm = Nothing
End Sub
--
Attualmente il codice posso usarlo cosě perchč quel form d'help viene richiamato solamente dal form movimenti.
Non capisco dove stia l'inghippo. :-|
me.perplesso(true)
ps: scommettiamo che č una cavolata?

 End Sub
[SNIP]
E' esattamente come immaginavo... trascuriamo il fatto che potresti
ribaltare la faccenda e fare a meno di una variabile globale, il che 90 su
100 risolverebbe il problema in maniera "naturale"; puoi tracciare il
problema come ti suggerivo nell'altro messaggio, ricapitolando:
ripristina il codice non funzionante, quindi metti un breakpoint subito dopo
'Set hlpForm = Me' e imposta l'espressione di controllo 'hlpForm Is Nothing'
con l'opzione 'interrompi se il valore e' vero'; continua l'esecuzione
facendo le operazioni che devi fare e aspetta che il programma si rimetta in
pausa da se': ora dovresti avere il baco sotto gli occhi.


 pausa da se': ora dovresti avere il baco sotto gli occhi.
dovrei.. ma non è così..
il programma si inchioda dandomi "proprietà o metodo non supportati dall'oggetto"

 il programma si inchioda dandomi "proprietà o metodo non supportati
dall'oggetto"
Hmmm, mi sa che il problema allora e' differente... su quale istruzione si
pianta?


 pianta?
si pianta qui:
 'hlpForm.Dopo_Help_Codbar Adodc1.Recordset!codbar
ti precedo: adodc1.recordset!codbar ha il valore corretto.
giuro che non lo capisco.
Purtroppo questa mattina dopo aver scritto ci sono stati alcuni problemi e
sono dovuto uscire dall'ufficio.

  'hlpForm.Dopo_Help_Codbar Adodc1.Recordset!codbar
Adodc1 č un data-eccetera? Auguri.

Adodc1 č un data-eccetera? Auguri.
Non perdi occasione, eh? ;-)
Pero' hai dannatamente ragione, non usando i "data-eccetera" questi
problemi sono praticamente sconosciuti ;-)
-- 
ciao, hal

 Non perdi occasione, eh? ;-)
No, finchč non mi stufo. Poi smetto di dirlo (e anche di rispondere).
In alternativa potrei fondare un club per masochisti...

 giuro che non lo capisco.
Ovviamente, per funzionare, l'istanza di form che assegni a hlpForm deve
avere un metodo pubblico 'Dopo_Help_Codbar'; certamente quella che gli
assegni in origine ce l'ha, ma il punto e' sempre quello: ad un certo punto
l'istanza di hlpForm viene sovrascritta (non passa a nothing come ti
suggerivo negli altri messaggi, ma cambia) e devi risalire all'istruzione
incriminata.
Dato che 'hlpForm' e' globale, un altro sistema per tracciare il problema e'
quello di cercare tutte le istruzioni 'Set hlpForm=' nel progetto, impostare
un breakpoint su ognuna e riprovare... ogni volta che si ferma verifica se
e' voluto o no
Con questo dovresti arrivare al dunque, sempre sperando che non venga
sovrascritta tramite un riferimento indiretto (tipo perche' hai passato per
riferimento la form globale ad una routine e internamente fai un set del
parametro...)


 In alternativa potrei fondare un club per masochisti...
il problema non sta sull'adodc1
quello lo uso solo perchè l'ho trovato come metodo + veloce per visualizzare
un'elenco di dati.
se invece di quello mi metto:
hlpForm.Dopo_Help_Codbar 00000001
il problema rimane.
ho detto che adodc contiene il record giusto.
alternative veloci al controllo adodc per mostrare un elenco di nomi,codici
e cognomi?

e cognomi?
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.CurstorType = adOpenKeyset
rs.LockType = adLockReadOnly '(o qualcosa del genere)
Set rs = MiaConnessione.Execute(stringa_sql)
Set MiaDataGrid.DataSource = rs
-- 
ciao, hal

 e' voluto o no
eheh :-)
ed io che avevo controllato..
me n'era sfuggito uno.. :-D
ho corretto l'errore ed ora non da + problemi ;-)
grazie.