Passare dati dai contolli di un form ad un altro - VB 2005

mercoledì 01 ottobre 2008 - 22.10

DomA Profilo | Expert

>PROBLEMA RISOLTO.
Basta impostare il form frmFoornRic (form per la ricerca del fornitore) come modale. Così avrà lo stesso comportamento di una Msgbox. Ecco il codice (impostato nel fom1 --> frmArt):

Dim frmF As New frmFornRic frmF.txtNomePerc.Text = Me.txtNomePerc.Text frmF.ShowDialog(Me) If frmF.DialogResult = Windows.Forms.DialogResult.OK Then Me.lblIdFornRic.Text = frmF.lblIdFSel.Text Me.txtNomeImg.Text = frmF.txtNomePerc.Text Me.lblRicForn.Text = "SI" Call Me.Ric_Art_Forn() end if

salve a tutti non riesco a capire perchè l'applicazione non passa i dati dai controlli di un form ad un altro.
La routine è la seguente:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Premetto che frmArt è un form(figlio) MDIChild
mentre quello da cui vengono passati i dati è un form normale che viene attivato da un comando scritto su frmArt

Qualcuno sa risolvere il mistero?


Domenico

jtpsala Profilo | Senior Member

Ciao,
non è che per caso manca qualcosa nel codice postato?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim codForn As Integer = CInt(Me.lblIdFSel.Text)
With frmArt
.txtNomePerc.Text = Me.txtNomePerc.Text
.lblIdFornRic.Text = codForn
.lblRicForn.Text = "SI"

.ShowDialog()

End With
Me.Close()
End Sub
Ciao...
Giuseppe

gabriel81 Profilo | Junior Member

La form che ha la routine è diversa da frmArt?

DomA Profilo | Expert

ok pomeriggio lo provo e poi ti faccio sapere.
grazie
Domenico

DomA Profilo | Expert

Ciao Gabriel,
si effettivamente la form da cui devo passare i dati e una form di ricerca dei fornitor.
Dopo aver selezionato il fornitore devo passare alcuni dati a frmArt ,che è un form(figlio) MDIChild, per trovare gli articoli di quel determinato fornitore.
ciao
Domenico

gabriel81 Profilo | Junior Member

Il fatto che sia un MDIChild, è obbligatorio o puoi adottare altre soluzioni?

Ti dico questo perchè potresti (è solo un idea!) istanziare una nuova classe Form che ti fà vedere tutti gli articoli per fornitore passandogli come Tag ad esempio, l'ID del Fornitore.
Sull'evento load() della Form istanziata apri una connessione al db e fai 2 Query.
La prima pesca i dati del fornitore, l'altra prende gli articoli filtrati per ID fornitore. Avrai alla fine 2 Datatable,una di una riga sola(i dati del fornitore), l'altra di n righe, ovvero gli articoli.

Con il primo datatable vai a far vedere i dati anagrafici del fornitore, con il secondo popoli un Datagridview (è comodissimo, basta dire Me.datagridArticoli.datasource = datatableArticoli).
La popolazione del Datagrid è immediata, anche se ogni fornitore avesse 15000 articoli.
Dal datagrid poi puoi impostare una routine ogni volta che col mouse si fa doppio click su una riga, ad esempio.......

DomA Profilo | Expert

Ciao Giuseppe,
col tuo metodo riesco a passare i dati da un form all'altro. Tuttavia mi sono accorto che apre un secondo form frmArt (form figlio) per cui mi ritrovo con due frmArt aperti.
Infine quando passo l'ID del fornitore alla label "lblIdFornRic" nell'evento TextChanged dovrebbe richiamare la funzione per la ricerca degli articoli di quel fornitore invece non lo fa. Lo so perchè all'inizio della ricerca dovrebbe dare questa msgbox:

MsgBox("ricerca x fornitore avviata")

ma non vi è traccia (quindi la sub non viene richiamata).

ho provato anche così:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
ma ho sempre 2 frmart aperti e la ricerca non la effettua comunque

ti posto il codice della label

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
grazie dell'aiuto.
Domenico

gabriel81 Profilo | Junior Member

Se intendi conservare la tua impostazione e se ho capito bene come hai impostato il progetto, tieni conto che i form MDIChild dovrebbero essere istanze di classe.
Quindi dovresti riferirti al padre MDI e cercare il figlio che ha per nome ecc ecc ecc

DomA Profilo | Expert

Potresti dare uno sguardo alla modifica apportata al post di sopra.
Oppure puoi rispondere a questo thread:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=25650

così posso seguire la tua indicazione.
Domenico

gabriel81 Profilo | Junior Member

mi manderesti uno shot del programma aperto?

DomA Profilo | Expert

Metto due img sperando di rendere l'idea.

img1 --> frmArt (MDIChild)


1024x736 77Kb


img2 --> frmFornRic


1024x734 120Kb


questa soluzione mi serve anche per altri form (es. gestione dei pagamenti da legare alle relative scadenze)
ciao a presto

Domenico

sanbiz Profilo | Senior Member

>Tuttavia mi sono accorto che apre un secondo form frmArt (form
>figlio) per cui mi ritrovo con due frmArt aperti.

Perdonate l 'intrusione, ma ho una domanda: come viene istanziato il form figlio e come viene fatto riferimento allo stesso?

Per istanziare un form:
Dim myFrm as New frmArt
myFrm.miaLabel.Text = "pippo"
ecc. ecc.

Successivamente per far riferimento all'oggetto non utilizzare il nome del form usato in progettazione ma la sua istanza. Ad esempio se voglio il nome di tutti i form aperti farò così:
For Each mioFrm As Form In mdiParentForm.MdiChildren
MsgBox (mioFrm.Text)
Next
--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

DomA Profilo | Expert

Ti ringrazio per... "l'intrusione".
Scherzi a parte il codice che utilizzo è il seguente:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

così però mi ritrovo 2 frmArt aperti.
potresti dare un'occhiata e magare apportare le modifiche nexessarie.
grazie
Domenico

DomA Profilo | Expert

Per favore ho urgente bisogno del vostro aiuto


>>Tuttavia mi sono accorto che apre un secondo form frmArt (form
>>figlio) per cui mi ritrovo con due frmArt aperti.

Help me...


Domenico

sanbiz Profilo | Senior Member

>Per favore ho urgente bisogno del vostro aiuto
>
>
>>>Tuttavia mi sono accorto che apre un secondo form frmArt (form
>>>figlio) per cui mi ritrovo con due frmArt aperti.

Hai provato a guardare la mia risposta qualche post prima?
--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

DomA Profilo | Expert

Si. Tuttavia utilizzando questo codice:

>Dim myFrm as New frmArt

Mi apre un nuovo frmArt.

io invece voglio passare i dati a quello (frmArt) aperto poichè contiene già dei dati inseriti dall'utente.
Spero di essere stato chiaro.
Comunque grazie.
Domenico

DomA Profilo | Expert

ok ultimo disperato tentativo.

>Hai provato a guardare la mia risposta qualche post prima?

mi dite dove sbaglio? ecco il codice:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim codForn As Integer = CInt(Me.lblIdFSel.Text)
Dim myFrm As New frmArt()
myFrm.MdiParent = frmAvvio
With myFrm
.txtNomePerc.Text = Me.txtNomePerc.Text
.lblIdFornRic.Text = codForn
.lblRicForn.Text = "SI"
.ShowDialog()
End With
Me.Close()
End Sub

ciao e grazie a tutti quelli che hanno partecipato o, mi auguro, vorranno partecipare.
Domenico

DomA Profilo | Expert

per eventuali soluzioni rispondere qui:

http://www.dotnethell.it/forum/messages.aspx?ThreadID=25691

ciao
Domenico

sanbiz Profilo | Senior Member

Io continuo ad essere convinto che tu stia referenziando in modo errato il tuo form.

Ogni volta che fai
Dim mioFrm as new frmArt
crei una nuova istanza dello stesso.
Per poi andare a recuperare "quel" form preciso, non puoi definirlo nuovamente, ma devi recuperarlo dalla collection dei form (mdiChildren) attualmente aperti, iterando tra gli stessi.


--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

DomA Profilo | Expert

Ciao sandro ho risolto in questo modo

Basta impostare il form frmFoornRic (form per la ricerca del fornitore ovvero il secondo form) come modale. Così avrà lo stesso comportamento di una Msgbox.
nel 2° form ho inserito 2 buttons: btnOk e btnEsc a cui ho impostato la proprietà Dialogresult, rispettivamente, su ok e cancel. Il resto lo fa questo codice impostato su frmArt (ovvero il 1° form):

Dim frmF As New frmFornRic frmF.txtNomePerc.Text = Me.txtNomePerc.Text frmF.ShowDialog(Me) If frmF.DialogResult = Windows.Forms.DialogResult.OK Then Me.lblIdFornRic.Text = frmF.lblIdFSel.Text Me.txtNomeImg.Text = frmF.txtNomePerc.Text Me.lblRicForn.Text = "SI" Call Me.Ric_Art_Forn() End If

Ciao e grazie comunque per l'aiuto
Domenico
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5