Poblemi Windows Form

martedì 13 gennaio 2009 - 20.53

Bazzi Profilo | Junior Member

Ciao a tutti....sono un programmatore Cobol e poco ho iniziato a programmare in VB.Net per cui mi trovo con un po' di problemini da risolvere....spero qualcuno mi possa aiutare...
Allora...ho una FormA che gestisce una ListView. Con alcuni tasti di inserimento e variazione, richiamo una seconda FormB nella quale posso variare i dati di record del ListView che ho selezionato. All'uscita dalla FormB devo ricaricare la ListView della FormA.
Utilizzando l'istruzione FormB.Show() il programma prosegue con le istruzioni che seguono, ossia il ri-caricamento della ListView ed in questo modo anche dopo la variazione da FormB, tornando nella FormA non ho la lista aggiornata.
Utilizzando l'istruzione FormB.showdialog() il programma effettivamente elabora la FormB ed all'uscita mi ricarica la ListView correttamente. A questo punto però, siccome in FormB effettuo un DataBinding sui campi di input, quando entro per la prima volta in FormB tutto ok....se esco, torno in FormA e poi di nuovo in FormB esce il seguente messaggio di errore : "ArgumentException non è gestita.In questo modo l'insieme avrebbe due associazioni alla stessa Proprietà. Nome parametro : binding."

Grazie.
The Bazz

Jeremy Profilo | Guru

prova a postare il codice che hai utilizzato.

Bazzi Profilo | Junior Member

FormA :
FormB.ShowDialog()
ShClDB.riempi("Salvataggi") ' Carico tutta la tabella nel Dataset
ShClDB.popolaLW("Salvataggi", True, True, False, False, False, ListView1) ' Popolo il mio Listview

FormB :
ShClDB.StrSql = "Imposto la mia stringa SQL funzionante'"
ShClDB.StrConn = "Imposto il provider"
ShClDB.riempi("Salvataggi") ' Carico il record selezionato in FormA nel Dataset

' Eseguo il binding sui miei campi
txtNome.DataBindings.Add("Text", ShClDB.Ds.Tables(0), ShClDB.Ds.Tables(0).Columns(0).ColumnName)
txtDescrizione.DataBindings.Add("Text", ShClDB.Ds.Tables(0), ShClDB.Ds.Tables(0).Columns(1).ColumnName)
ckbIncludi.DataBindings.Add("CheckState", ShClDB.Ds.Tables(0), ShClDB.Ds.Tables(0).Columns(4).ColumnName, True)
txtDataUltEsec.DataBindings.Add("Text", ShClDB.Ds.Tables(0), ShClDB.Ds.Tables(0).Columns(5).ColumnName)
ckbUltEsito.DataBindings.Add("Checked", ShClDB.Ds.Tables(0), ShClDB.Ds.Tables(0).Columns(6).ColumnName, True)

Come dicevo, funziona tutto la prima volta, la seconda volta che entro nel "dettaglio" cioè nella FormB mi da il messaggio che ho postato prima....
Ho provato anche ad eseguire in chiusura del form la seguente istruzione :
TxtNome.DataBindings.Clear ()

Ciao e grazie
The Bazz

Jeremy Profilo | Guru

Innanzitutto prova a fare una cosa più corretta.....tipo questa:
Dim frmFormB as New FormB
frmFormB.ShowDialog()

poi fammi sapere.

Bazzi Profilo | Junior Member

Ottimo....funziona !!!

Grazie Mille.
Sai dove posso approfondire il discorso Form...showdialog e tutto quanto ?
The Bazz

Jeremy Profilo | Guru

In questo caso.....intendo dire....per questo errore, dovresti approfondire il concetto di programmazione orientata agli oggetti(OOP),in quanto, anche il form, è un oggetto e quindi va trattato come tale.
Per ogni oggetto deve essere creata una nuova istanza(allocato in memoria) e, per chi non implementa l'interfaccia IDisposable, disallocato con Nothing, altrimenti usare il metodo Dispose.
Parti da un buon libro di Vb.net....io ti posso consigliare quello di Alessandro DelSole perchè, frequentandolo in un forum, ti posso dire(per esperienza diretta) che è una persona davvero in gamba.....comunque, per le basi, va bene anche un qualsiasi altro libro(che si possa definire tale).
Posso anche dirti che, .net hell.it l'ho conosciuto cercando documentazione in rete e, il più delle volte, sono finito su questo forum che.....si è rivelato molto utile.
Cerca tra gli articoli, i tutorial, e quant'altro....troverai davvero delle cose interessanti e utili.

alexmed Profilo | Guru

Ciao
visto che anch'io son autodidatta mi chiedevo se non basta mettere alla chiusura del Form (in questo caso B) Me.Dispose?

Ciao

PS
Io ho preso della Mondadori "Visual Basic 2008 Passo per Passo" (anche se uso 2005) e mi sembra un buon libro (peccato il prezzo)

Jeremy Profilo | Guru

Ciao
Sono autodidatta anchio, quindi, ti rispondo in quanto tale(non prenedere utto per buono).
In realtà, credo, che il Dispose dell'oggetto Form, sia implicito, in quanto, viene gestito, secondo me, dall'evento FormClosed.
Tanto è vero che, quando si chiude l'ultimo Form dell'applicazione, quest'ultima viene terminata.
Si potrebbe comunque fare una prova per approfondire.....basta aprire 2 o 3 form in una applicazione, guardare l'utilizzo di ram nel taskmanager e poi, chiuderne uno alla volta.


Ciò non toglie che, devi comunque sempre creare una nuova istanza dell'oggetto form che stai per aprire.

Ciao.

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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5