Newsgroup: it.comp.lang.visual-basic
Titolo: VB.NET e istanze

Ciao a tutti,
ho sempre utilizzato VB6, e da qualche settimana mi sto approcciando a
VB.NET
.
Purtroppo mi sono accorto che tutto ciò che era scontato in VB6 non lo
è più in 
VB.NET
 nemmeno l'apertura e chiusura delle form!!
Ho pertanto alcune (penso semplici) domande da farvi e spero nella
vostra disponibilità.... anche se il mio post è un po' lungo...
Per imparare questo meccanismo ho fatto un progetto semplicissimo con
Form1 e Form2.
Da Form1 vorrei aprire Form2 e da quest'ultima compilare un campo
TextBox1
presente nella Form1.
Questa cosa in VB6 era di una banalità unica, in 
VB.NET
 è un casino!!
o mi sbaglio??
Leggendo i vecchi post di questo NG sono riuscito ad aprire Form2
aggiungendo la seguente riga di codice:
Dim SecondoForm As New Form2
'Ho forse fatto una seconda instanza di Form2...? cioè ora mi trovo ad
avere n°2 form2?
SecondoForm.Show()
Quindi nel Button della Form2 ho scritto il seguente codice:
Dim PrimaForm As New Form1 'Ho forse fatto una seconda instanza di
Form1...? cioè ora mi trovo ad avere n°2 form1?
PrimaForm.TextBox1.Text = "PROVATESTO"
Me.Hide()
Nelle varie prove e leggendo i vari messaggi di questo NG mi sembra di
aver capito che la scritta "PROVATESTO" viene inserita nella seconda
istanza di Form1.
Come faccio a inserirla nella prima istanza?
A cosa serve avere più istanze della stessa form?
Ringrazio tutti in anticipo.
LupoNero

 A cosa serve avere più istanze della stessa form?
Non so, ad esempio finestre figlie in una applicazione MDI.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

 Form1.TextBox1.Text = "PROVATESTO"
Questa risposta non me l'aspettavo ed in effetti non funziona...
Ancor prima di eseguire il programma mi viene emesso l'errore:
"Il riferimento a un membro non condiviso richiede un riferimento a un
oggetto"
Funziona invece in VB6, ma non in 
VB.NET
Penso che la soluzione putroppo sia più complessa.
LupoNero

 A cosa serve avere più istanze della stessa form?
Word non ti lascia avere più documenti aperti contemporaneamente?
Ciao
-- 
Free .Net Reporting Tool - 
http://www.neodatatype.net
 

 Questa risposta non me l'aspettavo ed in effetti non funziona...
Ma la tua form si chiama Form1? Io ho appena provato con VB2005 e 
funziona benissimo.


 funziona benissimo.
Ho VB2003, penso sia per quello che non funziona...

 istanziata da Form1 o viceversa o se sono due form completamente separate.
Il codice che ho utilizzato è molto semplice; ho aperto un nuovo
progetto e velocemente inserito due form con il seguente codice:
FORM1:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
 System.EventArgs) Handles Button1.Click
        Dim SecondoForm As New Form2
        SecondoForm.Show()
    End Sub
FORM2:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
        '''Dim frmMain As Form1
        ''''frm1.TextBox1.Text = "PROVATESTO"
        '''frmMain.TextBox1.Text = "PROVATESTO"
        '''Me.Hide()
        Dim PrimaForm As New Form1
        PrimaForm.TextBox1.Text = "PROVATESTO"
        Me.Hide()
    End Sub
Ciao
LupoNero

 End Sub
Questa è *una* soluzione.
Ad es. form2 potrebbe esporre un evento di update intercettato da form1 e lì 
dentro aggiornare la textbox.


         Form2Singleton.Show()
Scusa la mia ignoranza, per me è un argomento totalmente nuovo
Form2Singleton. mi da errore perchè non dichiarato... come lo
dichiaro?
Dim Form2Singleton e poi....?
Ora forse chiedo troppo...:-(
Potresti mandarmi all'indirizzo 
ligh...@tin.it
 un progetto simile al
mio?
Scusami ma per risolvere questa banalità stò perdendo delle
ore/giornate!
Ti ringrazio
LupoNero

 Dim Form2Singleton e poi....?
Perchè era un rimando al pattern Singleton di cui ti parlavo e che dovresti 
studiarti. ;)
Ne butto giù uno senza testarlo:
Public Class Form2Singleton
    Private Shared form2 As New Form()
    Public Shared Sub Show()
        form2.Show()
    End Sub
    Public Shared Property Istance As Form2
        Get (Value As Form2)
            return form2.MainForm
        End Get
    End Property
    Public Shared Property MainForm As Form
        Set (Value As Form)
            ' Questa te la devi definire in Form2 per passargli il form di 
riferimento
            form2.MainForm = Value
        End Set
    End Property
End Class
Adesso puoi accedere sempre alla stessa istanza di Form2 semplicemente con
Form2Singleton.Istance
Si potrebbe fare di meglio sfruttando l'ereditarietà in modo da renderlo 
generico per più tipi di form, ma per adesso fermiamoci qui :)


 Adesso puoi accedere sempre alla stessa istanza di Form2 semplicemente con
Due domande:
1. dove inserire il codice che mi hai riporato?
2. Ma devo scrivere tutto questo codice per fare quello che con VB
facevo in mezza riga??
Form1.textbox1.text = "TESTO"
Personalmente lo trovo assurdo! a leggere i vari messaggi degli esperti
sono io a sbagliare...almeno teoricamente... ma comincio a pensare che
la pratica sia più conveniente.
Penso proprio che mi affretterò ad acquistare l'upgrade a VB2005
Comunque grazie per l'aiuto che mi hai dato fino adesso
LupoNero

 Penso proprio che mi affretterň ad acquistare l'upgrade a VB2005
Se vuoi provarlo puoi scaricare le versioni Express, ma io passerei a VB2005 
per altri motivi, non certo per tornare alla programmazione pastrocchio.
Ciao 

 ha scritto nel messaggio 
news:1155460060.7...@m73g2000cwd.googlegroups.com...


 per altri motivi, non certo per tornare alla programmazione pastrocchio.
Ti prometto che ci proverò, ma dovrò trovare una buona motivazione
per non utilizzare il procedimento che tu ritieni un 'pasticcio'.
LupoNero