Autore Topic: Nome di un oggetto  (Letto 1033 volte)

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.727
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Nome di un oggetto
« il: 23 Giugno 2019, 20:45:42 »
Perchè se creo un oggetto  dall'ide e gli attribuisco la proprietà nome dal panello proprieta, esempio BT_Quit, poi posso usare l'espressione
Bt_Quit.background=color.red e se invece istanzio l'oggetto da una classe attraverso il codice, gli attribuisco il nome con .name=xxx e poi tento di cambiare colore, usando XXX.backgound=color.red non funziona?
Entrambi dovrebbero portare allo stesso risultato, essendo entrambi la "stessa" operazione?
Cosa non ho capito?
 :'(
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #1 il: 23 Giugno 2019, 21:21:23 »
Nel tuo esempio dell'IDE cambia il "nome" dell'Oggetto, da te impostato con "BT_Quit", con un altro nome mediante la proprietà BT_Quit.Name = "xxxx" (come fai nell'altro esempio da una Classe); poi prova a usare l'oggetto mediante quel nuovo nome, ad esempio
Print xxxx.Name

Facci sapere che succede.
« 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.727
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #2 il: 23 Giugno 2019, 21:59:44 »
Citazione
poi prova a usare l'oggetto mediante quel nuovo nome,
OK non è possibile!
Ma è la stessa proprietà! e nell'ide la puoi cambiare anche dopo aver istanziato l'oggetto!
 :-\
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #3 il: 23 Giugno 2019, 22:33:07 »

Ma è la stessa proprietà! e nell'ide la puoi cambiare anche dopo aver istanziato l'oggetto!
 :-\

Lo sai che non riesco a capire, puoi fare un esempio concreto?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #4 il: 24 Giugno 2019, 01:29:39 »
Ma è la stessa proprietà! e nell'ide la puoi cambiare anche dopo aver istanziato l'oggetto!
Tu fai confusione, ma non è colpa tua.

Nella colonna di destra dell'IDE c'è la scheda chiamata "Proprietà", ed è questo che genera appunto un po' di confusione.
Infatti sono presenti, proprio all'inizio dell'elenco, le definizioni:
- "Class", ma la Classe di appartenenza dell'Oggetto non è una "proprietà" dell'Oggetto medesimo, essendo in vero la "Proprietà" una risorsa della Classe (così come i Metodi e gli Eventi);
- "Name", ed è l'elemento al quale tu fai riferimento. Se però fai attenzione, in realtà questo nome si riferisce alla "variabile" del tipo dell'Oggetto prescelto, che quindi punta a quell'Oggetto.... alla Struttura costitutiva dell'oggetto in questione. Pertanto NON è una proprietà dell'Oggetto. Insomma è come se io scrivessi: Dim abc As Integer: ecco "abc" è quel "Name" che vedi nell'IDE.
-  "Group", ma anche in questo caso il Gruppo degli Eventi non è una Proprietà in senso stretto dell'Oggetto.
Poi vengono gli altri elementi che sono vere e proprie Proprietà dell'Oggetto. Nel caso del Button abbiamo anche la Proprietà ".Name".... che non è il secondo elemento nella scheda dell'IDE (abbiamo già detto che quello è il nome della Variabile del tipo dell'Oggetto prescelto !).
Pertanto, se la variabile che rappresenta l'Oggetto Button, ad esempio, si chiamerà "BT_Quit", l'assegnazione di una stringa di caratteri alla sua Proprietà ".Name", ad esempio:
Codice: [Seleziona]
BT_Quit.Name = "kicco"
è un po' come assegnare all'Oggetto una sorta di etichetta.
Voglio dire che tu NON muti il nome della Variabile che punta alle risorse dell'Oggetto di tipo "Button", che hai voluto creare.

Il nome di una Variabile non è altro che l'alter-ego di una porzione di memoria riservata, la cui prima cella (di tale memoria) è puntata/rappresentata da questo elemento che noi chiamiamo Variabile.
Se tu crei un Oggetto, gli assegni automaticamente una Variabile (esempio: "BT_Quit") che punta alla prima cella di quella porzione di memoria, che così si è venuta a destinare, per "accogliere" tutto quanto (i dati) necessario affinché quell'Oggetto esista.
Se per esempio al Button tu gli assegni un colore di Background.... dove (in quale luogo della memoria) credi sarà scritto il valore del colore da te scelto ? ...all'interno di una sub-struttura della Struttura che costituisce l'impalcatura di ciò che chiamiamo "Oggetto".
L'Oggetto non è altro che una non-piccola porzione della memoria allocata per i dati che l'Oggetto medesimo dovrà avere, nonché i Metodi, etc..

Se vuoi modificare il nome di una Variabile, significa che vuoi... cambiare Variabile, crearne insomma un'altra; e quindi usare, sì, una medesima quantità di memoria, ma allocata altrove all'interno della memoria.

Dunque, il nome della Variabile del tuo Button corrisponderà all'elemento "Name" della scheda nell'IDE di Gambas; INVECE la vera "Proprietà" chiamata ".Name", capace in scrittura e in lettura di contenere un dato di tipo String, sarà in sostanza posta all'interno di quella Variabile (o meglio della porzione di memoria rappresentata dalla Variabile del Button).

...non so se mi spiego, kicco ! 


vedi anche per mera analogia:
https://www.gambas-it.org/wiki/index.php?title=Configurazione,_organizzazione_ed_impostazione_dell%27oggetto_Image_secondo_i_sorgenti_di_Gambas
http://www.gambas-it.org/wiki/index.php?title=Leggere_le_informazioni_di_una_Image_dalle_sue_risorse_dei_sorgenti_di_Gambas
http://www.gambas-it.org/smf/index.php?topic=7084.msg46021#msg46021
« Ultima modifica: 24 Giugno 2019, 01:38:55 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 kicco

  • Senatore Gambero
  • ******
  • Post: 1.727
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #5 il: 24 Giugno 2019, 10:12:02 »
Citazione
...non so se mi spiego, kicco !
Ti sei spiegato molto bene e riflettevo anche su un errore concettuale che ho fatto.
Quando nell'ide pongo un Button nel form, non sto ancora istanziando l'oggetto, sto solo "preparando" il codice per farlo.
È solo nel momento dell'esecuzione che avviene la creazione dell'oggetto e a quel punto il Name dell'oggetto non è più modificabile penso proprio per quello che tu scrivi:
Citazione
Se vuoi modificare il nome di una Variabile, significa che vuoi... cambiare Variabile..
Adesso allora devo capire come cambiare il colore di un button che ho istanziato più di una volta così:
 
Codice: [Seleziona]
 With BT = New Bottone(PictureBox1) As "Tasto"
partendo dalla classe Bottone che ho creato.
Perchè avevo pensato di usare appunto .name per distinguerli!
...e invece...
Grazie ancora Vuott  :-*
 :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.727
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #6 il: 24 Giugno 2019, 10:47:12 »
Forse ho capito!
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #7 il: 24 Giugno 2019, 10:50:34 »
Perchè avevo pensato di usare appunto .name per distinguerli!
...e invece...


Questo argomento è già stato affrontato varie volte  :P

Completa questo codice: http://www.gambas-it.org/smf/index.php?topic=7116.msg46096#msg46096

Con:
Codice: [Seleziona]
Private myButton As CButton

Public Sub Form_Open()

  myButton = New CButton(Me) As "Button1"
  myButton.Text = "Pippo"
  myButton.X = 32
  myButton.Y = 32
  myButton = New CButton(Me) As "Button2"
  myButton.Text = "Pluto"
  myButton.X = 166
  myButton.Y = 32

End

Public Sub Button1_Click()

  Dim hCon As Control

  Message.Info("Hai fatto click sul pulsante <b>Button1")
  For Each hCon In Me.Controls
    If hCon.Name = "Button1" Then
      hCon.Background = Color.Green
    Else If hCon.Name = "Button2" Then
      hCon.Background = Color.Blue
    Endif
  Next
 
End

Public Sub Button2_Click()
 
  Message.Info("Hai fatto click sul pulsante <b>Button2")
 
End

Naturalmente si può fare in tanti altri modi, vedi questa discussione:
http://www.gambas-it.org/smf/index.php?topic=4615.msg37507#msg37507
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #8 il: 24 Giugno 2019, 11:46:58 »
Perchè avevo pensato di usare appunto .name per distinguerli!
Usare la Proprietà ".Name" per distinguere un Oggetto da un altro, può essere un'opzione.



Completa questo codice: http://www.gambas-it.org/smf/index.php?topic=7116.msg46096#msg46096

Con:
Codice: [Seleziona]
Private myButton As CButton

Public Sub Form_Open()

  myButton = New CButton(Me) As "Button1"
  myButton.Text = "Pippo"
  myButton.X = 32
  myButton.Y = 32
  myButton = New CButton(Me) As "Button2"
  myButton.Text = "Pluto"
  myButton.X = 166
  myButton.Y = 32

End

........

Però kicco assegna un unico Gruppo degli Eventi agli Oggetti creati:
come cambiare il colore di un button che ho istanziato più di una volta così:
 
Codice: [Seleziona]
 With BT = New Bottone(PictureBox1) As "Tasto"
partendo dalla classe Bottone che ho creato.

mentre il tuo esempio assegna uno specifico Gruppo per ciascun Oggetto creato.
« Ultima modifica: 24 Giugno 2019, 11:48:36 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.243
  • Tonno verde
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #9 il: 24 Giugno 2019, 12:13:26 »
...
mentre il tuo esempio assegna uno specifico Gruppo per ciascun Oggetto creato.

Gruppo? Non capisco as assegna il nome per gli eventi che diventa automaticamente il nome dell'oggetto.  :-\
« Ultima modifica: 24 Giugno 2019, 12:20:01 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #10 il: 24 Giugno 2019, 12:57:26 »
Gruppo? Non capisco as assegna il nome per gli eventi che diventa automaticamente il nome dell'oggetto.

Sì, insomma il nome per gli Eventi, sotto il quale possono essere raggruppati anche più Oggetti.

Devo dire che io non sapevo che il nome per gli Eventi diventasse anche automaticamente il nome dell'oggetto.   :-\
« 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.727
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #11 il: 24 Giugno 2019, 13:41:14 »
Citazione
Devo dire che io non sapevo che il nome per gli Eventi diventasse anche automaticamente il nome dell'oggetto.   :-\
Anch'io lo scopro or ora! :-[
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #12 il: 24 Giugno 2019, 14:20:03 »
@vuott, @kicco,
la mia è stata una scoperta casuale, altrimenti come farebbe il codice postato a funzionare?

Circa Group per gli oggetti ereditati (creati col codice) dovrebbe essere Last, ma sono il meno adatto a parlarne in quanto non lo uso mai  :-[
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #13 il: 24 Giugno 2019, 14:54:54 »
Mi sa che Last e Group sono cose diverse.  ;D
E a proposito di Last si può fare qualcosa del genere:
Codice: [Seleziona]
Private hButton[2] As Button

Public Sub Form_Open()

  hButton[0] = New Button(Me) As "MyButtons"
  hButton[0].Text = "Blue"
  hButton[0].Height = 32
  hButton[0].Width = 120
  hButton[0].X = 32
  hButton[0].Y = 32

  hButton[1] = New Button(Me) As "MyButtons"
  hButton[1].Text = "Green"
  hButton[1].Height = 32
  hButton[1].Width = 120
  hButton[1].X = 160
  hButton[1].Y = 32
  For Each obj As Object In Me.Controls
    obj.Picture = Picture["icon:/small/book"]
  Next
 

End

Public Sub MyButtons_Click()

  Select Last.Text
    Case "Blue"
      Last.Background = Color.Blue
    Case "Green"
      Last.Background = Color.Green
  End Select

End
« Ultima modifica: 24 Giugno 2019, 14:55:43 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Nome di un oggetto
« Risposta #14 il: 24 Giugno 2019, 15:04:01 »
Sì, anche io volevo suggerire a kicco l'uso di "Last".

« 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. »