Autore Topic: [RISOLTO]Parametro ritorno di un form  (Letto 994 volte)

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
[RISOLTO]Parametro ritorno di un form
« il: 24 Febbraio 2013, 22:52:59 »
Come da titolo devo far ritornare ad un form un parametro che può essere un numero o una equenza di lettere
Il problema è che se faccio ritornare

Me.close("123")
funziona
mentre se do
Me.close("ABC")
il programma si inchioda

Questo vuol dire che il form può restituire solo integer?

Grazie
« Ultima modifica: 26 Febbraio 2013, 09:32:40 da Akrobaticone »
"e il naufragar m'è dolce in questo mar"

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Parametro ritorno di un form
« Risposta #1 il: 24 Febbraio 2013, 23:40:05 »
Questo vuol dire che il form può restituire solo integer?

Nella guida in linea leggo:   :-\

Function Close ( [ Return As Integer ] ) As Boolean

Closes the window, and returns an optional integer value used by the ShowModal method.
« 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 Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Parametro ritorno di un form
« Risposta #2 il: 24 Febbraio 2013, 23:41:18 »
Come da titolo devo far ritornare ad un form un parametro che può essere un numero o una equenza di lettere
Il problema è che se faccio ritornare

Me.close("123")
funziona
mentre se do
Me.close("ABC")
il programma si inchioda

Questo vuol dire che il form può restituire solo integer?
Grazie

In entrambi i casi non restituisci mai valari di tipo integer, infatti sia "123" che "ABC" sono stringhe, ciascuna di tre byte. tuttavia può essere che in ogni caso non venga riconosciuto un carattere non numerico.
Io ho sempre usato valori numerici come, per es._
Codice: [Seleziona]
  Me.Close(2)
La documentazione dice chiaramente che il metodo Close ritorna un intero. Non hai perciò di racchiudere il valore di ritorno fra virgolette.
 :ciao:
:ciao:

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Parametro ritorno di un form
« Risposta #3 il: 25 Febbraio 2013, 00:43:22 »
mi era sfuggito
grazie
"e il naufragar m'è dolce in questo mar"

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Parametro ritorno di un form
« Risposta #4 il: 25 Febbraio 2013, 21:32:35 »
Per far rtitornare una stringa l'unica soluzione è una variabile globale.
ho provato anche a inviare come parametro una variabile con byref, ma a quanto pare non è possibile.
"e il naufragar m'è dolce in questo mar"

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Parametro ritorno di un form
« Risposta #5 il: 25 Febbraio 2013, 22:34:49 »
Per far rtitornare una stringa l'unica soluzione è una variabile globale.

No. Esistono i metodi nascosti. Vedi, per es.,qui
 :ciao:
« Ultima modifica: 25 Febbraio 2013, 22:48:09 da Picavbg »
:ciao:

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Parametro ritorno di un form
« Risposta #6 il: 25 Febbraio 2013, 23:51:07 »
quindi paso un array di stringhe come parametro al nuovo form
in effetti gli passo il riferimento all'array
all'interno del form chiamato aggiungo un elemento all'array che mi ritroverò anche nel form principale

Nel form principale:
Codice: [Seleziona]
Public Sub Button1_Click()
Dim stringa As New String[]
  Dim frm As Form1

  frm = New Form1(stringa)

  frm.Showmodal
 Label1.text = stringa[0]
End

nel form chiamato

Codice: [Seleziona]
Public Sub _new(stringa As String[])
Dim stri As New String[]
stri = stringa

stri.Add("ww")

me.close()
End

corretto?


ps
come si fa a postare il codice nella maniera che fai tu?







"e il naufragar m'è dolce in questo mar"

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Parametro ritorno di un form
« Risposta #7 il: 26 Febbraio 2013, 00:45:50 »
ps
come si fa a postare il codice nella maniera che fai tu?

Lui clicca nel ''ComboBox'' sulla destra, sopra le faccine, avente la scritta: "Evidenzia sintassi", e sceglie ovviamente "Gambas".
« 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 Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Parametro ritorno di un form
« Risposta #8 il: 26 Febbraio 2013, 09:10:52 »
quindi paso un array di stringhe come parametro al nuovo form
in effetti gli passo il riferimento all'array
all'interno del form chiamato aggiungo un elemento all'array che mi ritroverò anche nel form principale

Nel form principale:
Codice: [Seleziona]
Public Sub Button1_Click()
Dim stringa As New String[]
  Dim frm As Form1

  frm = New Form1(stringa)

  frm.Showmodal
 Label1.text = stringa[0]
End

nel form chiamato

Codice: [Seleziona]
Public Sub _new(stringa As String[])
Dim stri As New String[]
stri = stringa

stri.Add("ww")

me.close()
End

corretto?
In parte si.
Se hai letto la discussione che ti ho suggerito, ma esiste anche un argomento sui metodi nascosti nel wiki di Gambas-it, Il metodo _new permette di passare al costruttore informazioni necessarie alla form modale dipendente, ma, grazie al successiva istruzione di chiamata "i_SwReturn = Frm1.ShowModal()", è possibile conoscere il risultato dell'operatività svolta dalla form dipendente. Allo stesso tempo l'array contenente i volari passati al momento della chiamata, ritornano alla classe chiamante. Ciò significa che la Form chiamata può anche averli modificati. Es.:
Codice: gambas [Seleziona]
Dim $FrmParam As New String[]
Dim Frm1 As Form01
Dim i_SwReturn As Integer

  $FrmParam.add("Autom")
  Frm1 = New Form01($FrmParam)
  i_SwReturn = Frm1.ShowModal()
  Select Case i_SwReturn
            Case (0)       '   l'elemento $_FrmParam[0] contiene la data contabile nel formato AAAAmmGG
              $DataCont = $FrmParam[0]
              $TipoValuta = $FrmParam[1]
              i_NumDecim = $FrmParam[2]
              $GiorSettim = $FrmParam[3]
              If $_SceltOper = "Menu06" Then
                  Frm2 = New Form02($FrmParam)
                  i_SwReturn = Frm2.ShowModal()      'avvio della procedura di INSRIMENTO MOVIMENTI DI GIORNATA CONTABILE
                  If i_SwReturn = 99 Then
                      Me.Close
                  Endif
              Endif
  End Select

Spero di avere chiarito meglio il concetto.
 :ciao:

Citazione da: vuott
Lui clicca nel ''ComboBox'' sulla destra, sopra le faccine, avente la scritta: "Evidenzia sintassi", e sceglie ovviamente "Gambas".

Ma non solo io!   ;D
« Ultima modifica: 26 Febbraio 2013, 09:15:22 da Picavbg »
:ciao:

Offline akrobaticone

  • Gran Maestro dei Gamberi
  • *****
  • Post: 983
    • Mostra profilo
Re: Parametro ritorno di un form
« Risposta #9 il: 26 Febbraio 2013, 09:32:21 »
si è tutto chiaro

grazie

Codice: gambas [Seleziona]
Public Sub _new(stringa As String[])
Dim stri As New String[]
stri = stringa

stri.Add("ww")

me.close()
End


PS
ho capito anche questo!
"e il naufragar m'è dolce in questo mar"

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: [RISOLTO]Parametro ritorno di un form
« Risposta #10 il: 26 Febbraio 2013, 12:59:01 »
La cosa funziona per quasiasi oggetto, ma non con i tipo base (es. integer, string, ecc.).
Qualsiasi modifica all'oggetto viene riportata alla funzione chiamante, e questo perchè l'oggetto viene passato per riferimento, ovvero viene passato il suo indirizzo in memoria, e non il suo valore.
Fare però attenzione ad un particolare: mai sostituire l'oggetto passato con altro, in questo caso si perderebbe traccia dell'indirizzo di memoria dell'oggetto originale, sostituito con altro indirizzo. Purtroppo la funzione chiamante non sà che questo è cambiato, rimanendo puntata sull'indirizzo precedente...