Gambas-it

Gambas3 => Programmazione => Topic aperto da: Top Fuel - 27 Dicembre 2012, 12:01:26

Titolo: Chiarimento su Delete
Inserito da: Top Fuel - 27 Dicembre 2012, 12:01:26
Per distruggere un oggetto ci vuole l'istruzione delete, e qui ci siamo, però c'è qualcosa che non capisco: sempre riguardo la mia famosa simulazione della roulette (che sto mandando avanti con tempi bradipici :) ) ho aggiunto la possibilità di visualizzare tutta la serie attualmente memorizzata con una textarea creata sul momento tramite la voce apposita sul menù, in questa maniera:
Codice: [Seleziona]
Public Sub Visualizza_Click()
Dim vediserie As New TextArea(Me)
Dim i As Short, Tmp As String
If visualizza.Checked = False
   For i = 0 To serie.Max
      Tmp &= Str$(serie[i]) & " "
   Next
   With vediserie
      .x = 50
      .y = 340
      .width = 1010
      .height = 85
      .text = "Serie attuale: " & Tmp
   End With
   visualizza.Checked = True
Else
   visualizza.checked = False
   'vediserie.visible = False
   'vediserie.Hide
   vediserie.delete
Endif
End
Teoricamente, ricliccando sulla voce di menù la textarea dovrebbe sparire, ma invece rimane li al suo posto, anche usando le 2 istruzione appena sopra il delete che ho remmato.
Ma se distruggo un oggetto questo non dovrebbe sparire, visto che non esiste più? O c'è qualcosa che mi sfugge? :-\
Titolo: Re: Chiarimento su Delete
Inserito da: vuott - 27 Dicembre 2012, 12:17:48
Ma se distruggo un oggetto questo non dovrebbe sparire, visto che non esiste più? O c'è qualcosa che mi sfugge? :-\

Sì, nel tuo caso devi porre la variabile del tipo "TextArea" (ossia: vediserie) come "Globale".

Inoltre, al fine di non avere un errore nel tentativo di ricreare un'altra TextArea mediante quella variabile, dovrai porre la riga che crea la TextArea all'interno della routine.
Quindi avremo:
Codice: gambas [Seleziona]

Private vediserie As TextArea

....' quindi il resto del codice....
....' etc

Public Sub visualizza_Click()

  Dim i As Short, Tmp As String

  If visualizza.Checked = False

    vediserie = New TextArea(Me)    ' <-------------------
  
 For i = 0 To serie.Max
       Tmp &= Str$(serie[i]) & " "
   Next
   With vediserie
....
....
...' etc




....Inoltre, se vuoi evitare tutti quei .Checked, puoi anche usare una righetta di controllo dell'esistenza della TextArea, aggiungendovi solo il nome nelle sue proprietà:
Codice: gambas [Seleziona]

Public Sub visualizza_Click()

  Dim i As Short, Tmp As String

   If IsNull(Me.Controls["vediserie"])    '  <-------------------

    vediserie = New TextArea(Me)
  
    For i = 0 To serie.Max
       Tmp &= Str$(serie[i]) & " "
    Next
   With vediserie
      .x = 50
      .y = 100
      .width = 200
      .height = 85
      .Name = "vediserie"    '  <-------------------
      ......  ' etc
      ....... ' etc

Vanno eliminati ovviamente tutti i visualizza.Checked = .
Titolo: Re: Chiarimento su Delete
Inserito da: Top Fuel - 31 Dicembre 2012, 21:31:00
Perfetto, adesso funziona, grazie. ;)
Però i .Checked li lascio perchè voglio far rimanere la spuntina sulla voce del menù. :)