Autore Topic: Problema istanziando un oggetto con o senza gestire eventi  (Letto 1562 volte)

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Problema istanziando un oggetto con o senza gestire eventi
« il: 30 Novembre 2019, 17:44:07 »
 :ciao:
 :hard: :hard: Se istanzio un oggetto, senza che possa sollevare eventi, che ha una proprietà che permette di indicare un'immagine che poi viene rappresentata in una PictureBox, l'immagine viene passata correttamente all'oggetto e visualizzata correttamente.
Se, invece, istanzio con l'opzione as "NomEvento", l'immagine non viene più visualizzata.
Stessa cosa per un campo testo (IDD).
Mi sfugge qualcosa!
Non so se sono riuscito a spiegarmi, allego un piccolo esempio. Nel Fmain.class vanno modificate le due linee di istanziazione se  si vuole vedere la differenza commentando o no, 'as "QQ"'
 :'(
grazie!
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #1 il: 30 Novembre 2019, 23:52:39 »
Perché si istanzia con _new() e tu non lo stai facendo.
Ti allego un progetto che istanzia correttamente.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #2 il: 01 Dicembre 2019, 00:41:22 »
Perché si istanzia con _new() e tu non lo stai facendo.
.... un progetto che istanzia correttamente.

Puoi farne un'apposita pagina per la nostra Wiki, da inserire in Indice-->Il Linguaggio ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #3 il: 01 Dicembre 2019, 09:40:40 »
 :ciao:
grazie!
Ho dato un occhio veloce, Quelle proprietà che avevo assegnato, mi servivano perchè devo poterle cambiare durante l'esecuzione del programma.
Così invece sono fissate nel momento della creazione.
Mi sono dimenticato di scriverlo!   :donkey:
 :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #4 il: 01 Dicembre 2019, 09:57:52 »
@vuott
Wow, era tanto che non leggevo l'indice.
Una lezione magistrale sulle classi, mi complimento vivamente, ottimo.
Purtroppo il mio scrivere non è certamente all'altezza del tuo, vedo cosa posso fare.

@kicco
Volevo già completare il discorso aggiungendo che, se servono le proprietà si possono assegnare i valori mentre si istanzia la classe Start e, come ben spiegato da vuott, la si trasforma in un oggetto concreto.

Codice: [Seleziona]
Public Sub _new(val0 As Integer, val1 As String, val2 As Integer, val3 As Picture)
      Me.Background = val0
      TextBox1.text = val1
      ValueBox1.value = val2
      PictureBox1.Picture = val3
      $IDD = val1
      $GRP = val2
      $icosir = val3
End
« Ultima modifica: 01 Dicembre 2019, 10:03:04 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #5 il: 01 Dicembre 2019, 10:08:12 »
Citazione
...se servono le proprietà si possono assegnare i valori mentre si istanzia la classe Start...
i valori devo poterli cambiare anche dopo aver creato l'oggetto perchè evolvono nel tempo e devo aggiornarli (esempio iDD o GRP).
Come proponi sopra non credo sia possibile, o sbaglio?

Poi faccio delle prove!
 :-*
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #6 il: 01 Dicembre 2019, 10:53:34 »
Purtroppo in questo mo ho poco tempo da dedicarti.
Quello che vorresti fare non funziona perché è mal progettato.
Nel tuo caso non servono le proprietà per passare i valori.
Puoi anche farlo in modo astruso ad esempio, visto che hai creato i controlli pubblici che te li sconsiglio:

Codice: [Seleziona]
Public Sub Button1_Click()

      TextBox1.text = Null
      a.IDD = "ZZ"
      ...
      a.TextBox1.Text = a.IDD
      ...

End

Naturalmente a dovrebbe essere a livello di modulo...

Dovresti ripensare il tuo progetto magari creando una funzione ad hoc per passare i dati.

Ora devo uscire ne riparliamo più tardi

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #7 il: 01 Dicembre 2019, 12:35:11 »
Citazione
Purtroppo in questo mo ho poco tempo da dedicarti.
Ti ringrazio per quello che già m'hai dedicato!
Intanto proseguo a  :hatecomputer: :hard:  :)
 :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #8 il: 01 Dicembre 2019, 14:40:23 »
@vuott
....
Una lezione magistrale sulle classi, mi complimento vivamente, ottimo.
Non correre !  ;D
La parte che ho scritto io è soltanto quella delle note a pie' pagina.




Purtroppo il mio scrivere non è certamente all'altezza del tuo...
Non ti ho chiesto di dire queste fesserie, ma di comporre l'opera.

« Ultima modifica: 01 Dicembre 2019, 14:41:03 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #9 il: 01 Dicembre 2019, 16:44:25 »
Scusate l'assenza ma... albero e presepe fatti (sono de tipo mignon).   ;D

@vuott,
ora mi metto al piano per le prime prove.   :specchio:
Citazione
La parte che ho scritto io è soltanto quella delle note a pie' pagina.
si ma è la parte che spiega in modo chiaro e ...filosofico.  :)

@kicco,
allego un esempio di quello che intendevo

Nota: mi ero dimenticato i controlli pubblici, cambiato.
« Ultima modifica: 01 Dicembre 2019, 19:32:52 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #10 il: 01 Dicembre 2019, 17:20:32 »
Citazione
allego un esempio di quello che intendevo
Grazie.
Non capisco però perchè la strada di creare una classe e poi istanziare oggetti non fosse corretta. Questa dovrebbe essere la "filosofia" della programmazione ad oggetti!  :-\
 :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #11 il: 01 Dicembre 2019, 17:57:48 »
Non capisco però perchè la strada di creare una classe e poi istanziare oggetti non fosse corretta. Questa dovrebbe essere la "filosofia" della programmazione ad oggetti!  :-\
Ma nell'esempio ultimo io istanzio gli oggetti solo che, a differenza di quello che facevi tu all'inizio, lo faccio nel modo corretto.

Inserisci uno stop nel tuo esempio iniziale de-commentando gli eventi e ti accorgerai che la Sub Open della classe Start non viene mai chiamata.
Se invece inserisci una Sub _new verrà chiamata ma subito (che è il momento del costruttore, _new appunto) pertanto le sarà impossibile leggere i dati che passi successivamente.
I dati vanno passati al momento della costruzione dell'oggetto oppure successivamente, volendo anche con l'ausilio di eventi ad hoc come si usava in VB, per me un altro modo contorto.
Come ti ho fatto vedere nell'esempio ultimo, con Gambas è molto semplice farlo usando una procedura pubblica e non capisco le tue perplessità.
Non è forse funzionale alle tue necessità?  :-\
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #12 il: 01 Dicembre 2019, 20:00:50 »
Citazione
Come ti ho fatto vedere nell'esempio ultimo, con Gambas è molto semplice farlo usando una procedura pubblica e non capisco le tue perplessità.
Non è forse funzionale alle tue necessità? 
Ho costruito il programma principale usando oggetti istanziati da una classe (fittizia) che derivava (inherits) da quella Button e aggiungendo un paio di nuove proprietà.
Di quella classe uso le proprietà picture, text e background.
Pensavo che, dopo aver organizzato e fatto girare le varie parti del programma principale di controllo, di sostituire quella Classe (fittizia) con quella che ho chiamato Start attribuendole le proprietà testo, picture e background, ma anche altre.
La tua soluzione, che risolve indubbiamente il problema, credo mi scompiglierà un po' la struttura.
Ecco perchè preferirei creare una classe con le proprietà dichiarate! Ma se non è possibile, apporterò le modifiche al programma principale e ricfarò il debug :hard:

 :ciao: :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #13 il: 01 Dicembre 2019, 20:14:05 »
Non riesco a capire, ma se prima funzionava (classe fittizia) perché devi cambiare la classe in maniera che non funziona più?
Lasciala come era quando funzionava.
Evidentemente mi sfugge qualcosa che mi impedisce di comprendere.

Bada che io non ho detto che con le proprietà non è possibile, ti avevo fatto un esempio qui:
https://www.gambas-it.org/smf/index.php?topic=7453.msg47357#msg47357

Ora chiudo bottega: Buonanotte  :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Problema istanziando un oggetto con o senza gestire eventi
« Risposta #14 il: 01 Dicembre 2019, 20:20:53 »
Citazione
Non riesco a capire, ma se prima funzionava (classe fittizia) perché devi cambiare la classe in maniera che non funziona più?
Perchè quella classe fittizia non ha altri campi dove "scrivere" oltre a quello text.Io ho bisogno di un altro per rappresentare un numero che in Button non c'è. :-\
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)