Newsgroup: it.comp.lang.visual-basic
Titolo: [NET]: sugli array

Ciao,
sappiamo che con l'introduzione di .NET gli array di controlli sono 
spariti, per lo meno come si intendevano in VB6. A questo proposito ho 
due domande, una pratica e una filosofica :)
1) Volendo ugualmente sfruttare i vantaggi degli array di controlli ho 
trovato questo sistema (che chiamo durante la Load del form)
Dim control As Control
Dim i As Integer
Dim aTextBox() As TextBox
For Each control In Me.Controls
     If TypeOf control Is TextBox AndAlso 
control.Name.StartsWith("txtMioArray") Then
         ReDim Preserve aText(i)
         aText(i) = DirectCast(control, TextBox)
         i += 1
     End If
Next
Funziona... ha però dei difetti in quanto non è chiaro l'ordine con cui 
assegna i vari controlli agli indici degli array. Qualcuno conosce una 
strada migliore?
2) Domanda filosofica: io ho sempre ritenuto comodissimi e faccio (in 
VB6) largo uso di array di controlli, scrivendo sempre poco codice e 
trovandomi ottimamente. Parlo sempre di controlli inseriti a 
design-time, non caricati dinamicamente.
Se la Microsoft ha deciso di togliere questo supporto avrà (spero) avuto 
le sue buone ragioni. Perciò chiedo: volendo ripensare in maniera .NET 
quello che prima si faceva con gli array di controlli... come si fa?
Mi trovo spesso a gestire gruppi di una decina o più di controlli a cui 
fanno capo le stesse procedure e gli stessi eventi. E' assurdo scrivere 
10 volte lo stesso codice, quindi? Quale strada seguire?
Ciao!
Marco / iw2nzm

 ha scritto nel messaggio 
news:dyJjf.16514$S6.2...@twister2.libero.it...


 strada migliore?
Provo a risponderti...
In vb6 avevi gli array di controlli, e il vantaggio sostanziale era che la
routine di evento riceveva l'indice del controllo all'interno dell'array,
in questo modo potevi sapere chi era che aveva scatenato l'evento, e
reagire di conseguenza.
In 
vb.net
 il problema è risolto "alla radice": negli argomenti passati
alla routine di evento c'è sempre, come primo parametro, un oggetto che
punta al controllo che scatena l'evento stesso. Non hai bisogno di avere
l'indice per ritrovarlo all'interno dell'array.
Quindi non hai bisogno di riscrivere n volte una routine di evento, hai
solo bisogno di associare al run time, nel load della form, gli eventi al
loro gestore.
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
Se i tempi non chiedono la tua parte migliore, inventa altri tempi. 
(Baolian, libro II, vv. 16-17)
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Next
Ok, ottima soluzione per generare a run-time i controlli. A volte può 
essere però comodo averli posizionati a design-time. Ma a questo 
proposito continuo nel post più sotto (o sopra...)
Marco / iw2nzm

 loro gestore.
In teoria ci sono :)
Ma facciamo un semplicissimo esempio.
Disegno tre textbox sul form.
Associo l'evento textchanged alle tre aggiungendoli all'handle dell'evento.
Vorrei - ad esempio - che la casella di testo in cui si verifica 
l'evento si colori di rosso (.BackColor = Color.Red).
Bene, come mi riferisco al controllo individuato da 'sender' per poter 
impostare la proprietà?
Garzie!
Marco / iw2nzm

 l'evento si colori di rosso (.BackColor = Color.Red).
All'interno del gestore di evento, ti basta scrivere:
Directcast(sender,textbox).backcolor = colors.red


 Directcast(sender,textbox).backcolor = colors.red
Hai ragionissima! Non ci avevo pensato eppure era molto semplice.
Ok, dovrei aver capito come fare a meno degli array :D
Thx,
Marco / iw2nzm


Da quel che so io dovresti usare delle cose che si chiamano Delegate.
Purtroppo non ne ho ancora avuto bisogno e devo ancora sperimentare come 
usarli per bene..
Dovrebbero essere una specie di metodo per assegnare ad un evento di un 
controllo la procedura che lo deve gestire.
Quindi da quanto ho capito, puoi associare a ogni controllo dell'ex-array la 
stessa procedura.
Sicuramente c'è molto do più da sapere..
Ciao,
    Diego