Autore Topic: Due form che devono interagire  (Letto 4023 volte)

  • Visitatore
Due form che devono interagire
« il: 22 Marzo 2008, 23:18:55 »
Altra domandona da mille euro in gettoni d'oro

Ho bisogno di far interagire n°2 form.

Esempio :

Sul form2 devo vare un operazione solo se un togglebutton ha valore -1 ....... o anche ricavarmi il form1.text(titolo) eseguendo una determinata operazione sul form2 ...

So fare la cosa aggiungendo una public sub sul form1 e passandogli i valori ma diventa un lavoro immane ....

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Due form che devono interagire
« Risposta #1 il: 23 Marzo 2008, 00:19:49 »
Sempre con PUBLIC.
Dichiari PUBLIC procedure o funzioni di un Form che vuoi siano accessibili da altri Form della tua applicazione.
Visita il mio sito personale: http://www.leonardomiliani.com

  • Visitatore
Re: Due form che devono interagire
« Risposta #2 il: 23 Marzo 2008, 00:52:49 »
Si , ok per le SUB ma se io ho bisogno di usare gli oggetti del form , le textbox, le label ecc ecc....

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Due form che devono interagire
« Risposta #3 il: 23 Marzo 2008, 01:38:10 »
Devi crearti gli oggetti in runtime invece che inserirli nel form dall'IDE di Gambas.

Nel form in cui vuoi ci sia un widget controllato da un altro form, devi dichiarare il widget così:
Codice: [Seleziona]

PUBLIC nome_widget AS NEW tipowidget(ME)

nella sezione relativa alle variabili globali del form.

Poi, nell'evento Open del form devi scriverti a mano tutto il codice di creazione dei widget. Così creati, i widget sono gestibili da altri form.

Ti allego una scemenza di progetto.
Cliccando sul pulsante del primo form ne apri un secondo. Cliccando sul pulsante di quest'ultimo imposti il valore della progressbar del primo.
Visita il mio sito personale: http://www.leonardomiliani.com

  • Visitatore
Re: Due form che devono interagire
« Risposta #4 il: 23 Marzo 2008, 14:54:11 »
Cacchio..... avevo trovato questa cosa nella guida ....  l'avevo fatta anche funzionare ma pensavo mi sfuggisse un qualcosa tipo

PUBLIC nome_widget AS NEW tipowidget(FORMxxx)

E' un lavoraccio far sta cosa ..... vabbè grazie comunque

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Due form che devono interagire
« Risposta #5 il: 23 Marzo 2008, 16:47:38 »
Scusa leo se intervengo, ma nelle proprietà del progetto è possibile definire questa cosa, ovvero se rendere PRIVATE o PUBLIC gli oggetti delle form.
Agendo su questo controllo a livello globale, non devi più preoccuparti di creare a mano le cose, a meno di un'esigenza particolare.

  • Visitatore
Re: Due form che devono interagire
« Risposta #6 il: 23 Marzo 2008, 17:04:58 »
Funziona ....... ed era banalissima come cosa !!!!!!

Ci ho perso sopra una valanga di tempo per niente =P

Grazie md9327 !!!

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Due form che devono interagire
« Risposta #7 il: 23 Marzo 2008, 19:14:49 »
Non ero mai passato dalla semplice dichiarazione PUBLIC per un widget. Avevo sempre fatto tutto a manina... Ottima cosa, grazie!  ;-)
Visita il mio sito personale: http://www.leonardomiliani.com

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Due form che devono interagire
« Risposta #8 il: 26 Marzo 2008, 00:55:08 »
stessa cosa vale per le variabili

dichiarandole public si possono utilizzare da altri form.class semplicemente indicando il form di provenienza esattamente come per gli oggetti

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Due form che devono interagire
« Risposta #9 il: 28 Marzo 2008, 01:10:09 »
Citazione

md9327 ha scritto:
Scusa leo se intervengo, ma nelle proprietà del progetto è possibile definire questa cosa, ovvero se rendere PRIVATE o PUBLIC gli oggetti delle form.
Agendo su questo controllo a livello globale, non devi più preoccuparti di creare a mano le cose, a meno di un'esigenza particolare.


Ho provato, ma non sono riuscito a capire come applicare questo concetto, qualche delucidazione in più?
Grazie, ciao  :eh:
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Due form che devono interagire
« Risposta #10 il: 28 Marzo 2008, 13:19:11 »
Citazione

tornu ha scritto:
Citazione

md9327 ha scritto:
Scusa leo se intervengo, ma nelle proprietà del progetto è possibile definire questa cosa, ovvero se rendere PRIVATE o PUBLIC gli oggetti delle form.
Agendo su questo controllo a livello globale, non devi più preoccuparti di creare a mano le cose, a meno di un'esigenza particolare.


Ho provato, ma non sono riuscito a capire come applicare questo concetto, qualche delucidazione in più?
Grazie, ciao  :eh:


Ciao.

Come ha scritto md9327, se nel menu di Gambas vai in Progetto --> Proprietà --> Opzioni --> Compilazione puoi scegliere se i controlli (oggetti) delle form sono PUBLIC.
Ciò vuol dire che se selezioni questa opzione, tutti gli oggetti nelle tue form saranno accessibili anche dalle altre form.
Esempio: nella Form1 c'è uno spinbox, il cui valore deve essere gestito dalla Form2.
Ho allegato piccolo esempio. Ciao.

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Due form che devono interagire
« Risposta #11 il: 28 Marzo 2008, 15:58:34 »
Grazie giulio per la risposta e l'allegato, adesso ho le idee in po più chiare, faccio un paio di provine che spero mi aiutino a semplificare il codice del mio progetto.
Un esempio al giorno....aiuta la comprensione di Gambas....
Ciao
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Due form che devono interagire
« Risposta #12 il: 28 Marzo 2008, 23:14:35 »
Per alcune funzioni le vostre indicazioni mi hanno semplificato il compito, ma un aspetto non riesco a capire, faccio un esempio:
ho due form, in uno eseguo una query che mi popola una ColumnView dal quale seleziono un record che dovrebbe popolarmi nel secondo form delle TextBox con i campi che lo compongono.Attualmente questa funzione e svolta da delle variabili public che vengono inizializzate dal click sulla ColumnView e popolano le TextBox del secondo form. Il problema e che le variabili cominciano a essere troppe e iniziano a crearmi qualche problema di gestione, vorrei trovare un'altro modo per interagire tra un form e un'altro.  :muro:
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Due form che devono interagire
« Risposta #13 il: 29 Marzo 2008, 01:09:54 »
Come suggerito per le proprietà PUBLIC di un oggetto, puoi tranquillamente scriverci sopra dalla form madre, ovvero puoi crearti l'oggetto form figlio e poi popolare i controlli di questa form con i dati che vuoi, direttamente dalla form madre, quindi apri la form figlia.
Un'altra alternativa, che uso di norma, è passare un oggetto (tipo Collection o Object[] o Variant[], insomma un array) con i dati che popoli preventivamente dalla form madre; in questo caso, ad inizio codice della form figlia, devi aggiungere il metodo:

PUBLIC SUB _new(var as Object[])
END

la variabile "var" contiene tutti i dati necessari al popolamento della form figlia, che ti crei prima della sua creazione dalla form madre e li passi in questo modo:

SUB Apri_Form_Child()
  DIM f as FormChild 'la tua form figlia
  DIM data as NEW Collection
  data.Add(var_dato1, 'dato1') 'valore, id
  data.Add(var_dato2, 'dato2') 'valore, id
  f = NEW FormChild(data)
  f.ShowModal()
END

Come vedi, "data" è un oggetto Collection, in cui inserisci i valori che ti servono per popolare la FormChild; il valore è identificabile dal relativo id. Dopodiche crei la FormChild e gli passi "data"; all'interno di FormChild ti prendi data e ci fai quello che ti pare, inoltre puoi anche utilizzare "data" per ritornare alla form madre altri dati... insomma come ti pare...


E' chiaro ?

Bye

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Due form che devono interagire
« Risposta #14 il: 29 Marzo 2008, 01:23:14 »
Grazie md9327 per la spiegazione e l'esempio,

Citazione

md9327 ha scritto:
Come suggerito per le proprietà PUBLIC.....................

E' chiaro ?

Bye


E chiaro?
E' una parola! quello che mi hai postato per me è arabo...scherzo, mi metto sotto e vedo di applicare il suggerimento, se avrò ancora difficoltà....ci vediamo qui.
Grazie ancora, ciao.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)