Autore Topic: Come passare un parametro a una form?  (Letto 1786 volte)

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Come passare un parametro a una form?
« il: 16 Giugno 2008, 10:41:51 »
Oggi è giornata di domande :-)

Non capisco come fare una cosa che sono certo che è banale, ma che proprio non mi viene in mente come agire:
ho un simpatico campo valuebox di tipo data, e ho settato un'azione quando viene premuto il tasto destro del mouse (azione _menu).
Adesso vorrei richiamare un'altra form passando la data eventualmente presente nel campo, e visualizzare in questa form un datachooser impostato su quella data. Naturalmente, scegliendo una data, vorrei che questa fosse passata all'indietro al codice principale, in modo da essere sostituita nel campo a video.

Mi sfugge come posso passare a un'altra form un parametro, e come fare per riceverlo all'indietro.

So che si tratta di cose "di base", ma non ho trovato esempi di questo genere...
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Come passare un parametro a una form?
« Risposta #1 il: 16 Giugno 2008, 11:13:46 »
Di nuovo!!!
Dopo avere scritto la domanda, ho trovato la risposta! :-)
In realtà solo mezza risposta.
Mi spiego: il valore in uscita va bene. Ho definito un campo pubblico e lo leggo normalmente nel secondo form. Prima di richiamare il form ho spostato in questo campo il valore della data presente nel campo a video.
Ma la domanda ora è: in quale momento devo rispostare all'indietro il campo estratto dal datachooser nel campo da mettere a video?
Immagino che basterebbe rendere pubblico il campo a video, ma vorrei evitare, per poter usare questo sistema anche per le altre date del programma.

Il codice per adesso è una roba del genere...

Codice: [Seleziona]

PUBLIC data AS date
...
PUBLIC SUB dtIntervento_Menu()

  IF IsDate(dtIntervento.Value) THEN
    data = dtIntervento.value
  ELSE  
    data = Now()
  END IF
 
  frmDate.Center
  frmDate.Visible = TRUE

END


Nel momento in cui si esegue il comando "visibile = true", il controllo passa all'altra form, e lì ho il controllo sul doppio click.
Ma adesso "quando" devo spostare il risultato, che si trova nel campo "data", nel campo dtIntervento.value?
Saluti a tutti

Mario

g.paolo

  • Visitatore
Re: Come passare un parametro a una form?
« Risposta #2 il: 16 Giugno 2008, 13:15:25 »
Per fare quello che dici, ovvero passare parametri, mi trovo bene con le variabili di un modulo settate come "public".
In ogni punto del programma mi posso riferire ad esse con il metodo: nomemodulo.nomevariabile, ed ogni routine può agire sulle medesime e modificarne il valore.

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Come passare un parametro a una form?
« Risposta #3 il: 16 Giugno 2008, 14:01:10 »
Infatti ho usato questo metodo, ma non so in quale momento ripassare la variabile a video con il valore selezionato nella datachooser.
Probabilmente il problema si risolverebbe impostando la variabile pubblica con il puntatore della variabile che mi interessa...
Ma non so come si fa... :-)
Saluti a tutti

Mario

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Come passare un parametro a una form?
« Risposta #4 il: 16 Giugno 2008, 15:45:30 »
Ovviamente ho risolto :-)

E' stato sufficiente utilizzare il metodo Showmodal.
In questo modo il controllo passa al form, e la gestione eventi nel form di lancio si ferma, in attesa di uscire da quello chiamato. A quel punto, subito dopo, aggiorno il campo a video con quello restituito dal form chiamato e voilà!! :-)

Codice: [Seleziona]

  IF IsDate(dtFatturazione.Value) THEN
    data = dtFatturazione.Value
  ELSE  
    data = Now()
  END IF
 
  frmDate.Center
  frmDate.ShowModal
  dtFatturazione.value = data
Saluti a tutti

Mario

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Come passare un parametro a una form?
« Risposta #5 il: 16 Giugno 2008, 20:45:38 »
Ricorda che ogni oggetto ha alcuni metodi, tra l'altro non chiaramente descritti nella doc ufficiale, che possono essere utilizzati tranquillamente, e che corrispondono a precise fasi della vita dell'oggetto.

Quelli più importanti, sono:

PUBLIC SUB _new()

e

PUBLIC SUB _free()

rispettivamente:

_new(): creazione dell'oggetto
_free(): distruzione dell'oggetto

_new() puoi usarlo per passare dei parametri all'oggetto, proprio nella fase di creazione (non di apertura), e lo puoi utilizzare financo per creare oggetti all'interno di una Form.

_free() viene chiamato giusto nella fase finale di eliminazione dell'oggetto dalla memoria; lo puoi utilizzare, ad esempio, per terminare un timer (se si verifica un errore), oppure per chiudere un'attività, a prescindere dal resto.

Queste due funzioni, sono sempre e comunque chiamate, anche se non sono presenti nel codice dell'oggetto, perchè esistono comunque nella classe base di tutti gli oggetti creati in gambas (Object).

Se vuoi passare dati, puoi scrivere la funzione in questo modo:

PUBLIC SUB _new(parm1 as String, parm2 AS String, ..., parm3 AS Integer)
END

all'interno puoi assegnare i parametri ad altrettante proprietà dell'oggetto, o condizionarne il funzionamento (es. definire le dimensioni iniziali di una Form).

Spero la spiegazione sia stata esauriente.

Bye

Offline Mario

  • Grande Gambero
  • ***
  • Post: 138
    • Mostra profilo
    • http://overhill1963.blogspot.com/
Re: Come passare un parametro a una form?
« Risposta #6 il: 16 Giugno 2008, 20:46:59 »
Parecchio, grazie :-)
Saluti a tutti

Mario