Newsgroup: it.comp.lang.visual-basic
Titolo: [NET] Ma che hanno fatto?

Raga sto cercando di avvicinarmi un po' a 
VB.NET
 2002.
Sto facendo i primi passi, anzitutto cercando di visualizzare il famoso 
Form2 al click del command1 su Form1.
La cosa che mi ha colpito č che non si puň fare direttamente Form2.Show 
perchč Form2 ora č un tipo e non un oggetto.
Bisogna fare:
     Private Sub Button1_Click(...) Handles Button1.Click
         Dim F As Form2
         F = New Form2()
         F.Show()
     End Sub
Che significa creare un nuovo oggetto di tipo Form2 e visualizzarlo. Ok.
Ma se clicco 20 volte su Command1, mi compaiono 20 form2. Cosa che 
ovviamente prima non accadeva in VB6.
Se volevo creare 20 form diversi mettevo il codice che uso ora, 
altrimenti con codice normale visualizzavo direttamente il Form2.
Ora invece devo creare un nuovo oggetto, caricarlo in memoria e 
richiamare il suo metodo Show.
E se devo fare riferimento a Form2 da un altro Form? La cosa piů 
semplice sarebbe mettere la variabile F in un modulo?
E' normale tutto questo popo' di roba o mi sn perso in un bicchiere di 
acqua?
-- 
Quando noi ignoranti eravamo di piů,
tutto era piů bello...
(A. Celentano)

 acqua?
Per evitare nuove istanze, devi verificare se la form è nothing o dispose,
tipo:
Private f As Form2
Private Sub Button1_Click ......
        If f Is Nothing OrElse f.IsDisposed Then
            f = New Form2
            f.Show()
        End If
    End Sub
Sopra verifica se non è istanziata, quindi ne esegue una nuova.
Per il passaggio di valori tra form, se ne è discusso, vedi:
http://groups.google.it/groups?hl=it&lr=&ie=UTF-8&q=vb.net%2Bdati%2Bform&meta=group%3Dit.comp.lang.visual-basic
Ave
giuseppeD
---
CCR


http://support.microsoft.com/default.aspx?scid=kb;EN-US;841292
HTH
-- 
Corrado Cavalli [Microsoft .NET MVP-MCP]
UGIdotNET - 
http://www.ugidotnet.org
Weblog: 
http://www.ugidotnet.org/710.blog

     End Sub
Ah, ecco :P non l'avevo visto... :)
Ciao
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

la Microsoft lo ripristinerà in una versione successiva.
Francamente io spero di no. Vb6 faceva molte cose dietro le quinte, a
me non piacevano le cose dietro le quinte e mi toccava studiare per
aggirarle. A mio avviso, molto meglio cosi'.
--
Ciao!
Luca Menegotto

Correttissimo quello che dici...
Ma forse forse io per le applicazioni d'ufficio preferivo VB ad un VC 
perchč poco poco mi faceva vedere un form come un oggetto a sč stante. 
Poco m'importa(va) se poi dietro le quinte mi faceva il discorso che ora 
devo fare io a mano per crearmi uan mia classe etc. etc.
Era quello per me il bello di vb: dare un'interfaccia in maniera 
semplice ed immediata. Infatti ancora oggi dico in giro questo, quando 
si critica VB sulle sue prestazioni rispetto al C, sulla sua lentezza in 
calcoli onerosi... rispondo sempre che VB č utile per dare 
immediatamente un'interfaccia grafica a delle applicazioni. Mi serve una 
routine per il calcolo dell'SHA-1? Me la scrivo in C e ne faccio una 
DLL. Poi l'applicativo vero e proprio che mi permette di sfogliare il pc 
per scegliere il file di cui calcolarmi il digest lo faccio in VB con 
due righe di codice (tanto per fare un esempio).
In ufficio mi chiedono di cambiare il software che sto sviluppando per 
aggiungere due form con dei ruoli diversi? Con VB era molto piů semplice...
Ora, non per criticare 
VB.NET
 perchč si puň dire che non lo conosco 
affatto, ma se per ogni form che mi serve devo stare lě a scrivere tutto 
quel codice che prima veniva fatto dietro le quinte... beh credo che la 
cosa mi rallenti un bel po'.
Prima facevo Form2.Show, o magari Load Form2 con Me.Show nell'evento 
Load... E mi sbrigavo. E sapevo che cliccare 20 volte sul command button
non mi avrebbe creato 20 istanze dello stesso form.
Se volevo le 20 istanze lo facevo io a manina.
Ora invece č il contrario... devo ogni volta progettarmi il form 
graficamente e poi a manina scrivermi quello che mi occorre per far sě 
che il form venga caricato una sola volta.
Ripeto, magari andando avanti avrň anche 100 motivi per mandare a quel 
paese VB6 e passare a .NET, ma dover scrivere per ogni progetto quello 
che prima VB mi faceva dietro le quinte per le cose basilari... 
ecchecchio...


 cosa mi rallenti un bel po'.
Per evitare questi rallentamenti esiste la riusabilità del codice :)
Anzichè fare
GetForm2 As Form2
puoi generalizzare con un
GetForm(ByVal formClass As String) As Form
istanziare la form corretta ad es. tramite Reflection e richiamare
MyForms.GetForm("Form2").Show()
Puoi ridurre il tutto definendo GetForm come Default (che non equivale alla
proprietà di default di VB6 anche se ci assomiglia):
MyForms("Form2").Show()


che prima VB mi faceva dietro le quinte per le cose basilari... 
Libero di non credermi, non ho mai utilizzato quella feature di vb6, e
non l'ho fatto a bella posta. Preferisco essere io a dire quando un
oggetto esiste e quando no, e in questo senso confesso che a me non e'
mai piaciuta l'idea del garbage collector....
--
Ciao!
Luca Menegotto

MyForms("Form2").Show()
In buona sostanza, devi ricominciare a pensare bene a quello che stai
facendo. Io ci vedo solo cose buone (anche se, devo essere sincero, io
sto affrontando il C# piuttosto che il 
VB.NET
),
--
Ciao!
Luca Menegotto

 Luca Menegotto

 sto affrontando il C# piuttosto che il 
VB.NET
),
Anche C# ha la stessa caratteristica, sono le proprietà indicizzate che in
C# fai con
public <tipo> this[string name]
Sono ampiamente usate dal framework, ma come dicevo non equivalgono alle
proprietà di default di VB6: servono solo, e solo per questo, per evitare
(per lo più nelle collezioni) di usare
myHashtable.Item("pippo")
'l'uso di Item, se indicizzato, in C# non è nemmeno supportato!
ma piuttosto
myHashtable("pippo")
' myHashtable["pippo"] in C#


 VB6 ha un garbage collector ?
Suppongo abbia cambiato versione nella frase.
Si riferiva a vb7 ^^

 che prima VB mi faceva dietro le quinte per le cose basilari...
Non vedo tutta 'sta roba in più da fare sinceramente.
Eppoi una volta che ti sei fatto le tue routine funzionanti anche in questo
nuovo ambiente, dove sta il problema?
Il bello di tutto ciò è soprattutto che puoi programmare in un linguaggio
"simil visual basic" cose che si fanno in c# e l'assembly prodotto sarà lo
stesso ^^
per quanto riguarda l'utilizzo improprio di miaform.show io l'ho sempre
detestato.
(e noto con piacere che non sono l'unico. spero vivamente che non lo
inseriscano nella prossima versione, altrimenti passo all'istante a c#, cosa
che tra l'altro ho intenzione di fare..)

 Si riferiva a vb7 ^^
In che senso?
VB6 HA un GC, e funziona anche decisamente bene, a parte casi eccezionali.
Il GC di VB6 è implementato usando quella che chiamano "reference-counter",
cioè un contatore dei riferimenti agli oggetti utilizzati.
