Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET] - Matrici

Un saluto a te che leggi,
Non ho ben capito come fare le matrici di insieme.
Nel form sono presenti txtPippo.text e txtPippo1.text
...Come faccio a fare una matrice su questi due oggetti?
Grazie.
PS:
Esempio con Ciclo For per cortesia.

 Non ho ben capito come fare le matrici di insieme.
cosa sarebbero queste matrici di insieme?
--
Salutoni
Sergio

"CSSoft"  ha scritto nel messaggio

Text1(0).text
Text1(1).text
.
.
.
Text1(5).text

 Esempio con Ciclo For per cortesia.
Il problema qual'e' esattamente?
vuoi sapere come si crea in generale una matrice che possa contenere dei
controlli, o ti interessa come, dato un prefisso 'txtPippo' e un suffisso
numerico, puoi aggiungere in un array, con un unico ciclo tutti i controlli
il cui nome e' composto dai due?
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 --
Scusate probabilmente mi espresso male.
Codice VB6
For I = 0 to 7
       text1(I).text="Ciao"
Next I
Vorrei fare la stessa cosa in 
VB.NET
 ....


Avete presente in vb6 quanto fate la copia di un oggetto, e vi domanda se
volete fare
un array...beh..questo in .NET non č piu' possibile...quindi presumo che ci
sia
una procedura diversa da eseguire...ma quale....?

dato che ogni controllo in .NET č un oggetto vero e proprio, puoi fare cosģ:
Dim txtTesto as New Textbox
txtTesto.Name="txtTesto"
txtTesto.Text="Testo predefinito"
txtTesto.Visible=True
Me.Controls.Add txtTesto
Praticamente, crei l'oggetto con tutte le sue proprietą, poi lo aggiungi
alla collection dei Controls del form.....
poi, sempre via codice, aggiungi le routine per gestire gli eventi, cosģ:
AddHandler nomecontrollo.nomevento, AddressOf nomeroutine
concettualmente, puoi riprodurre quello che facevi prima in vb6, allora un
numero x di controlli che usano le stesse routine per gestire gli
eventi......
good coding!!!
-- 
Damiani Liborio Igor
ig...@igordamiani.it
 - 
soft...@igordamiani.it
 - 
idam...@hotmail.com
http://www.igordamiani.it
ICQ : 11847262

 AddHandler nomecontrollo.nomevento, AddressOf nomeroutine
    non ti seguo piu'...


sì, scusa, sono stato un po' precipitoso....
allora, vediamo. In .NET non puoi più gestire array di controlli, cioè non
puoi più avere txtTesto(0), txtTesto(1) e così via. Però, se pensi un
attimo, qual'era la comodità degli array di controlli?
il fatto di avere, faccio un esempio, 10 textbox tutte gestite dalle stesse
routine evento, mi spiego?
per gestire il LostFocus, scrivi una sola routine, e sei in grado di
distinguere una textbox dall'altra tramite il parametro Index dentro la
routine stessa. Ci sei?
Ok, in .NET questa cosa la fai creando i controlli in fase di run-time come
ti ho fatto vedere prima. In altre parole, puoi fare più o meno così:
Dim i as Long
For i=1 to 10
    Dim Temp as New Textbox
    Temp.Name="txtTesto" & i
    Temp.Text="Valore predefinito"
    Temp.Visible=True
    AddHandler Temp.LostFocus, AddressOf LostFocusCaselle
    Me.Controls.Add Temp
Next
Questo piccolo codice, messo sul Form_Load, crea 10 caselle di testo e le
posiziona tutte nell'angolo in alto a sinistra, presumo. Per questo tu ne
vedrai una sola; però in effetti sono 10. A ciascuna di queste textbox viene
associata la routine chiamata LostFocusCaselle, che verrà richiamata ogni
volta che si scatena l'evento LostFocus su una qualsiasi delle textbox.
Prova, e chiedi ancora se hai qualche dubbio


 good coding!!!
Provo....Grazie mille per la spiegazione.

 ha scritto nel messaggio
news:bjpddu$fa6$2...@newsreader.mailgate.org...
un info:
se inserisci una textBox otterrai il seguente codice:
Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown
se alla fine digiti una virgola si attiva il menů dell' intellisense
contenente i nomi degli altri controlli presenti.
Seleziona il controllo, digiti il punto e selezioni l'evento.
Quindi per un secondo text:
 Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown,
TextBox2.MouseDown
Utilizzando i parametri, individuerai il controllo che sta lavorando.
giuseppeD

quindi a livello di progettazione non ho piu' gli oggeti sul form? giusto.
devo fare tutto col codice?
...se ho capito bene...

sì, tutto via codice.....anche se molto probabilmente è più comodo metterne
una sul form, con i colori e le altre proprietà "estetiche" già a posto, poi
le altre che crei via codice le puoi ereditare da quella sul form......
però mi sa che qui ci vuole un guru di .NET, io da solo non basto.....


 > Vorrei fare la stessa cosa in 
VB.NET
 ....
[SNIP]
Devi mantenere un tuo array, creato a runtime.
Premessa:
Come diceva Igor, uno dei motivi per cui erano utili gli array di controlli
era quello di poter utilizzare un unico gestore di eventi, distinguendo in
base all'indice... per questi utilizzi il meccanismo e' cambiato, e non hai
piu' bisogno di array in assoluto, ne' quelli automatici, che non sono piu'
supportati, e nemmeno quelli manuali che vedremo piu' sotto.
Il meccanismo te lo ha gia' spiegato lui, e si basa fondamentalmente su tre
concetti:
- per ogni controllo esiste la possibilita' di impostare dinamicamente la
funzione che consuma un qualunque evento.
- Uno piu' controlli possono utilizzare la stessa funzione per il punto
visto sopra.
- Tutte le routine evento, che siano associate ad un controllo o a molti,
hanno sempre a disposizione un parametro 'sender' che indica l'oggetto
specifico che ha scatenato l'evento.
Tutta questo prembolo per dire che, se l'esigenza e' solo nella gestione
degli eventi, puoi dimenticarti gli array e vivere felice.
Viceversa, per fare qualcosa di simile a quello che hai scritto sopra, cioe'
cicli su raggruppamenti di controlli a tua discrezione per
leggere/scrivere/chiamare metodi, allora effettivamente puo' essere utile
aggiungerli in qualche sorta di lista... qui ti basta semplicemente
scegliere uno dei vari tipi di insieme messi a disposizione del framework
(array "lisci", ArrayList, HashTables ...) e caricarlo in fase di
inizializzazione della form.
Uno dei tanti modi, con una sintassi simile quella che potresti usare anche
in VB6:
Public Class Form1
Inherits System.Windows.Forms.Form
    Private textBoxList() As TextBox
    Public Sub New()
        MyBase.New()
        InitializeComponent()
        'raggruppiamo tutti i textbox esistenti in un array
        Dim t As Control
        Dim i As Int32
        For Each t In Controls
            If TypeOf t Is TextBox Then
                ReDim Preserve textBoxList(i)
                textBoxList(i) = DirectCast(t, TextBox)
                i += 1
            End If
        Next
        'quando ti serve li scorri con...
        For i = 0 To textBoxList.GetUpperBound(0)
            textBoxList(i).Text = "Ciao"
        Next
    End Sub
End Class


sì, esatto, sono d'accordo su tutto....
in effetti prima non l'ho detto, ma anche io uso questa tecnica. Io ho una
collection (utile per reperire un controllo dal suo nome) che mi mantiene
l'elenco di tutte le textbox che ho aggiunto via codice.
Ogni volta che creo una nuova textbox, la aggiungo alla collection, usando
come Key la proprietà .Name della textbox stessa. In questo modo posso fare
una cosa tipo:
MiaCollection("txtTesto34").BackColor=vbRed
ed è abbastanza comoda. In più posso ciclare fra tutte le textbox e così
via.....


 devo fare tutto col codice?
No
anche in questi casi, se il numero dei controlli e' noto e non deve cambiare
dinamicamente in esecuzione, puoi tranquillamente fare il design sulla form
e via codice applicare semplicemente AddHandler, o al limite anche usare la
soluzione di Giuseppe (che e' comoda ma con piu' di 2-3 controlli o eventi
diventa poco pratica e poco leggibile)


 --
certo è sicuramente piu' dinamico..., parametrizzare dinamicamente i
controlli
non è una cosa da poco...
Adesso che ho le idee piu' chiare mi comportero' di conseguenza,
usero' sicuramente gli array in .NET prima o poi...
ma per quello devo fare, mi sembra troppo utilizzare questa procedura,
tuttavia, mi sei stato molto utile.
Grazie e ciao
Maurizio A.
PS:
perdonami se cambio il nome dell'ogetto ma a volte mi da
dei problemi nell'invio.

 --
 effettivamente il numero degli oggetti è noto, non deve cambiare in modo
dinamico.