Newsgroup: it.comp.lang.visual-basic
Titolo: Migrazione da VB6 a VB.Net(2002)... Creare matrice di controlli in esecuzione

Probabilmente noi vecchietti dovremmo cominciare a preoccuparci di pensioni
e previdenza... Ma ogni tanto qualcuno non si rassegna e cerca di tenere in
allenamento qualcuno dei pochi neuroni rimasti attivi...:o)
In VB6 questa 4 righe di codice facevano miracoli...
For x=1 to n
    Load MyControl(x)
    MyControl(x).Top = MyControl(x-1).Top + 19
    MyControl(x).Visible = True
Next
Dato che la proprieta' Index non è più supportata... chi ha un esempietto da
farmi vedere???:-)
Non ho trovato uno straccio di esempio nei GB do documentazione...:-(
TIA
Funnycrow


In un certo senso c'e' un esempio in ogni singola finestra che crei in
Visual Studio...
prova ad aprire il codice generato automaticamente dall'IDE (la region "
Windows Form Designer generated code ") e guarda come si comporta nella Sub
InitializeComponent.
Lo stesso sistema puoi applicarlo per i tuoi controlli dinamici in qualsiasi
altro punto del codice; se poi vuoi avere un raggruppamento come quello che
ottenevi con le matrici di controlli puoi aggiungere l'istanza, oltre che in
'Me.Controls' ache in un tuo array/collection/altro insieme dichiarato
opportunamente.
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 ha scritto nel messaggio
news:2kd4dn...@uni-berlin.de...

Scusami... Ma non son riuscito a ricevere "lumi" dal codice generato
automaticamente da VB
Allora ho fatto questa ulteriore prova:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
    Dim newbutt As New Button()
    newbutt = Button1
    newbutt.Top = Button1.Top + 40
    newbutt.Visible = True
End Sub
Bene, mi ha spostato il Button1 di 40 pixel, ma o non mi ha creato il
secondo button, o Button1 ha ereditato anch' esso la proprieta' Top che
intendevo solo modificare per newbutt
Credo di non capire come fare a creare una nuova istanza di Button1...:-(

 farmi vedere???:-)
L'array, come in vb6 non è supportata in .net
All'inizio anch'io ho perplesso davanti a tale mancanza, ma con il tempo mi
sono ricreduto.
Ti assicuro, sia la flessibilità che le potenzialità sono maggiori in . NET.
Ho scritto di getto il seguente codice,
se ti va testalo con modifiche eseguite da te:
1- Aggiungi la seguente classe
Public Class myTextBox
    Inherits System.Windows.Forms.TextBox
    Public Sub New()
        Me.Width = 50
        Me.BorderStyle = BorderStyle.FixedSingle
    End Sub
    Private Sub myTextBox_Enter(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Enter
        Me.BackColor = Color.Yellow
    End Sub
    Private Sub myTextBox_Leave(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Leave
        Me.BackColor = Color.White
    End Sub
End Class
2- Nell'evento Load della Windows form, add il seguente:
 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
        Dim x As Int32
        Dim c As myTextBox
        For x = 0 To 10
            c = New myTextBox
            c.Name = "txt" & x
            c.Top = (c.Height * x) + 19
            Me.Controls.Add(c)
        Next
    End Sub
fai eseguire il focus da parte del mouse e il leave
Ave
da giuseppeD, che ancora prende il Gerovital
---
CCR

Provato... Fa effettivamente quel che volevo... Grazie!
Quindi se il caldo non mi assale...probabilmente avrò una notte dal sonno
tranquillo:-)
Analizzando il codice ha effettivamente una sua logicità anche per il
programmatore di VB6.
Ancora una domanda però se posso.
Io ho copiato brutalmente il codice, quindi ho messo la classe  myTextBox
direttamente nel modulo del form, mentre in VB6 avrei dovuto creare la
classe in un file distinto... Quindi le classi se sono pubbliche posso
scriverle praticamente dove voglio?


 scriverle praticamente dove voglio?
Si dovrebbe rispondere alla fine del messaggio, anche tagliando parti che si
possono leggere nel post precedente o superflui,
per alleggerire il proseguo della discussione.
Si è possibile inserire le classi pubbliche in qualsiasi modulo e
richiamarle da dove uno vuole.
In un modulo possono coesistere moduli e classi.
Ritengo, per semplicità di lettura, di non farsi trasportare
dall'entusiasmo, ma di ordinare logicamente i metodi
Ave
giuseppeD
---
CCR

    newbutt = Button1
--
Ciao!
Luca Menegotto

 ha scritto nel messaggio
news:d983e0l9804gv7l12...@4ax.com...

Beh... in effetti è logico quel che succede col senno di poi... Ma dato che
stavo brancolando nel buio, avrebbe potuto essere un ipotesi... In fondo,
dichiaravo il newbutt uguale al Button1 poi le proprietà le cambiavo solo al
newbutt, un po' come se dicessi che a=b poi dico che a=a+5... b
continuerebbe ad avere il suo valore originario...
Cmq... Dato che son nuovo di VB.NET... potrebbero arrivarvi altre richieste
di aiuto "demenziali" e spero di poter ricambiare i favori appena Avrò un
po' piu' di dimestichezza col linguaggio...:-)


 Hai perfettamente ragione... Erano perň un paio d' anni che non bazzicavo
piů per i NG ed ho perso per strada alcune regole di "civica convivenza

continuerebbe ad avere il suo valore originario...
Se non che una delle cose principali che bisogna sapere - e la cosa in
.NET e' stata estremizzata) e' che quando dichiari DIM qualcosa AS
qualcosaltro molto spesso dichiari un riferimento, non un oggetto vero
e proprio. Il che implica che nel tuo caso stavi impostando il
riferimento in modo che si riferisse all'oggetto originale, non ne
stavi facendo una copia.
--
Ciao!
Luca Menegotto

 continuerebbe ad avere il suo valore originario...
In .Net esistono i value type (variabili che contengono il valore) e i
reference type (variabili che contengono un riferimento).
I value type sono tutti i tipi di base (numerici, datetime, ecc) e le
strutture, più le stringhe che sarebbero dei ref.type, ma per come sono
implementate si comportano esattamente come un value type.
Tutto il resto è ref.type.
Per ovvi motivi, puoi fare
a = b
a = a + 5
con un value type e "a" varrà b + 5, ma se lo fai con un reference type
varierai anche il valore di "b".
Ciao
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net