Gambas-it

Gambas3 => Programmazione => Topic aperto da: naderit - 12 Gennaio 2019, 19:16:11

Titolo: [risolto] errore variabile
Inserito da: naderit - 12 Gennaio 2019, 19:16:11
Ciao a tutti ho diverse applicazioni che usano la seguente procedura:
Codice: [Seleziona]
Private hControl As Object
Private Px As New Integer[]
Private Py As New Integer[]
Private Pw As New Integer[]
Private Ph As New Integer[]
Private Fs As New Integer[]
Private Mw As Integer
Private Mh As Integer
Private ctrx As Boolean
Private codute As Integer
Private codmis As Integer
Private xlab As Integer
Private xdate As String
Public mydir As String = Application.Path & "/" & "Out"
Public trimestre As Integer
Public progres As String

Public Sub Form_Open()
 For Each hControl In Me.Controls
      Px.Add(hControl.x)
      Py.Add(hControl.y)
      Pw.Add(hControl.w)
      Ph.Add(hControl.h)
      Fs.Add(hControl.Font.size)
  Next

  Mw = Me.W
  Mh = Me.h
  Mod_Open.controlla_db()
 
  carica_utenti

End
Public Sub Form_Resize()
  Dim cx, cy As Float
  Dim Nw, Nh, i As Integer

  Nw = Me.W
  Nh = Me.h

  Cx = Nw / Mw
  Cy = Nh / Mh

  i = 0
  For Each hControl In Me.Controls
    hControl.x = Px[i] * Cx
    hControl.y = Py[i] * Cy
    hControl.w = Pw[i] * Cx
    hControl.h = Ph[i] * Cy
    hControl.Font.size = Fs[i] * Cx
    Inc i
  Next
End

ha sempre funzionato alla perfezione ma da oggi alla riga ' For Each hControl In Me.Controls'  mi restituisce  "Loop variable cannot be global" , avete idea cosa sia successo? Grazie  :ciao:
Titolo: Re:errore variabile
Inserito da: Gianluigi - 12 Gennaio 2019, 19:28:56
Usare una globale per quello non era una buona pratica già da prima.
Comunque ora è vietata perché sono avvenuti importanti cambiamenti.
Ad esempio adesso puoi definire le variabili dove vuoi e non solo all'inizio della procedura.
Nel tuo caso puoi scrivere una cosa come questa:
Codice: [Seleziona]
  For Each hcontrol As Control In Me.Controls
    Print hcontrol.Name
  Next

Titolo: Re:errore variabile
Inserito da: vuott - 12 Gennaio 2019, 19:29:49
A me pare che non funzionasse neppure prima.  :-\
Titolo: Re:errore variabile
Inserito da: naderit - 12 Gennaio 2019, 19:39:33
Si ho letto qualcosa qualche giorno fa', quindi da oggi va dichiarata la anche in questo modo su tutte le procedure ? se ho capito bene
 
Codice: [Seleziona]
Public Sub Form_Open()
 dim hControl As Object
  For Each hControl In Me.Controls
   print hcontrol.name
  Next
End

Public Sub Form_Resize()
 dim hControl As Object
  For Each hControl In Me.Controls
  print hcontrol.name
  Next
End

Titolo: Re:errore variabile
Inserito da: naderit - 12 Gennaio 2019, 19:50:40
Citazione
A me pare che non funzionasse neppure prima.  :-\
Non metto in dubbio ma posso assicurare che funzionava perfettamente. Ora sarebbe da capire il motivo ho in uso Xubuntu 18.04.  :-\
Titolo: Re:errore variabile
Inserito da: Gianluigi - 12 Gennaio 2019, 23:09:58
Si ho letto qualcosa qualche giorno fa', quindi da oggi va dichiarata la anche in questo modo su tutte le procedure ? se ho capito bene
 
Codice: [Seleziona]
Public Sub Form_Open()
 dim hControl As Object
  For Each hControl In Me.Controls
   print hcontrol.name
  Next
End

Public Sub Form_Resize()
 dim hControl As Object
  For Each hControl In Me.Controls
  print hcontrol.name
  Next
End

Così è come è sempre stato  :-\
Per i loop non è obbligatorio il dim, puoi dichiarare come ti ho scritto sopra, e cioè:

Codice: [Seleziona]
  For Each hcontrol As Object In Me.Controls
    Print hcontrol.Name
  Next
Visto che preferisci l'object...
Titolo: Re:errore variabile
Inserito da: Gianluigi - 13 Gennaio 2019, 11:47:46
Tanto per essere più chiaro possibile circa le dichiarazioni delle variabili locali:
Codice: [Seleziona]
Public Sub Form_Open()

  Dim s As String = "10"                       ' Prima era possibile dichiarare solo in questo luogo (inizio routine) '
  ' Solo per i loop '
  For Each hcontrol As Control In Me.Controls  ' Ora si può fare anche così... '
    Print hcontrol.Name
  Next
  ' In ogni dove '
  Dim i As Integer = CInt(s)                    '...è così '
  If i = 10 Then Print "ALLELUIA"

End
Titolo: Re:errore variabile
Inserito da: naderit - 13 Gennaio 2019, 12:44:39
Bene tutto chiaro grazie Gianluigi  :ciao:
Titolo: Re:[risolto] errore variabile
Inserito da: vuott - 13 Gennaio 2019, 15:40:25
Rimando a questa discussione:

http://www.gambas-it.org/smf/index.php?topic=6720.0
Titolo: Re:errore variabile
Inserito da: Gianluigi - 13 Gennaio 2019, 15:51:56
A me pare che non funzionasse neppure prima.  :-\

Ho controllato installando una 3.11 in VBox e effettivamente era possibile.
Ho avvisato (https://lists.gambas-basic.org/pipermail/user/2019-January/066229.html) anche sulla ML
Titolo: Re:[risolto] errore variabile
Inserito da: Gianluigi - 13 Gennaio 2019, 22:45:41
E infatti Minisini conferma che "una variabile di ciclo deve essere locale" e che prima era possibile ma che si trattava di un errore.
https://lists.gambas-basic.org/pipermail/user/2019-January/066233.html
Titolo: Re:[risolto] errore variabile
Inserito da: naderit - 14 Gennaio 2019, 21:47:49
bene sono più sollevato ... stavo per formattare è reinstallare tutto per far pulizia  :ok: :2birre:
Titolo: Re:[risolto] errore variabile
Inserito da: vuott - 14 Gennaio 2019, 22:41:45
... stavo per formattare è reinstallare tutto per far pulizia

(http://media.tumblr.com/3b8a77428a19525e2b15e8f1d7b315d8/tumblr_inline_mpxtomvRAL1qdvhk5.gif)