PDA

View Full Version : [VB2005] Operazioni tra form diversi


Lehendakari
08-11-2006, 14:59
Ciao a tutti, ho un paio di problemi in Visual Basic 2005 che non riesco a risolvere.

1) Ho un primo formA, da cui all'occorrenza apro un formB (lasciando aperto in secondo piano lo stesso formA). Se io devo copiare alcuni valori da alcune caselle di testo del formA in alcune caselle di testo del formB non ci sono problemi, ma se uso lo stesso codice per copiare altri valori dal formB al formA, non mi visualizza niente.
Dove sbaglio?
**nel formA, quando apro il formB, il valore è copiato correttamente**
Dim NuovoForm As New FormB
FormB.Show()
FormB.campo1.Text = me.campo1.text
**se dal formB uso la stessa espressione per ripassare i valori, non mi visualizza nulla**
formA.campo2.text=me.campo2.text
Se per assurdo (perchè non posso farlo, a meno di salvare tutti i dati inseriti, ma in questo caso se gli utenti inserissero dei dati per delle "prove" mi sovrascriverebbero quelli corretti esistenti) chiudessi il formA e lo riaprissi con il codice di cui sopra, i valori comparirebbero correttamente.

2)Nel formA ho una procedura che mi serve per riempire un Datagrid. Se la lancio dal form stesso non ci sono problemi.
Come faccio a chiamare la stessa procedura dal formB, in modo che quando lo chiudo e mi si riattiva il formA, mi aggiorni il Datagrid?
Ho provato con my.forms.formA.procedura() e mi da errore; ho provato a chiamare la procedura dall'evento Activate del formA e mettere nella chiusura del formB-> my.forms.formA.activate, ma non ricarica.

Grazie

Nightmare
09-11-2006, 08:01
Per aprire FormB non fai altro che istanziare una nuova FormB e lanciare il metodo Show.
Se da FormB istanzi una nuova FormA... rimani in memoria con il FormA nuovo(FormAnew) e il FormA vecchio (FormAold) che hai tenuto aperto sotto FormB...

Se cambi le proprieta di qualche oggetti di FormAnew queste ovviamente non si ripercuotono in FormAold (che è quello aperto e che ti interessa)

Per fare una cosa del genere potresti portarti dietro il riferimento di FormAold nel momento che costruisci FormB modificandone il costruttore.
In questo modo all'interno di formB avrai gia il riferimento a FormAold senza che ne crei un altro inutilmente

Mi spiace non poterti scrivere codice ma non ho il prodotto sotto mano

Lehendakari
11-11-2006, 14:39
Ti ringrazio Nightmare.
Io ho trovato questa soluzione:

nel formB dichiaro un evento:
Event EventoInB ()
Questo evento lo chiamo ad esempio quando clicco su "salva", o chiudo il form:
RaiseEvent EventoInB ()

nel formA invece metto:
Dim WithEvents NuovoForm As New FormB
A questo punto tra gli eventi associabili al formA, trovo anche formB col rispettivo evento dichiarato di là:
Private Sub NuovoForm _EventoInB () Handles NuovoForm .EventoInB
'e qui metto il codice che mi interessa, dalla copia di alcuni campi di B (problema 1) alle procedure del formA (problema 2)
End Sub

Nightmare
11-11-2006, 18:21
si anche questa è un'ottima soluzione

Kralizek
12-11-2006, 10:23
in alternativa io faccio così:

mettiamo che ho 2 campi che il FormB deve restituire. txtCampo1 e txtCampo2

creo 2 readonly properties che si preoccupano di esporre il valore richiesto


public readonly property Campo1 as string
get
return txtCampo1.text
end get
end property

'lo stesso per il campo2


a questo punto dal form base faccio:


dim c1 as string

dim frm as new formb
if frmb.showdialog = dialogresult.yes then
c1 = frm.Campo1
else
'...
end if