Autore Topic: [risolto] errore variabile  (Letto 1010 volte)

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
[risolto] errore variabile
« il: 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:
« Ultima modifica: 13 Gennaio 2019, 12:45:15 da naderit »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:errore variabile
« Risposta #1 il: 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

« Ultima modifica: 12 Gennaio 2019, 19:29:46 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.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:errore variabile
« Risposta #2 il: 12 Gennaio 2019, 19:29:49 »
A me pare che non funzionasse neppure prima.  :-\
« Ultima modifica: 12 Gennaio 2019, 19:33:42 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 naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:errore variabile
« Risposta #3 il: 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


Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:errore variabile
« Risposta #4 il: 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.  :-\

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:errore variabile
« Risposta #5 il: 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...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:errore variabile
« Risposta #6 il: 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
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:errore variabile
« Risposta #7 il: 13 Gennaio 2019, 12:44:39 »
Bene tutto chiaro grazie Gianluigi  :ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[risolto] errore variabile
« Risposta #8 il: 13 Gennaio 2019, 15:40:25 »
« 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.157
  • Tonno verde
    • Mostra profilo
Re:errore variabile
« Risposta #9 il: 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 anche sulla ML
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:[risolto] errore variabile
« Risposta #10 il: 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
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:[risolto] errore variabile
« Risposta #11 il: 14 Gennaio 2019, 21:47:49 »
bene sono più sollevato ... stavo per formattare è reinstallare tutto per far pulizia  :ok: :2birre:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[risolto] errore variabile
« Risposta #12 il: 14 Gennaio 2019, 22:41:45 »
... stavo per formattare è reinstallare tutto per far pulizia

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