Autore Topic: [RISOLTO] Chiamata di form dipendenti dalla MainForm  (Letto 2506 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
[RISOLTO] Chiamata di form dipendenti dalla MainForm
« il: 27 Febbraio 2010, 13:16:38 »
Approfittando dei problemi logici sull'uso di SQLite3, sto rivedendo il mio programma il quale all'avvio presenta una MainForm con la sua barra di menu, in cui è possibile scegliere la successiva funzione da svolgere. Ebbene, sto riflettendo sulla convenienza di utilizzare la MainForm come Form-padre e avviare attraverso le scelte da menu le Form-figlie quante sono le funzione selezionabili da menù. In VB,  se non ricordo male, il concetto di Form-padtre e Form-figlio non esiste, ma esiste quello di Form-modale. Ma dire Form-modale e Form-padre è la stessa cosa?

Ho guardato qualche discussione in cui md9327 ha fornito chiarimenti in merito, ma il dubbio m'è rimasto, come m'è rimasto il dubbio su quale metodo di chiamata form è più pratico fra:
1) non definire alcuna dipendenza fra Form ed effettuare le chiamate di volta in volta in maniera assolutamente libera (metodo SDI ?)
2) definire dipendenze fra form, in modo che alla chiusura del form chiamato il controllo ritorni al suo parent di provenienza (metodo MDI?)

È chiaro che, In merito all'argomento suesposto, ho pochissimi concetti, ma molto ben confusi. :D :D

Stabilito codesto necessario punto di partenza conoscitiva, dovrò poi relazionare adeguatamente i form fra di loro, nella speranza di non dover buttar giù ancora una volta il programma, intervenendo pesantemenete sul codice delle varie classi, come sto già facendo per la gestione dei dati di DB.

Ciao a tutti.
« Ultima modifica: 16 Marzo 2010, 10:55:42 da Picavbg »
:ciao:

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #1 il: 27 Febbraio 2010, 23:57:20 »
I form modali sono form particolari che vengono aperti chiamandoli con l'istruzione NomeForm.ShowModal.
Che cosa sono? In pratica sono form indipendenti dai primi ma la cui visualizzazione blocca l'esecuzione sul form appena aperto, in modo che l'utente non possa cliccare sul form da cui è stato avviato. Per capirsi sono modali le finestre di richiesta di input obbligatorio all'utente che anche il sistema spesso visualizza: o clicchi sul form in questione oppure il click su un'altra parte del desktop non è possibile.

La differenza fra SDI e MDI riguarda l'apparenza dell'applicazione. Un'applicazione SDI è un programma in cui per ogni funzione si apre una finestra indipendete: tanto per capirsi, è un'applicazione SDI Gimp, dove hai la finestra a SX per i tool, quella a DX per le info e poi un'altra finestra per l'immagine. Era SDI anche il vecchio Gambas 1.x.
Un'applicazione MDI è invece un programma in cui hai un contenitore principale all'interno del quale si gestiscono le finestre dei vari tool. Un esempio di applicazione MDI è Firefox, dove ogni scheda aperta è un'istanza a sé stante del browser, oppure lo stesso IDE di Gambas, dove hai tutto racchiuso all'interno di un'unica finestra.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #2 il: 28 Febbraio 2010, 07:55:51 »
I form modali sono form particolari che vengono aperti chiamandoli con l'istruzione NomeForm.ShowModal.
Che cosa sono? In pratica sono form indipendenti dai primi ma la cui visualizzazione blocca l'esecuzione sul form appena aperto, in modo che l'utente non possa cliccare sul form da cui è stato avviato. Per capirsi sono modali le finestre di richiesta di input obbligatorio all'utente che anche il sistema spesso visualizza: o clicchi sul form in questione oppure il click su un'altra parte del desktop non è possibile.
Quindi, utilizzando form modali, se, mentre è attivo quel tipo di form, volessi andare accedere ad un alto documento, estraneo al programma Gambas attivo, o al form della classe chiamante, non avrei alcuna possibilità di farlo, perchè quella modalità me lo impedirebbe.
Allora un Form-figlio può non essere un Form-modale, mentre un Form-modale è un Form-figlio. Ho capito bene?
Ciao.

:ciao:

Offline Berserker79

  • Grande Gambero
  • ***
  • Post: 201
    • Mostra profilo
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #3 il: 28 Febbraio 2010, 11:13:33 »
E' vero che richiamando un form con showmodal o showdialod, l'utente è obbligato ad agire su quest'ultimo, ma è anche vero che se il form da cui viene richiamato ha un menù, questo, stranamente, è consultabile dall'utente, vanificando in parte la chiamata di tipo modale.
Ciao.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #4 il: 01 Marzo 2010, 10:44:56 »
@Picavbg:
diciamo che l'interdizione ad usare form esterni al form modale è limitato in Gambas al programma in esecuzione.
Se vuoi cliccare su una finestra di un'altra applicazione o del desktop lo puoi fare.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #5 il: 02 Marzo 2010, 00:03:02 »
diciamo che l'interdizione ad usare form esterni al form modale è limitato in Gambas al programma in esecuzione.
Se vuoi cliccare su una finestra di un'altra applicazione o del desktop lo puoi fare.
Quindi, in pratica, utilizzare in Gambas form modali o form child produce lo stesso risultato di interdipendenza col form chiamante, per cui, a parte le considerazioni di Berserker79 
Citazione
è anche vero che se il form da cui viene richiamato ha un menù, questo, stranamente, è consultabile dall'utente, vanificando in parte la chiamata di tipo modale.
, alle quali si può ovviare sfruttando la propreietà enable=false sui menu della relativa barra, solo quando il form chiamato finisce il suo compito ed il controllo  ritorna al form chiamante, quest'ultimo riprende lo stato di "Attivo".
Se ho capito bene, mi resta da capire solamente quale procedura tecnica di chiamata è più semplice.
Ciao.
:ciao:

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #6 il: 02 Marzo 2010, 00:19:11 »
Se non vuoi che l'utente possa interagire con il form chiamante mentre è visualizzato un altro form (ad esempio se _deve_ rispondere a qualche domanda o selezionare qualcosa) allora conviene fare chiamate modali. Altrimenti, se l'utente deve poter interagire con i 2 form contemporaneamente, chiamali normalmente.

Tieni conto di una cosa: un form modale è legato al form chiamante anche per il desktop manager, per cui cliccando sulla riduzione ad icona del form genitore rimpicciolisci anche il figlio. Nel secondo caso no, ogni form è a sé stante.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #7 il: 12 Marzo 2010, 17:52:06 »
Se non vuoi che l'utente possa interagire con il form chiamante mentre è visualizzato un altro form (ad esempio se _deve_ rispondere a qualche domanda o selezionare qualcosa) allora conviene fare chiamate modali. Altrimenti, se l'utente deve poter interagire con i 2 form contemporaneamente, chiamali normalmente.
Tieni conto di una cosa: un form modale è legato al form chiamante anche per il desktop manager, per cui cliccando sulla riduzione ad icona del form genitore rimpicciolisci anche il figlio. Nel secondo caso no, ogni form è a sé stante.
Scusa Leo se ho tralasciato questa discussione per un pò di giorni, ma, come avrai sicuramente, appreso, ho incontrato qualche problema con errori strani provocati dal tentativo di imparare ad usare i gruppi di oggetti all'interno di una Form. Ora che gli errori sono stati consegnati alla giustizia esadecimale per la successiva condanna a mai più comparire durante l'esecuzione del mio povero programma,  ;) posso riprendere perchè vorrei impostare il .show delle Form chiamate di volta in volta attraverso le funzioni agganciate ai menù della FMain.
È chiaro che se da un Menù presente nella FMain, scateno l'evento relativo:
Codice: [Seleziona]
PUBLIC SUB MenuX_Click() 
  FormX.Show
END
La FormX si apre, mentre resta attiva la FMain e tutte le altre finestre eventualmente selezionabili nel pannello di Gnome/Kde.

Se però il codice relativo all'evento scatenato è il seguente:
Codice: [Seleziona]
PUBLIC SUB MenuX_Click() 
  FormX.ShowModal
END
La FormX si apre, ma da quel momento e fino a quando il controllo non ritorna, da codice, alla Form chiamante(FMain nell'esempio) non riesco  a svolgere alcuna funzione dentro appunto la Form chiamante, ma non posso nemmeno rientrare nella finestra di connessione Internet per consultare il Forum di Gambas.

Infine, se il codice relativo all'evento scatenato è il seguente:
Codice: [Seleziona]
PUBLIC SUB MenuX_Click() 
  FormX.ShowDialog
END
La FormX rappresenta una Form.children che si apre, ma ...non ho capito... se, come la modale, da quel momento e fino a quando il controllo non ritorna, da codice, alla Form chiamante, posso svolgere operazioni solo all'interno della orm chiamata, oppure, se posso ugualmente agire sulla Form chiamante, Sicuramente potrò invece agire sulle altre finestre disponibili per la selezione nel pannello di Gnome/Kde.

In ogni caso, se volessi rendere attiva la Form successiva, prima ancora di eseguire lo show, in modo permetterle l'esecuzione di codice preliminare al metodo show, come potrei fare?

Ti prego, se non ti pesa, di darmi anche un piccolo chiarimento: in questo momento, prima che prosegua nella stesura del programma, è molto importante per me. Ne va anche della mia crescita in Gambas. Come faresti a caricarti di una simile responsabilità? :D
Ciao.

« Ultima modifica: 12 Marzo 2010, 18:51:43 da Picavbg »
:ciao:

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #8 il: 12 Marzo 2010, 21:43:05 »
ciao

non ho capito bene cosa vuoi realizzare?
1) una main che chiama form in modalità assoluta
2) una main che apre dei form che devono essere child e sempre in primo piano
2) oppure una main che richiama i form e che quando si chiude chiude tutti i form child

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #9 il: 13 Marzo 2010, 09:33:07 »
non ho capito bene cosa vuoi realizzare?
1) una main che chiama form in modalità assoluta
2) una main che apre dei form che devono essere child e sempre in primo piano
2) oppure una main che richiama i form e che quando si chiude chiude tutti i form child
Non si tratta di ottenere un'indicazione in base all'utilizzo da fare, ma se hai letto bene il mio precedente post, cerco solo di capire il meccanismo di funzionamento dei 3 metodi di chiamati messi a disposizione da Gambas, allo scopo di potere assumere le giuste conoscenze in merito ed adattare, nelle realizzazioni  di programmi, di volta in volta, quella più confacente alle necessità del momento; per cui:
chiamata di una Form con formX.show ---> si attiva la nuova form con l'apertura di una finestra in aggiunta alle altre già attive.
chiamata di una Form con formX.showModal ---> si attiva la nuova form con l'apertura di una finestra in aggiunta alle altre. Quali restano ora attive?
chiamata di una Form con formX.showDialog ---> si attiva la nuova form con l'apertura di una finestra in aggiunta alle altre. Quali restano ora attive?
Spero di essere stato più chiaro.
Ciao
:ciao:

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #10 il: 13 Marzo 2010, 14:35:08 »
ho letto il tuo post precedente.
non avevo capito che la tua era solo curiosità per imparare anche perchè in un'altro post hai chiesto aiuto prima di procedere con il programma.


Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #11 il: 13 Marzo 2010, 16:58:30 »
@ Dex:
La curiosità, come la definisci tu, nasce sempre da una necessità di programmazione e, anche se, possa sembrare inutile, perchè basta fare delle prove pratiche di attivazione per vedere cosa succede, le prove pratiche esulano dalla possibilità di cogliere  quegli eventuali spunti di raffinata differenza che possiede solamente chi ha avuto modo di vivere tante realtà a "gambas" tratta .
Nel caso specifico intanto ho risolto praticamente, perchè da prove veloci fatte oggi, in Gambas sembra che:
Citazione
chiamata di una Form con FormX.showModal
chiamata di una Form con FormX.showDialog
i due metodi producano lo stesso effetto; infatti, una volta attivata la FormX.figlia, in entrambi i casi, resta inattiva, durante tutto il periodo di attivazione della FormX, solamente la Form.chiamante, mentre, tutte le altre finestre già aperte sono raggiungibili riapribili tranquillamente. Tutto ciò mi dice che posso indifferentemente chiamare una FormX.fighlia indifferentemente sia con FormX.showModal, sia con FormX.showDialog
Perciò, salvo ulteriori interventi correttivi da parte di chi ne sa di più, mi pare che non ci sia altro da dire.  :D
Ciao.
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #12 il: 13 Marzo 2010, 17:26:51 »
Ho fatto una prova pratica ed ho visto che in Gambas
Codice: [Seleziona]
Formx.ShowModal 
Formx.ShowDialog
si comportano allo stesso modo, però in entrambi i casì non è mpossibile riprendere la form chiamante, quando è attiva la form dipendente. Certo sarebbe bello capire quando convebnga utilizzare l'una o l'altra, perchè, a prima vista, per le pèrove fatte sembra prorio che usare l'uno o l'altro metodo sia una pura scelta  abitudinaria del programmatore e nient'altro.
:D
Ciao a tutti.
« Ultima modifica: 15 Marzo 2010, 22:58:11 da Picavbg »
:ciao:

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #13 il: 13 Marzo 2010, 19:52:54 »
Ricorda di scrivere il testo esitandolo con i tag code.. ;)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Chiamata di form dipendenti dalla MainForm
« Risposta #14 il: 13 Marzo 2010, 22:07:16 »
Ricorda di scrivere il testo esitandolo con i tag code.. ;)
... ??? ... Non ho capito, Scusa la mia ignoranza, puoi spiegarmi in modo elementare quello che intendi?  :-[ :-[ :-[
Ciao.
:ciao: