Ciao a tutti,
Rieccomi, mi sono gia di nuovo incartato, forse uno di questi giorni mi manderete a fare Un bagno (di questa stagione a Vercelli non è il massimo)!
Il fatto è che ho già descritto un primo form con una classe abbinata che può essere benissimo la classe principale della procedura ove ho descritto alcune variabili che dovrebbero essere globali in tutta la gestione nella dichiarazione iniziale le ho inserite in questo modo:
Public modello As Integer '##### tipo di modello usato #####
Public n_cli As Integer = -1 '##### Numero del cliente in elaborazione #####
Public punt_mese As Integer = 0 '##### puntatore al nome del mese #####
Public shift As Integer '##### alineamento bolla #####
Public tipo_bll As Integer '##### seleziona il tipo di bolla in base al cliente selezionato #####
Public tot_cli As Integer = 0 '##### numero totali di clienti visualizzati #####
Public _base As String '##### definisce la directori di base del programma #####
Public homedir As String = User.home '##### percorso file della home dello user #####
Se avevo letto bene la keyword Public dovrebbe rendere le variabili globali, in effetti il tutto funzionava nelle varie sub e procedure seguenti, le dolenti note arrivano quando attivo il secondo form e quindi penso passo in una seconda Class, come prima azione ho previsto di lanciare la procedura che va a inserire i dati già noti nel nuovo form e lo faccio con questa istruzione:
Public Sub _new()
Input_Normale(0, n_cli, sw_menu)
End
Questa struttura l'interprete non la digerisce e in dice che n_cli non è dichiarato:
[b]Unknown identifier: n_cli[/b] in FNormale class: 8
A quanto pare la globalità della variabile n_cli dichiarata nella classe FMain non riguarda il secondo ambito cioè la classe FNormale, ho cercato tutta la sera ieri nell'Help in linea ma non ho trovato alternative alla situazione, infatti pensavo di ricadere nel caso della vostra discussione:
Passaggio dati tra due Form
Francamente però ero convinto che le variabili globali lo fossero rispetto a più classi, quindi starò sbagliando qualcosa in qualche parte del listato?
Voi che ne dite?
Rigrazio già fin d'ora!
Beh non potevi darmi una risposta migliore!
Però quale è l'alternativa? Il secondo form io l'ho attivato in questo modo:
Select Case tipo_bll
Case 0 '######################################### Bolla di tipo XXXXXXXX #####
'Input_Diverso(n_cli, sw_menu)
Case 1 '######################################### Bolla di tipo YYYYYYYYY #####
FNormale.Show
'Input_Normale(0, n_cli, sw_menu)
Case 2 '######################################### Bolla di tipo ZZZZZZ #####
FNormale.Show
'Input_Normale(1, n_cli, sw_menu)
End Select
Devo confessarti che per scrivere questo mi sono ispirato ad un listato Gambas trovato nel sito (penso si chiami Azerotrope e parte del compito lo assolve, infatti la classe FNormale si avvia, ma con il problema di cui sopra!
Grazie!
Centro! Grazie Top Fuel e Gianluigi,
Il tutto funziona, le variabili erano descritte nella classe associata e perciò l'espressione FMain.n_cli assolve in pieno al compito.
Ecco ora comprendi perché ho sgridato TopFuel :)
Per il resto Gianluigi hai pienamente ragione, forse per me il problema è sapere dove leggere, vedi io sto passando da un linguaggio prettamente procedurale (Quel basic della Sinclair che ogni tanto cito) a questo molto più bello ad oggetti.
Adesso andrò a reperire il Gambasdoc e showdialog & showmodal e me li leggerò per bene.
Ancora grazie!
Spero tanto di non averti offeso, io intendevo comunque le spiegazioni nel codice a cui tu ti riferivi e cioè:
Public Sub Button1_Click()
' La finestra in modalità dialogo (ShowDialog) o modale (ShowModal) stessa cosa significa che fino a quando non l'abbiamo chiusa
' non permetterà al programma di andare avanti. Questo metodo termina solo quando la finestra è chiusa, e il valore intero
' passato al metodo Close viene restituito.
Form2.ShowDialog
'' NB: Se noi passiamo una finestra non modale queste istruzioni
'' non verranno eseguite.
lblNome.Text = Me.sNome
lblCognome.Text = Me.sCognome
End
:ciao: