Sequenze sub vb6

martedì 14 novembre 2006 - 13.07

isotopo75 Profilo | Newbie

ciao a tutti,

ho un piccolo dubbio amletico...

Io creato un form in vb6 sul quale devo caricare i dati anagrafici presi da un database, supponiamo una lista di aziende clienti.

Allora un realizzato un combobox che viene riempito in fase di activate del form.

Selezionando un'azienda dalla lista del combo vengono riempiti alcuni textbox sottostanti con i dati anagrafici dell'azienda stessa.
Fin qui tutto funziona.

Inoltre, i dati devono poter essere modificati dall'utente. Allora ho inserito un commmandbutton "Modifica" in modo che alla pressione si possano modificare i dati presenti nei textbox.

Se però non è stata selezionata alcuna azienda e si preme lo stesso il tasto modifica, viene visualizzato un messaggio in una label con scritto "Selezionare un'azienda!" e si esce dalla sub con la funzione Exit sub.

A questo punto... cosa viene caricato? Cioè, al momento in cui si ha un'uscita intermedia dalla sub il VB cosa fa? Esegue il load form, l'activate form o cosa?

Insomma ho bisogno di sapere qual'è la sub o la function successiva ad un'uscita intermedia.

Grazie a tutti,

Iso75



sanbiz Profilo | Senior Member

> Cioè, al momento in cui
>si ha un'uscita intermedia dalla sub il VB cosa fa? Esegue il
>load form, l'activate form o cosa?

L'istruzione exit sub non fa altro che, come hai già visto, uscire dalla routine in cui ti trovi.

>Insomma ho bisogno di sapere qual'è la sub o la function successiva
>ad un'uscita intermedia.

Non ho ben capito che cosa vuoi fare esattamente o cosa ti aspetti.
Dipende da come hai organizzato la chiamata.
La exit sub esce semplicemente dalla routine nient'altro.
Facciamo un esempio molto semplice:


Private Sub miaSub_Chiamante()

' Punto 1
.....
.....

' Punto 2 (Chiamo una sub)
call miaSub

' Punto 3
....
....

End Sub

Private sub miaSub()
' Se non ho selezionato nulla dalla combo esco

if miaconbo.text="" then
exit sub
end if

End Sub

Devi tener presente il flusso di esecuzione del tuo programma; nel nostro esempio la sub "miaSub" viene chiamata dalla sub "miaSub_Chiamante" (punto 2).
Sia che la sub "miaSub" completi l'intero ciclo, sia che ne esca anticipatamente (exit sub) in ogni caso il controllo tornerà alla miaSubChiamante esattamente dopo il punto 2 eseguendo il punto 3

E' ovvio che se la chiamata alla miaSub fosse fatta nella Load della form o nella sua Activate il processo proseguirebbe da lì, ma questo ha nessuna importanza.
--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

isotopo75 Profilo | Newbie

Ciao,
grazie per la risposta rapida

Forse non ho spiegato bene il mio dilemma pero'... ora ci riprovo.

Se io sono dentro una sub e chiamo un'altra sub come nel tuo esempio, allora ok... so che ritorno esattamente in quel punto.

Segui per un attimo questo processo, pero':

Mi trovo nella fase di activate form. qui viene caricata tramite una "call private sub" un form con le info dell'azienda e si popola la combo. Il processo ora è finito... vb aspetta che io faccia qualcosa.

Se io cambio la selezione nel combo, allora viene ricaricata la private sub con i nuovi dati e
si modificano i dati dei textbox. Il processo di nuovo è finito, non sono dentro nessuna sub!

Se io clicco sul tasto modifica parte una nuova sub, uscendo dalla quale cosa succede? Dove mi trovavo prima della chiamata? Non ero dentro nessuna sub perchè non c'erano processi attivi... o sbaglio?

grazie mille

iso75.

sanbiz Profilo | Senior Member

>Mi trovo nella fase di activate form. qui viene caricata tramite
>una "call private sub" un form con le info dell'azienda e si
>popola la combo. Il processo ora è finito... vb aspetta che io
>faccia qualcosa.
Scusami ma continuo a non capire.

Tu hai un form (form1) che in form_activate chiama una sub (miaSub) nella quale viene caricato un altro form (form2) il quale contiene i dati dell'azienda?
Ma come lo chiami in modale (form2.show(1))? o form2.visible =true?

>Se io cambio la selezione nel combo, allora viene ricaricata
>la private sub con i nuovi dati e
>si modificano i dati dei textbox. Il processo di nuovo è finito,
>non sono dentro nessuna sub!
Ma dove si trova questa combo? Sul form1 o sul form2?
Ed il tuo pulsante?

Cerca di illustrare con più precisione il tuo processo, magari dando dei nomi agli oggetti, proprio come ho fatto io ed indicando le chiamate più sensibili (ad esempio quella call alla tua sub)

--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

isotopo75 Profilo | Newbie

ok... provo di nuovo

Ho 1 solo form, ad esempio frm_azienda

su questo form inserisco:

1 combobox dal nome combo1
4 textbox dal nome text1,text2,text3 e text4
1 commandbutton con nome "vai"

clicco due volte sul form e mi sia apre il codice...

qui ho subito la sub form_load

In questa non scrivo nulla

creo la sub form_activate
in questa inserisco la seguente chiamata:
call popola_combo()

' punto 2
end sub 'Qui termina la sub del form activate

ora scrivo la sub popola_combo

private sub popola_combo()
apro la connessione al db
eseguo una query
metto i dati in un recordset che chiamo my_rs

ora eseguo, sempre dentro questa sub, il popolamento del combo:

while not my_rs.eof
Combo1.AddItem (my_rs.Fields("nome_azienda"))
my_rs.MoveNext
Wend
end sub

Ora esco da questa sub e ritorno al punto 2 del form activate... giusto?

A questo punto ho una combo che contiene i nomi delle aziende e posso scorrere per selezionarne una dalla lista.

Ora scrivo un'altra sub per compilare i 4 textbox e questa viene eseguita SOLO quando clicco il tasto "vai"

private sub command1_click

eseguo una seconda query che prende il nome dell'azienda e legge i dati della sua anagrafica

metto i dati in un altro recordset... ad esempio my_rs2

scrivo i dati nei textbox

text1.text=my_rs2.Fields("rag_sociale")
text2.text=my_rs2.Fields("via")
text3.text=my_rs2.Fields("citta")
text4.text=my_rs2.Fields("provincia")

In questo modo nei textbox ho i dati relativi all'azienda selezionata nel combobox

end sub

A questo punto ESCO da questa sub... DOVE MI TROVO?

cosa fa ORA vb6? In che punto del codice si trova?

In particolare... viene o no rieseguita la form_activate()?

Grazie,

Iso75.

sanbiz Profilo | Senior Member

>private sub command1_click
>
>eseguo una seconda query che prende il nome dell'azienda e legge
>i dati della sua anagrafica
>
>metto i dati in un altro recordset... ad esempio my_rs2
>
>scrivo i dati nei textbox
>
>A questo punto ESCO da questa sub... DOVE MI TROVO?

Diciamo che non ti trovi in nessun posto in particolare o meglio, vb è in attesa che tu faccia qualche cosa.
Se premi il tasto command1 si scatena l'evento click dello stesso che in realtà è una semplice sub. Alla fine di questa, sia che tu esca in modo corretto o forzando, ti troverai esattamente nella posizione successiva alla chiamata. Nel tuo caso il command1_click finisce lì, ma se guartdi bene prima del click si era scatenato il mousedown e per ultimo il mouseup. Nel frattempo vi sono una serie di eventi (e quindi sub) in corrispondenza del movimento del mouse, della pressione dei tasti sulla tastira ecc. ecc.

>In particolare... viene o no rieseguita la form_activate()?
La form_activate è un particolare evento che si genera tutte le volte che la form viene riattivata (ottiene il focus).
Non è il tuo caso dato che il tuo programma non abbandona mail la form1

Ti cosniglio di utilizzare i breakpoint per poter debuggare il tuo sorgente e capire esattamente quello che accade.
--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5