Autore Topic: loop nel codice degli oggetti interni ad una Form  (Letto 2078 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: loop nel codice degli oggetti interni ad una Form
« Risposta #15 il: 31 Luglio 2010, 16:31:30 »
Benissimo! Dopo un paio di giorni necessari a superare lo shock, ho ripreso il programma, nella speranza di potere progressivamente capire come lasciare inalterata la struttura logico-sequenziale di Gambas.
Supponiamo che dentro una Formx.Form abbia costruito una  ComboBox, una  TextBox ed un Button.
Supponiamo ancora di avere utilizzato nella classe corrispondente, Formx.Class, il metodo _new per eseguire le operazioni preliminari, dopo avere richiamato l'oggetto con Formx.Show/Showmodal.
A fine esecuzione del metodo _new, il focus viene attribuito automaticamente al primo oggetto in elenco di "Gerarchia" dei tre interni alla Formx, cioé la ComboBox
Prima ancora che l'utente possa digitare qualcosa, dovrei compilare ComboBox.List per permettergli un eventuale selezione delle stringhe disponibili al momento.
Fino ad ora ho svolto codesto compito dentro il ComboBox_GotFocus. Non volendo prudentemente utilizzare tale evento, quale dovrei utilizzare? (l'Activate, il KeyRelease, il Mouseup, ...)
Scusa la domanda da neo apprendista in  prova, ma allo stato attuale delle arti, sono entrato completamente nel pallone ed ho dato un colpo di spugna a tutte le mie più che modeste conoscenze.
Cerco perciò di ricominciare da zero.
Capisco che ... rompo, ma se sono diventato noioso  a causa della mia ignoranza, dimmelo pure, oppure lasciami al mio livello di ignoranza.
In ogni caso, grazie!
 :(
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: loop nel codice degli oggetti interni ad una Form
« Risposta #16 il: 01 Agosto 2010, 10:25:16 »
Nuova necessità:
Rimanendo sempre nell'esempio del precedente post, cioé Formx.Form con tre oggetti (una  ComboBox, una  TextBox ed un Button), cliccando sul Button dovrei tornare a dare il focus alla TextBox. Ordinariamente Gambas dà il focus all'oggetto che nel suo ordine gerarchico risulta iimmediatamente successivo, cioè la ComboBox.
Non volendo utilizzare il comando TextBox.SetFocus, cosa posso fare?
Chiedo scusa per l'insistenza a proseguire nell'argomento, ma non ho proprio capito  ancora le regole del buon utilizzatore di Gambas.
 :(
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: loop nel codice degli oggetti interni ad una Form
« Risposta #17 il: 01 Agosto 2010, 23:53:12 »
Ho ragionato un pò sul problema; ho eliminato la Formo_Show, trasferendo il suo contenuto nella nuova _new. Visto che non ci sono risposte ai miei dubbi, segnalati nei precedenti due post, ho comandato il setfocus che mi serviva per attivare la ComboBox a cui  avevo accennato.
Ebbene, guardando le print inserite nei vari eventi, non ho più riscontrato ingerenze di loop di Gambas. Per il momento sembra che tutto vada secondo le mie aspettative, però non mi sento di cantare  vittoria. Ti farò sapere non appena mi sentirò più sicuro, perché vorrà dire che ci ho capito qualcosa.
Spero, questa volta, ... entro l'anno.   ;D
Ciao
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: loop nel codice degli oggetti interni ad una Form
« Risposta #18 il: 02 Agosto 2010, 10:45:01 »
Dato che hai inserito tre post consecutivi, e che io li ho letti solo ora, ti riassumo tutto qui:

1) và bene l'uso di new() per impostare lo stato iniziale della form;
2) alla selezione di elemento dalla combobox si scatena l'evento Click(), per cui puoi sarlo lì cosa l'utente ha selezionato;
3) una volta che hai determinato cosa fare con l'emento selezionato dalla combo, puoi attivare il focus sulla textbox;

tieni conto che gli eventi lostfocus e gotfocus vengono sempre scatenati, anche se non selezioni nulla dalla combo, per cui tieni conto bene di questa cosa.

4) una volta inserito un testo, questo puoi analizzarlo anche durante l'input (con keypress ecc.), come anche con lostfocus (come hai fatto tu), poi decidi cosa fare dopo il controllo;

insomma, tu vuoi creare il classico giochetto del giro di DO... :-)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: loop nel codice degli oggetti interni ad una Form
« Risposta #19 il: 06 Agosto 2010, 22:33:49 »
Ho riletto con interesata attenzione il wiki relativamente ai metodi nascosti e devo dire che ho trovato il metodo _New molto interessante, anche se non ho capito come richiamare una form da un'altra classe. Credo che la chiamata dovrebbe avvenire grosso modo come si fa per richiamare una classe esterna di tipo dinamico, anche se le form appartengono alle classi statiche. Ho cercato una spiegazione pratica nel tuo "PgDesigner", ma anche lì ho capito assai poco.
Mi sono reso conto che, per quanto già sviluppato nel mio programma, allo stato attuale, non mi conviene rivedere tutti i richiami delle form create per sostituire ai vari Formx.show/Showmodal le nuove chiamate tramite il metodo "_New"; però posso senz'altro cominciare ad utilizzare il metodo _New, per le prossime form da creare. Perciò mi sembra questo il momento di capire come eseguire la chiamata, passando anche i parametri per abbandonare l'utilizzo di variabili.globali. Mi potresti fare un esempio di chiamata con passaggio di parametri per aiutarmi a capire?
 :(


Un altro dubbio: Utilizzando la chiamata di una Form col metodo _new per passare dati, viene mantenuta la dipendenza della Form così chiamata dalla Form, diciamo, chiamante?
« Ultima modifica: 07 Agosto 2010, 09:10:04 da Picavbg »
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: loop nel codice degli oggetti interni ad una Form
« Risposta #20 il: 08 Agosto 2010, 13:16:53 »
Che sofferenza !!! :rolleyes:
Mentre aspetto la tua risposta, ho continuato simulando una chiusura di giornata non bilanciata. In queste condizioni, la mia logica vorrebbe che il controllo tornasse dalla Form3.class alla FMain. Class, perciò ho scritto :
Nella Form3.FineBilancioGG_Click
Codice: [Seleziona]
PUBLIC SUB FineBilancioGG_Click()
DIM DB_Connection AS NEW Connection
bla...bla...bla
bla...bla...bla
SELECT CASE Message.Error("TOTALI DI QUDRATURA ERRATI" & Chr(10) & Chr(10) & "Cosa vuoi fare ?", "Correggo e Ripeto Chiusura", "Finisco, ma lascio la giornata 'APERTA'")
          CASE 2
            b_SwFrm3Clo = TRUE
            ME.Close
  END SELECT
END
Nella Form2. PulsFineMovv_Click, da cui avevo richiamato la Form3:
Codice: [Seleziona]
PUBLIC SUB PulsFineMovv_Click()
  Form3.Showmodal
  IF Form3.b_SwFrm3Clo = TRUE                 'Test necessario per riconoscere la decisione operativa di "CHIUSURA GIORNATA"
      Form3.b_SwFrm3Clo = FALSE
      ME.Close
  ENDIF
END
Ecco, purtroppo, l'ultima Me.Close non viene eseguita ed il controolo rimane dentro la Form2.class.
Per dare un'idea graficamente schematica, dovrebbe avvenire quanto riprortato nell'allegato

Come fare per ritornare alla FMain?   ???
 :( :(
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: loop nel codice degli oggetti interni ad una Form
« Risposta #21 il: 11 Agosto 2010, 15:00:23 »
Poiché ho avuto l'impressione che il programma a cui si aggancia la presente discussione non é adatto a scrivere codice di prova per capire i metodi nascosti, ho aperto la http://www.gambas-it.org/smf/index.php?topic=1259.0. Spero che qualcuno mi possa aiutare a capire, ... cioé, a crescere. :)
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: loop nel codice degli oggetti interni ad una Form
« Risposta #22 il: 15 Agosto 2010, 17:31:23 »
Scusa il ritardo...

Anche se hai aperto un'altra discussione, ti faccio subito un esempio su _new().

Mettiamo come esempio, di aver creato una Form, di nome XYZ, che deve accettare due parametri, di cui uno obbligatorio:
Codice: [Seleziona]
PUBLIC SUB _new(parametro1 AS String, OPTIONAL parametro2 AS Boolean = FALSE)
  ...
  ME.Text = parametro1
  ME.FullScreen = parametro2
END
Nota: tieni presente che i parametri OPTIONAL devono seguire sempre i parametri obbligatori: parametro1 è obbligatorio in questo caso.

Ora, vogliamo creare la form, per cui dobbiamo procedere con il seguente codice:
Codice: [Seleziona]
DIM p1 AS String = "PROVA" 'Titolo della form
DIM p2 AS Boolean = TRUE 'Espande la form
DIM f AS NEW XYZ(p1, p2)
Come vedi la cosa è relativamente semplice. Il metodo _new() viene sempre eseguito, e prima di procedere alla sua visualizzazione, la Form viene condizionata dal codice inserito in questo metodo. Una volta terminato, il metodo _new() non viene più chiamato (altrimenti scombinerebbe tutto), e la gestione passa al manager delle form (a Gambas tanto per intenderci...).

Comunque, se hai dubbi domanda, sò che a volte rispondo con un certo ritardo, ma alla fine la risposta arriva... :-)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: loop nel codice degli oggetti interni ad una Form
« Risposta #23 il: 15 Agosto 2010, 18:06:44 »
Penso di avere capito quello che dici, però mi aspettavo una risposta alla mia domanda della discussione  http://www.gambas-it.org/smf/index.php?topic=1259.0 . Ti prego perciò di guardare quella.
Ciao.
« Ultima modifica: 15 Agosto 2010, 23:00:07 da Picavbg »
:ciao: