Newsgroup: it.comp.lang.visual-basic
Titolo: Passaggio di dati fra form

Vorrei passare dei dati fra una form e un'altra senza scrivere in nessun
campo delle due form e senza memorizzare il dato in variabili globali,
qualcuno può darmi una dritta ?
Grazie per l'aiuto
mba...@tin.it

qualcuno puň darmi una dritta ?


Il mezzo canonico è ovviamente l'uso delle proprietà.
Domenico


 qualcuno può darmi una dritta ?


I metodi che conosco sono questi:
1) uso del tag della form o altra proprietą non usata
2) Passaggio di valori attraverso una funzione definita pubblica
nella form chiamata
3) Non e' poi cosi' drammatico definire una variabile pubblica nelle
dichiarazioni della form: per distinguerla dalle altre eventualmente
uguali nelle altre form usare la sintassi nomeform.nomevariabile.
ciao

...



Io generalmento utilizzo uno stack globale implementato tramite un
vettore di variant.
Eseguo il push nella form chiamante ed il pop nella form chiamata.
Tutto fila liscio, ma bisogna (naturalmente) ricordarsi di poppare
tutto quello che si è pushato... (battuta disgustosa)
A parte gli scherzi, uno stack presenta alcuni vantaggi rispetto
all'uso diretto di variabili, dovunque siano poste:
Non si fa riferimento diretto a variabili, ma si utilizzano due
funzioni, una per push e l'altra per pop.
E' possibile passare un numero arbitrario di parametri senza dover
definire numerose variabili.
Ci sono ulteriori vantaggi in fase di manutenzione del codice:
Se si aggiunge un parametro non è necessario aggiungere variabili o
ricordarsi quali variabili sono usate o no.
In ogni punto del codice è possibile aggiungere delle coppie push-pop
senza preoccuparsi che ci sia già un trasferimento di dati tra form in
corso. Usando variabili c'è il rischio di sovrascrivere dei dati
ancora necessari.
Aggiungendo ad un progetto il modulo che ti allego alla fine del
messaggio l'uso è il seguente, supponendo di voler passare le
variabili p1 e p2:
...chiamante:
FSPush p1
FSPush p2
... chiamato:
p2 = FSPop()
p1 = FSPop()
(nota l'ordine inverso)
-------- MODULO STACK.BAS -------------------
NOTA: la routine Sciopa si limita ad interrompere il programma
scrivendo il messaggio specificato
Attribute VB_Name = "modStack"
Option Explicit
' implementazione di uno stack:
' uso principale passare dati tra forms
'   Call FSPush( Var )
'   Var = FSPop()
Const STACKDIM = 50
' vettore che implementa lo stack e puntatore all'ultimo elemento
inserito
Dim Vett(STACKDIM)
Dim ptVett As Integer   ' inizialmente contiene 0
Function FSPop()
    ' pop di un valore dallo stack
    If ptVett = 0 Then Sciopa ("Stack underflow")
    FSPop = Vett(ptVett)
    ptVett = ptVett - 1
End Function
Sub FSPush(ByVal Valore)
    ' push di un valore nello stack
    ptVett = ptVett + 1
    If ptVett = STACKDIM Then Sciopa ("Stack overflow")
    Vett(ptVett) = Valore
End Sub
-------------------
Ciao
--------------------------------------------------------------------
Fulvio Senore
Eliminate "zz" dall'indirizzo e-mail per scrivermi (spammers...)
Remove "zz" from e-mail address to write me (spammers...)
--------------------------------------------------------------------

>qualcuno puņ darmi una dritta ?


anche alle form, non solo ai moduli CLS.
  Hai perfettamente ragione, pero' Marcello non ha specificato la
versione di VB che sta utilizzando e se utilizza ancora la 3 non puo'
aggiungere properties ne' classi ma deve ricorrere a Tag o altri
trucchetti.
  Ciao :-)
  Massimo
  Nell'indirizzo, sostituire DIESPAMMERS con MC1258
  In the address, replace DIESPAMMERS with MC1258


Rispondo per me: non ho niente contro le proprietà. Il codice che uso
risale a VB3, funziona e non l'ho mai cambiato per questo.
L'unico svantaggio dell'uso di proprietà che riesco ad intavvedere, in
questo caso, è che devi continuamente crearne per ogni form: mi sembra
un po' uno spreco, ma è questione di gusti, naturalmente.
Altro problema (limitato anche lui): se cominci a scrivere routines
per effettuare azioni generiche (ad esempio aggiunta di un nuovo
record) devi ricordarti di dare lo stesso nome alle proprietà di tutti
i form interessati.
In ogni caso riconosco che sono svantaggi limitati, più teorici che
reali.
Credo che alla fine la risposta sia: ho sempre fatto così, funziona, e
quindi continuo così. Si chiama pigrizia.


 i form interessati.
Non hai torto, soprattutto se hai già codice preesistente. Però, per quanto
riguarda le proprietà e i loro nomi, Implements risolve tutto.
Domenico