Per comunicare lo stato di un lavoro di riorganizzazione file, vorrei comunicare all'utente il numero di record trattati fino a quel momento. Preciso che il lavoro è svolto dentro una classe chiamata dall'ultima form attiva:
RiordTbDb = NEW RiordTabDB($_TbRiord)
Ho tentato di modificare una label della form chiamante, mentre la classe chiamata sta lavorando:
Form05.Label16.text = "RIORGANIZZAZIONE TABELLe.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." & i_id
Ho ricevuto, però, al primo record trattato, il messaggio "Not enough arguments". Ecco, non ho capito se abbia commesso un errore di sintassi o se, invece, non possa agire, dalla classe chiamata, su un oggetto della form di partenza.
???
Guardando meglio l'istruzione, effettivamente, contiene un errore di sintassi:
Form05.Label16.text = "RIORGANIZZAZIONE TABELLe.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." & i_id
ma non è quello determinante quel tipo di errore, perché dopo avere sdoppiato l'istruzione precedente nelle seguenti
DIM $testmio AS String
$testmio = "RIORGANIZZAZIONE TABELLE.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." & Str(i_id)
Form05.Label16.Text = $testmio
il messaggio "Not enough arguments" si è ripresentato tale e quale.
La riga evidenziata subito dopo il messaggio di errore è proprio
Form05.Label16.Text = $testmio
Lo dimostra anche il fatto che inibendola il programma prosegue nel suo lavoro fino alla fine, senza altri stop.
Il suo inserimento mi sembra pratico per permettere all'utente di capire lo stato di avanzamento del lavoro di riorganizzazione tabella, perchè in codesto frangente, la label è visibile sullo schermo.
Ciao.
o se, invece, non possa agire, dalla classe chiamata, su un oggetto della form di partenza.
???
Ciao Picavbg, il tuo messaggio mi ha incuriosito, ed ho provato a fare qualcosa di analogo, convinto però dell'impossibilità di agire direttamente da una classe sull'oggetto di un'altra classe. Nel Form principale ho piazzato una Label ed in una classe secondaria ho inserito all'interno di una routine (chiamata dalla classe principale) un richiamo diretto appunto alla Label presente nel FMain:
FMain.Label1.Text = "Prova"
su questa riga della classe secondaria (che appunto richiama la Label di FMain) mi dà questo avviso di errore:
Unknown Symbol 'Label1' in class FMain.
Io lavoro con Gambas 3: che sia una risposta analoga alla tua "Not enough arguments" ?
Ciao Picavbg, il tuo messaggio mi ha incuriosito, ed ho provato a fare qualcosa di analogo, convinto però dell'impossibilità di agire direttamente da una classe sull'oggetto di un'altra classe. Nel Form principale ho piazzato una Label ed in una classe secondaria ho inserito all'interno di una routine (chiamata dalla classe principale) un richiamo diretto appunto alla Label presente nel FMain:
FMain.Label1.Text = "Prova"
su questa riga della classe secondaria (che appunto richiama la Label di FMain) mi dà questo avviso di errore:
Unknown Symbol 'Label1' in class FMain.
Io lavoro con Gambas 3: che sia una risposta analoga alla tua "Not enough arguments" ?
Non conosco G3 e perciò non sono in grado di dirti se le risposte siano o meno analoghe. Posso dirti, che dopo la lettura della tua risposta, ho fatto alcune prove con modifiche ad hoc:
Prova n.1:
Form05.form.Label16.Text = "RIORGANIZZAZIONE TABELLE.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." &
Messaggio di Errore --> Unknown Symbol 'form' in class Form05
Prova n.2:
DIM Frm5 AS Form05
Frm5.Label16.Text = "RIORGANIZZAZIONE TABELLE.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." &
Messaggio di Errore --> Null Object
Prova n.3:
DIM Frm5 AS Form05
Frm5.form.Label16.Text = "RIORGANIZZAZIONE TABELLE.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." &
Messaggio di Errore --> Null Object
Comunque, se ho pensato ad utlizzare come interfaccia di messaggistica, una Label della Form ancora visibile sullo schermo, è perchè ho già utilizzato detto metodo, ma relativamente a campi-dati contenuti nella formxx.class, come puoi rilevare dall'esempio seguente:
FMain.$_SceltOper = "NoMenu"
Probabilmente posso farlo per un campo-dati della classe, ma non per una proprietà di un oggetto della form corrispondente.
ho provato a fare una prova, ma a me funziona correttamente , non son sicuro che sia la tua stessa situazione però. provala
Magnifica prova! Ho guardato con attenzione, dopo avere anche eseguito il programmino di prova che hai allegato prima ed ho capito perchè a me non funzionava. Ho apportato quindi le dovute modifiche al mio programma e, finalmente, il contatore trattamenti ha cominciato a girare proprio come desideravo.
Il tuo esempio ha calzato perfettamente ed ho capito le correzioni da apportare dopo essermi soffermato sulle seguenti due istruzioni:
FMain.Label2.Text = i
FMain.nuovoform.Label2.Text = i
Infatti la prima va a modificare una label della Form FMain ed è il modello di scrittura già a me noto; la seconda include un nuovo parametro, quello della citazione della Form principale e di tutte le sue Form dipendenti, che altrimenti non potrebbero essere raggiunte, in fase di esecuzione, da Gambas, perchè non le può riconoscere. Rappresenta in definitiva una sorta di percorso sulle Form "parent" del programma fino ad arrivare a quella contenente l'oggetto su cui intervenire.
Grazie per il suggerimento, ma soprattutto per il tempo che mi hai dedicato per tirare fuori, attraverso l'esempio pratico, una logica implicita, alla quale non avevo assolutamente pensato. :yeah:
:2birre: :ciao: