Newsgroup: it.comp.lang.visual-basic
Titolo: [VB2008]

Salve a tutti , vorrei sottoporvi un questito che mi sta' facendo
diventare pazzo.
Ho un centinaio di oggetti i cui valori devono essere trasferiti su
altrettanto label sulla form.
In vb6 avrei utilizzato un indice per i controlli ma in vb2008 come si
fa' ? Devo manualmente scrivere righe e riche di codice senza poter
usare un volgare For Next ?
Grazie Mille

 usare un volgare For Next ?
una cosa di questo tipo dovrebbe fare al caso tuo:
dim objControllo as controll
for each objControllo in me.controls
    if typeof(objControllo) is textbox then
        'blablabla
    end if
next
Guarda che ho scritto il codice alla buona/naso/memoria, anche se
sono poche righe potrei averle farcite con errori.
saluti,
pusky re delle rane


Semplicemente, nel costruttore o nell'evento Load, li raggruppi in un
insieme di tuo gradimento (Array, Collection, List (Of xx)) e poi fai
riferimento a quello.
Oppure usi direttamente l'insieme globale dei controlli della form
(Form.Controls)

next
Quello che scrivi tu puo' andare bene in altre circostanze.
Mi piego meglio
ho 100 (circa) oggetti tutti dello stesso tipo per esempio lo stato e
le propiet� di motori  , per fare quello che dici tu dovrei ciclare
per ogni ogetto il codice da te postato .
Siccome ad ogni ogetto in memoria corrisponde un label sul form , 
ogni 2  secondi (il tempo con cui voglio aggiornare la grafica) devo
fare un ciclo di 10.000 elementi.
In vb6 bastava usare un banale indice.
Possibile che non esista una maniera piu' diretta?

(Form.Controls)
Puoi spiegare meglio la prima soluzione?
Perdonami ma il passaggio da vb6 a .net non l'ho ancora digerito


Intento mi pare di aver capito, dall'altra tua risposta, che stai
parlando sia di oggetti creati da te, sia di controlli label... per
quanto riguarda i primi, quando li crei? nel Load? oppure vengono
passati alla form dal chiamante?
Ad ogni modo, supponendo che tu li li crei nel Load, puoi fare una
cosa del genere (do per scontato che tu non abbia già creato le 100
label in design ma le voglia creare a runtime insieme agli oggetti,
che è più pratico in questi casi):
Public Class Form1
   Private ObjectList As New List(Of laTuaClasse)
   Private LabelList As New List(Of Label)
   Private Sub Form1_Load(ByVal sender As System.Object _
                          , ByVal e As System.EventArgs) _
                          Handles MyBase.Load
      Dim o As LaTuaClasse
      Dim l As Label
      For i As Integer = 1 To 100
         o = New LaTuaClasse
         '[...] varie ed eventuali
         ObjectList.Add(o)
         l = New Label
         'coordinate di esempio
         l.Location = New Point(10, i * 20)
         '[...] varie ed eventuali
         l.Text = i.ToString
         LabelList.Add(l)
         'aggiungiamo ai controlli complessivi della form
         Me.Controls.Add(l)
      Next
   End Sub
End Class
a questo punto ObjectList e LabelList sono due insiemi allineati, e
per aggiornare la label x con i valori del corrispondente oggetto x
non fai altro che fare un ciclo su ObjectList e usare lo stesso indice
su LabelList
Poi ci sono anche tanti altri modi di trattare una cosa simile; per
esempio potresti derivare un nuovo controllo da Label, aggiungere
soltanto una property di tipo LaTuaClasse, e magari un metodo per
aggiornarla:
Public Class TuaLabel
   Inherits Label
   Private mTuoOggetto As LaTuaClasse
   Public Property TuoOggetto() As LaTuaClasse
      Get
         Return mTuoOggetto
      End Get
      Set(ByVal value As LaTuaClasse)
         mTuoOggetto = value
      End Set
   End Property
   Public Sub RefreshTuoOggetto()
      Me.Text = TuoOggetto.xxx 'quello che serve
   End Sub
End Class
A questo punto, quando crei oggetti e label li metti in relazione uno
con l'altro e puoi fare a meno delle liste:
Public Class Form1
   Private Sub Form1_Load(ByVal sender As System.Object _
                          , ByVal e As System.EventArgs) _
                          Handles MyBase.Load
      Dim o As LaTuaClasse
      Dim l As LaTuaLabel
      For i As Integer = 1 To 100
         o = New LaTuaClasse
         '[...] varie ed eventuali
         l = New LaTuaLabel
         'Associ oggetto a label
         l.TuoOggetto = o
         '[...] varie ed eventuali
         'aggiungiamo ai controlli complessivi della form
         Me.Controls.Add(l)
      Next
   End Sub
End Class
ora, per aggiornare tutte e sole le Label interessate ti basta un
unico ciclo su Controls:
For Each c As Control in Me.controls
    'Solo le label del tuo tipo personalizzato
    if typeof c is LaTuaLabel then
        DirectCast(c, LaTuaLabel).RefreshTuoOggetto()
    end if
next


wrote:
Ti ringrazio sei stato molto chiaro. 
Provero' la tua soluzione .
Grazie