Autore Topic: [RISOLTO] Passaggio dati tra due Form  (Letto 9079 volte)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #30 il: 06 Gennaio 2015, 19:55:23 »
Le vostre disquisizioni (comunque interessantissime) tra usare un metodo o un'altro, rispettare
i canoni della programmazione o meno, approcci didattici o professionali, non hanno migliorato
la mia comprensione (mi scuso, sicuramente per colpa mia) nell'utilizzare il miglior metodo
per passare dati da una Form ad un'altra. Al momento non sono riuscito ad applicare il metodo
di bidirezionalità indicato da Picavbg.

@ Gianluigi
Non ho capito l'utilità del tuo ultimo esempio che hai allegato in risposta a Picavbg.

Piccolo inciso rispetto ai vostri ultimi post:
Sono del parere (mio modestissimo punto di vista) che nella realizzazione di programmi siano essi per uso
didattico o professionale sarebbe giusto approciarli sempre con il modo più corretto e funzionale possibile,
naturalmente incide non poco anche l'esperienza e conoscenza del programmatore.
Apprezzo molto quando qualcuno tra i più esperti sul Forum spiega la differenza tra un metodo e un'altro,
o quando usarne uno al posto dell'altro a seconda del risultato che si vuol ottenere.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #31 il: 07 Gennaio 2015, 01:00:34 »
Ti allego una piccolissima dimostrazione che credo sia più esplicativa, così mi dici come avresti fatto tu e ci capiamo meglio.

Ho guardato il pochissimo codice che contiene il programmino d'esempio che hai allegato al tuo ultimo post, codice che avevo già letto in un tuo post precedente. Ho provato ad eseguirlo ma pare che sia stato scritto con una versione di Gambas più recente della mia, quindi non l'ho potuto provare. Guardando però il codice, In esso ho riscontrato due cose:
- Mi pare di capire che vuoi incorporare la FMain nella Form1, visto che passi alla Form1 la FMain come parametro, ma la FMain comprende la FMain.class e la FMain.Form. Non so se puoi passare col parametro Fmain sia l'una che l'altro. Non conosco Gambas così a fondo.
- La tua chiamata di Form1

Codice: [Seleziona]
Frm1 = New Form1(sParametri, FMain)
Frm1.Show

è eseguita in maniera che la Form1 sia perfettamente indipendente dalla FMain e ciò significa che tu puoi spostarti dall'una all'altra sia col Mouse che dai tasti scorciatoia senza dovere obbligatoriamente chiudere la Form1. Quindi mi pare che non riesci ad ottenere quell'inglobamento che vorresti. Inoltre, anche se richiami il costruttore della Form1, la successiva Form1.show non potrà mai e poi mai ricevere alcun effetto prodotto all'interno della Form1, sia perchè hai usato un metodo diverso da quello modale, sia perchè non hai indicato la variabile numerica dove fare pervenire il valore di ritorno a carico dell'istruzione di chiusura della Form1.

L'unica modalità per subordinare la Form1 alla FMain è quella di eseguire una chiamata di tipo modale. In questo modo il Form1, seppur non incorpori FMain, risulta dipendente da esso e FMain non è più disponibile per un suo utilizzo fino a quando la Form1 non sarà chiusa. Per ottenere poi il ritorno di un valore numerico occore fare la chiamata, come ho già detto più volte, esclusivamente con la seguente modalità:
Codice: [Seleziona]
Frm1 = New Form1(sParametri)    'dove includerai tutte le variabili che vorrai passare a Form1  per manipolarle
iNum = Frm1.Show

la Form 1 di contro utilizzarà il contenuto della sParametri ed al momento cella chiusura restituirà un valore, anche formale, ma soprattutto restituira l'array modificato coi nuovi valori che avrà determinato durante l'elaborazione di sua competenza:
Codice: gambas [Seleziona]

Private vParam As New String[]

Public Sub _new(vParamInp As Variant[])
vParam = vParamInp
End

Public Sub PulsMod_Click()
 vParam[1] = "fine prova"
End

Public Sub PulsEsci_Click()
'-----------------------------------------
Me.Close(0)     'Questo è il momento in cui il Form1 finisce il suo lavoro e si chiude la relativa finestra. A FMain viene restituito il valore 0, ma l'array sParametri risulta pure modificato nel suo 2° elemento.
End

Ora ho indicatoi chiaramente anche le istruzioni salienti da inserire nella Form1.class.

Insisto col dire che è l'unica modalità per passare in andata e ritorno dei parametri fra due Form, di cui il Form chiamato deve essere in dipendenza modale rispetto al chiamante.
 ;)
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #32 il: 07 Gennaio 2015, 01:10:52 »
Sono del parere (mio modestissimo punto di vista) che nella realizzazione di programmi siano essi per uso
didattico o professionale sarebbe giusto approciarli sempre con il modo più corretto e funzionale possibile,
naturalmente incide non poco anche l'esperienza e conoscenza del programmatore.
Apprezzo molto quando qualcuno tra i più esperti sul Forum spiega la differenza tra un metodo e un'altro,
o quando usarne uno al posto dell'altro a seconda del risultato che si vuol ottenere.

Ricorda che la programmzione non è un binario a percorso obbligato. Puoi sempre trovare percorsi, magari tortuosi, che ti portano alla fine sempre allo stesso risultato. Ogni programmatore costruisce un proprio metodo di lavoro, a seconda del suo grado di visibilità di un problema o di una meta da raggiungere. Praticamente l'importante è ottenere il risultato finale corretto. Sul metodo poi si possono fare ragionamenti ed affinamenti logistici a dismisura, ma quello che conta è il risultato finale. Con ciò non voglio dire che il programmatore A che riesce ad ottenere il risultato in 5" ed il programmatore B che invece ci riesce dopo avere fatto lavorare il suo programma per 2 giorni consecutivi, abbiano prodotto entrambi risultati accettabili. In casi del genere c'è sicuramente qualche cantonata di mezzo.  :D
 :ciao:
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #33 il: 07 Gennaio 2015, 10:41:19 »
Ricorda che la programmzione non è un binario a percorso obbligato. Puoi sempre trovare percorsi, magari tortuosi, che ti portano alla fine sempre allo stesso risultato. Ogni programmatore costruisce un proprio metodo di lavoro, a seconda del suo grado di visibilità di un problema o di una meta da raggiungere. Praticamente l'importante è ottenere il risultato finale corretto. Sul metodo poi si possono fare ragionamenti ed affinamenti logistici a dismisura, ma quello che conta è il risultato finale.
Condivido pienamente !
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #34 il: 07 Gennaio 2015, 21:48:10 »
@Vuott
Come ho già scritto, ribadisco che anch'io credo che il programmatore è padronissimo di scrivere il codice come meglio gli aggrada. Ciò non toglie che si possa discutere di cosa è meglio per ognuno di noi.

@Picavbg
Sostieni che avevo già postato questo codice? Posso chiederti dove?
E poi scusa ma fermarsi davanti all'incompatibilità di versione e non provare un codice così breve che poteva far capire cosa intendevo dire/dimostrare...
Ricordo a me stesso che basta fare doppio click sulla cartella del progetto con spuntata l'opzione di Visualizza > Mostra file nascosti e fare doppio click sul file .src e poi visualizzare i file .class (quelli con icona la tazzina del caffè) col tasto destro del mouse per aprirli con l'editor di testo.
Basta copiare e fare le semplicissime form et voilà.
Comunque tranquillo non ti sei perso niente.

@Tornu
Come puoi ben comprendere è quasi impossibile o è molto difficile capire cosa sia che esattamente un altra persona voglia ottenere dal proprio codice.
Uno può offrire uno spunto dal proprio punto di vista per quel poco che ha compreso.
Qui si trattava comunque di cosa già risolta ne ho voluto parlare proprio perché ne dobbiamo poi scrivere nel libro.
E' quindi nata questa disquisizione con Picavbg che ha dato il suo suggerimento dicendo che se si parla di dati scambiati fra finestre non si può prescindere da quanto insegnato da md9327.
Ora siccome sembra che io non sappia di cosa stiamo parlando esemplifico in modo minimale quanto io ho compreso del suddetto insegnamento:
Per provare questo codice occorre creare un progetto grafico QT avente la Fmain con un button1 e una Form1 con una textlabel1 e un button1.
Questo il codice della Fmain:

Codice: [Seleziona]
Public Sub Form_Open() 
  Me.Center
End

Public Sub Button1_Click()

  Dim iRitorno, i As Integer
  Dim sParametri As New String[]
  Dim Frm1 As Form1
 
 ' Inserisco un paio di voci da inviare a form1
  sParametri.Add("Voce 1 da FMain")
  sParametri.Add("Voce 2 da FMain")
  ' Passo i parametri attraverso il costruttore di classe.
  ' NB: Per passare e ottenere valori da altre form devo utilizzare
  ' degli oggetti le array string[] sono oggetti (classi).
  ' Quindi potrei utilizzare altri tipi di classi array.
  Frm1 = New Form1(sParametri)
  ' Ottengo l'integer dalla form1
  ' Apro la form1 come dialogo o modale (stessa cosa)
  ' altrimenti non posso ottenere i valori di ritorno.
  iRitorno = Frm1.ShowDialog()
  ' Ottengo i valori di ritorno
  Print iRitorno
  For i = 0 To sParametri.Max
    Print sParametri[i]
  Next
 
End

Questo il codice della Form1

Codice: [Seleziona]
Private $bOk As Boolean = False
Private $iRitorno As Integer
Private $sParametriForm1 As String[]

Public Sub _new(sParametri As String[]) 

  Dim i As Integer
  Dim s As String
 
  ' Ottengo i parametri copiandoli in una nuova array
  $sParametriForm1 = sParametri 
  For i = 0 To $sParametriForm1.Max
    s &= $sParametriForm1[i] & "<BR>"
  Next 
  ' Mostro i parametri nella textlabel
  TextLabel1.Text = s
 
End


Public Sub Button1_Click() 
  ' Abilito la chiusura della finestra solo da
  ' button1 per poter passare il valore alla FMain
  $bOk = True
  ' Cambio la seconda voce e aggiungo una voce
  $sParametriForm1.Remove(1)
  $sParametriForm1.Add("Voce Cambiata da Form 1", 1) 
  ' Aggiungo una nuova voce.
  $sParametriForm1.Add("Nuova voce da Form 1", 2)
  ' Valore integer di ritorno a FMain.
  Me.Close(10)   

End

Public Sub Form_Close()
  ' Per impedire di non avere il valore integer di ritorno (in questo caso 10).
  ' Se invece vogliamo sapere se la finestra è stata chiusa non da pulsante
  ' (a parte che non avremmo variazioni di dati, ritorno degli stessi alla FMain ecc.)
  ' commentate o cancellate questo codice e se la finestra viene chiusa dalla
  ' X riceverete indietro l'intero Zero.
  If $bOk = False Then
    Message("Occorre agire sul pulsante <B>Sostituisco Aggiungo Chiudo</B> per chiudere la finestra regolarmente.")
    Stop Event
  Endif 
 
End

Mi sono accorto che nel codice di “Array_di_passaggio” questa parte non è spiegata bene, penso che ora confrontando i due codici tu possa meglio comprendere.

Codice: [Seleziona]
Public Sub Form_Open()  
 
  Dim iRitorno As Integer
  Dim sParametri As New String[]
  Dim Frm1 As Form1
 
 ' Aggiungo una voce
  sParametri.Add("FM")
  Frm1 = New Form1(sParametri, FMain)
 
  ' Questa voce comunque tu la scrivi (o no) non serve a nulla!
  Frm1.ShowModal()
  ' Show o ShowModal non servono in quanto se incorpori il form1 in FMain
  ' non si avrà il ritorno del codice alla chiusura
  ' se invece non si incorpora form1 in fmain allora
  ' occorre aprire in modale per avere il ritorno.
  Print "Eseguito fino a qui"
End

Io credo che il passaggio di dati fra finestre attraverso il costruttore (_New) non faccia al caso tuo, come del resto neanche gli altri modi qui trattati, a meno che non trovi un compromesso all'idea di partenza.
Se devi per forza chiudere una finestra quando ne apri un altra e quella che deve ricevere i dati deve  essere incorporata o ti sei fatto bastare il suggerimento di vuott altrimenti puoi prendere in considerazione la classe Application e fare come si faceva una volta in Access (un ritorno alle variabili pubbliche comunque, che poi non è che sono il diavolo e a volte...).

PS: Il codice con “gambas code” non funziona bene l'ho cambiato sperando in meglio col vecchio sistema.

 :ciao:
« Ultima modifica: 07 Gennaio 2015, 22:21:18 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #35 il: 07 Gennaio 2015, 22:48:57 »
@Picavbg
Sostieni che avevo già postato questo codice? Posso chiederti dove?

Ho riguradato il codice che hai trascritto nei post precedenti e mi sono accorto di avere preso un abbaglio. Si vede che quandfo ho scritto l'ultimo mio post, data l'ora, ero già  :sleepy:
perciò ti chiedo scusa e mi ritiro da questa discussione.
Ciao.
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #36 il: 07 Gennaio 2015, 23:16:37 »
Ciò non toglie che si possa discutere di cosa è meglio per ognuno di noi.


E chi lo nega ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #37 il: 07 Gennaio 2015, 23:34:39 »
...
perciò ti chiedo scusa e mi ritiro da questa discussione.
Ciao.

Non vedo di cosa tu mi debba chiedere scusa, ma visto come chiudi non vorrei averti offeso e quindi ti chiedo scusa pure io, anche per me a tarda ora le cose non riescono un granché.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #38 il: 07 Gennaio 2015, 23:35:58 »
... e scuse pure a vuott

:(
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #39 il: 10 Gennaio 2015, 22:13:38 »
@  Gianluigi

Non so se ti possa ancora servire, però oggi, riguardando appunti miei della vita trascorsa con Gambas, ho riscontrato un appunto che riguarda la discussione Form che contiene al suo interno altri form. Potresti provare a leggere qui
 :ciao:
« Ultima modifica: 10 Gennaio 2015, 22:15:26 da Picavbg »
:ciao:

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #40 il: 11 Gennaio 2015, 21:11:04 »
@Picavbg
Certo che mi serve, molto interessante grazie.
Forse potrebbe ispirare Tornu per un'eventuale variazione nella costruzione della sua applicazione.
Io mi ero attenuto ai suoi desiderata o meglio credevo di essermici attenuto quando ho iniziato ad inglobare le finestre nella FMain.
Gambas offre veramente tantissime soluzioni in primis Workspace che forse è il modo più “Gambas” ma io sono ancora troppo poco esperto per indicare un modo preferibile ad altro e come dici giustamente tu l'importante è che vada bene e funzioni per quello che vuoi ottenere.
Una cosa però mi sento di dire visto che md9327 e milio ne fanno ampio uso, le Workspace ho intenzione di studiarmele per benino.
Come tu puoi insegnarmi le finestre di dialogo risolvono mille problemi, ma non sempre vanno bene, la finestra principale di un'applicazione un minimo complessa avrà quasi sicuramente necessità di visualizzare al suo interno altre finestre, trovare un modo efficiente per risolvere questa basilare necessità appare non semplicissimo e riceve parecchi pareri discordi.  :rolleyes:

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #41 il: 11 Gennaio 2015, 23:33:57 »
Mi fa piacere di esserti stato utile. Purtroppo su Workspace non posso dirti di più, perché a suo tempo ho raccolto la nota senza però avere il tempo di provarne gli effetti.
Agli inizi del mio rapporto con questa nostra comunità, raccoglievo le note stampate di tutte le discussioni che mi sembravano interessanti. Era una buona abitudine che purtroppo nel tempo ho perso. Ogni tanto, quando devo affrontare una difficoltà nuova o lontana nel tempo, le rispolvero e, riguardandole, capisco se mi possono aiutare o no.  Infatti, come hai detto tu altrove, non sempre le ricerche funzionano: infatti è difficilissimo indovinare la parola chiave di ricerca.
 ;D
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #42 il: 11 Gennaio 2015, 23:53:47 »
...le Workspace ho intenzione di studiarmele per benino.


Un piccolo accenno è fatto qui:

http://www.gambas-it.org/wiki/index.php?title=Uso_della_Classe_WorkSpace
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #43 il: 12 Gennaio 2015, 22:28:38 »
Un piccolo accenno è fatto qui:
http://www.gambas-it.org/wiki/index.php?title=Uso_della_Classe_WorkSpace

Grazie vuott, veramente notevole la tua conoscenza di Gambas.
Riguardo le WorkSpace così a prima vista mi hanno un po deluso credevo fossero diverse però non le conosco ancora, vedremo.
Tu nei tuoi programmi le hai mai usate?
 :ciao:
PS: Prima ho detto un'inesattezza mi pareva che md9327 le avesse usate in pgDesigner ma mi sbagliavo, chiedo venia.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] Passaggio dati tra due Form
« Risposta #44 il: 13 Gennaio 2015, 00:32:13 »
Riguardo le WorkSpace...
Tu nei tuoi programmi le hai mai usate?


No, non mi è ancora capitato.   :-\
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »