Gambas-it

Gambas3 => Programmazione => Topic aperto da: Franco_da_vc - 29 Dicembre 2014, 15:38:55

Titolo: [Risolto] Dati globali in più classi di un listato gambas
Inserito da: Franco_da_vc - 29 Dicembre 2014, 15:38:55
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:

Codice: gambas [Seleziona]


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:

Codice: gambas [Seleziona]

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:
Codice: [Seleziona]
[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:
Codice: [Seleziona]
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!
Titolo: Re: Dati globali in più classi di un listato gambas
Inserito da: Gianluigi - 29 Dicembre 2014, 16:02:22
Scusa Franco non capisco stiamo tanto a parlare di non usare mai e poi mai le variabili globali, io mi sforzo invano di spiegare come si usano le proprietà e tu chiedi di aiutarti a sbagliare?
Vade retro! :)
Se c'è qualcosa che non hai capito nell'uso delle proprietà dimmelo e io cercherò di aiutarti.

 :ciao:
Titolo: Re: Dati globali in più classi di un listato gambas
Inserito da: Franco_da_vc - 29 Dicembre 2014, 16:13:07
Beh non potevi darmi una risposta migliore!

Però quale è l'alternativa? Il secondo form io l'ho attivato in questo modo:

Codice: gambas [Seleziona]


    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!
Titolo: Re: Dati globali in più classi di un listato gambas
Inserito da: Top Fuel - 29 Dicembre 2014, 16:16:23
Ma quelle variabili fanno parte del primo Form o della classe abbinata?
In ogni caso devi fare riferimento alla classe di appartenenza, con Classe.n_cli o Form.n_cli. Inoltre in Gambas le variabili globali non esistono, come specificato in Gambasdoc sulle differenze tra VB e Gambas:

Citazione
There is no such thing as a project-wide global variable in Gambas. As a workaround, consider making a class called Global and declaring your global variables as static public variables in that class, and then referring to them as Global.VariableName in your project. It's still poor programming practice but at least they'll be identified as global variables whenever you use them ;)
Titolo: Re: Dati globali in più classi di un listato gambas
Inserito da: Gianluigi - 29 Dicembre 2014, 16:25:47

In ogni caso devi fare riferimento alla classe di appartenenza, con Classe.n_cli o Form.n_cli. ...

tu quoque...

 :'(
Titolo: Re: Dati globali in più classi di un listato gambas
Inserito da: Gianluigi - 29 Dicembre 2014, 16:29:22
@Franco
showdialog
showmodal
non hai letto le spiegazioni?
 :ciao:
Titolo: Re: Dati globali in più classi di un listato gambas
Inserito da: Franco_da_vc - 29 Dicembre 2014, 16:51:15
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.

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!
Titolo: Re: Dati globali in più classi di un listato gambas
Inserito da: Gianluigi - 29 Dicembre 2014, 17:03:44
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  :)

Citazione
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è:

Codice: gambas [Seleziona]
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:
Titolo: Re: Dati globali in più classi di un listato gambas
Inserito da: Franco_da_vc - 29 Dicembre 2014, 17:12:00
Spero tanto di non averti offeso, io intendevo comunque le spiegazioni nel codice a cui tu ti riferivi e cioè:

Figurati, non sei stato assolutamente offensivo e poi chi ha da imparere deve saper ascoltare!

Ancora grazie.
Titolo: Re: Dati globali in più classi di un listato gambas
Inserito da: Top Fuel - 29 Dicembre 2014, 21:24:15
In ogni caso devi fare riferimento alla classe di appartenenza, con Classe.n_cli o Form.n_cli. ...
tu quoque...
 :'(

Perchè io quoquo? :)
Era la soluzione giusta, lo ha detto anche Franco. :)
Titolo: Re: [Risolto] Dati globali in più classi di un listato gambas
Inserito da: Gianluigi - 29 Dicembre 2014, 22:25:05
Ora basta,
Chiedo pubblicamente che chi utilizza un linguaggio di programmazione orientato agli oggetti in modo improprio, leggasi in primis l'uso indiscriminato di variabili pubbliche che possano data la loro scostumata facilita di comportamento trarre in tentazione giovani gamberi per poi traviarli irrimediabilmente, punizioni esemplari anche, se non sopratutto, di tipo corporale.
Questo naturalmente esteso anche a chi ne favorisca l'uso con atti, parole e atteggiamenti.
Titolo: Re: [Risolto] Dati globali in più classi di un listato gambas
Inserito da: Top Fuel - 29 Dicembre 2014, 23:54:09
Tipo martellate sulle gengive? :D
Comunque, se una certa variabile è contenuta in un'altro Form o classe e ti serve, come vai a prenderla?
Titolo: Re: [Risolto] Dati globali in più classi di un listato gambas
Inserito da: Gianluigi - 30 Dicembre 2014, 11:03:42
Tipo martellate sulle gengive? :D

Si, ma fra le punizioni più blande. :)

Citazione
Comunque, se una certa variabile è contenuta in un'altro Form o classe e ti serve, come vai a prenderla?

Cosa intendi dire? Se una variabile contenuta in un altro form è privata tu come fai a leggerne il valore?  ???

 :ciao: