Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Come creare un array di list(of T)
Forum - C# / VB.NET - Come creare un array di list(of T)

Avatar
lupino (Normal User)
Newbie


Messaggi: 13
Iscritto: 21/07/2012

Segnala al moderatore
Postato alle 23:49
Sabato, 21/07/2012
Buongiorno a tutti, sto cercando di creare un programma in vb.net in grado di trasportare su di un grafico i valori raccolti tramite scheda di acquisizione da vari sensori.
Il grafico in questione, del tipo x/y, è rappresentato da una picturebox ed i vari punti (valori dei sensori) sono in esso riportati nell'evento "Paint" attraverso la funzione fillrectangle(Brushes.Blue, Point.X, Point.Y, 3, 3).
Onde ovviare alla normale cancellazione che avverrebbe ridimensionando il Form o in caso di sovrapposizione di altri form, e, al fine di avere un array contenente tutti di dati raccolti da poter salvare direttamente su disco, inserisco i valori provenienti da ogni sensore, sottoforma di Point in una list(of Point).

Partendo dal presupposto di avere 4 sensori ...
Codice sorgente - presumibilmente C# / VB.NET

  1. Private GraphPt1, GraphPt2, GraphPt3, GraphPt4 As New List(Of Point)


La mia domanda è la seguente:
E' possibile riunire le varie "liste" in un solo array? ...della serie
Codice sorgente - presumibilmente VB.NET

  1. Private GraphPt As List(Of Point)()
  2. ......
  3.  Private Sub frmGraph_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  4.            GraphPt = New List(Of Point)(4) {}
  5.            .........


in tal caso (spero la sintassi sia giusta) l'inserimento dei vari valori dovrebbe avvenire:
Codice sorgente - presumibilmente VB.NET

  1. ....
  2. ' GraphPort sono le porte a cui sono collegati i sensori
  3. 'tmX e tmY rappresentano il valore del sensore trasformato in coordinate
  4.         For indx As Int16 = 0 To 3
  5.             If GraphPort(indx) <> "OFF" Then
  6.                 GraphPt(indx).Add(New Point(tmX, tmY))
  7.             End If
  8.         Next
  9. ...


Chiedo venia ai moderatori per eventuali "brutture" nel mio scritto... arrivo dal modesto vba e ..... bè immaginerete il salto che mi è toccato fare

Ultima modifica effettuata da lupino il 22/07/2012 alle 2:27
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 12:04
Domenica, 22/07/2012
Certo che è possibile, ma una volta creato l'array devi ricordati di inizializzare ogni lista singolarmente:
Codice sorgente - presumibilmente VB.NET

  1. Dim GraphPt(3) As List(Of Point)
  2.  
  3. For I As Int32 = 0 To 3
  4.     GraphPt(I) = New List(Of Point)()
  5. Next


PM Quote
Avatar
lupino (Normal User)
Newbie


Messaggi: 13
Iscritto: 21/07/2012

Segnala al moderatore
Postato alle 10:28
Lunedì, 23/07/2012
Perfetto Totem, grazie mille, era un paio di giorni che mi arrovellavo sull'errore senza venirne a capo, grazie ancora!
Ricapitolando per chiunque ne avesse bisogno.....
Codice sorgente - presumibilmente VB.NET

  1. Public Class frmGraph
  2.  
  3.     'Dichiaro un array di List(of point), uno per ogni sensore interessato, e un array di pennelli si da poter distinguere i vari dati sul grafico
  4.     .......
  5.     Private GraphPt(3) As List(Of Point)
  6.     Private GraphBrush() As Brush
  7.     .......
  8.  
  9.     Private Sub frmGraph_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  10.         'Inizializzo i due array
  11.         ......
  12.         For indx As Int16 = 0 To 3
  13.             GraphPt(indx) = New List(Of Point)
  14.         Next
  15.         GraphBrush = New Brush(3) {Brushes.Red, Brushes.Green, Brushes.Yellow, Brushes.Blue}
  16.         ......
  17.     End Sub
  18.     .....
  19.     .....
  20.     Private Sub picGraph_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles picGraph.Paint
  21.     .....
  22.         'GraphPort contiene il numero della porta (pin) a cui è collegato il sensore o, in alternativa, -OFF- se è spenta
  23.         For indx As Int16 = 0 To 3
  24.             If GraphPort(indx) <> "OFF" Then
  25.                 For Each pt As Point In GraphPt(indx)
  26.                     gr.FillRectangle(GraphBrush(indx), pt.X, pt.Y, 3, 3)
  27.                 Next
  28.             End If
  29.         Next
  30.     .....
  31.     End Sub
  32.     ....
  33.     Private Sub tmrData_Tick(sender As System.Object, e As System.EventArgs) Handles tmrData.Tick
  34.     'La rilevazione dei dati dai sensori avviene ciclicamente
  35.     'le linee che seguono servono per testare il grafico
  36.  
  37.         Dim tmr As Int32 = CInt(tmrData.Tag)
  38.         For indx As Int16 = 0 To 3
  39.             If GraphPort(indx) <> "OFF" Then
  40.                 GraphPt(indx).Add(New Point(tmr, tmr + indx))
  41.             End If
  42.         Next
  43.         picGraph.Invalidate()
  44.         tmr += 1
  45.         tmrData.Tag = tmr
  46.     End Sub


Ancora grazie

Ultima modifica effettuata da lupino il 23/07/2012 alle 10:30
PM Quote