Autore Topic: [Risolto] Dati globali in più classi di un listato gambas  (Letto 706 volte)

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
[Risolto] Dati globali in più classi di un listato gambas
« il: 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!
« Ultima modifica: 29 Dicembre 2014, 16:52:54 da Franco_da_vc »
Bye by Afo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
Re: Dati globali in più classi di un listato gambas
« Risposta #1 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re: Dati globali in più classi di un listato gambas
« Risposta #2 il: 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!
Bye by Afo

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Dati globali in più classi di un listato gambas
« Risposta #3 il: 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 ;)
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
Re: Dati globali in più classi di un listato gambas
« Risposta #4 il: 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...

 :'(
« Ultima modifica: 29 Dicembre 2014, 16:36:52 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
Re: Dati globali in più classi di un listato gambas
« Risposta #5 il: 29 Dicembre 2014, 16:29:22 »
@Franco
showdialog
showmodal
non hai letto le spiegazioni?
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re: Dati globali in più classi di un listato gambas
« Risposta #6 il: 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!
Bye by Afo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
Re: Dati globali in più classi di un listato gambas
« Risposta #7 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re: Dati globali in più classi di un listato gambas
« Risposta #8 il: 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.
Bye by Afo

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Dati globali in più classi di un listato gambas
« Risposta #9 il: 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. :)
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
Re: [Risolto] Dati globali in più classi di un listato gambas
« Risposta #10 il: 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.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: [Risolto] Dati globali in più classi di un listato gambas
« Risposta #11 il: 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?
« Ultima modifica: 30 Dicembre 2014, 00:16:11 da Top Fuel »
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.155
  • Tonno verde
    • Mostra profilo
Re: [Risolto] Dati globali in più classi di un listato gambas
« Risposta #12 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro