Oppure

Loading
21/07/12 21:49
lupino
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 ...
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
Private GraphPt As List(Of Point)()
......
 Private Sub frmGraph_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
           GraphPt = New List(Of Point)(4) {}
           .........

in tal caso (spero la sintassi sia giusta) l'inserimento dei vari valori dovrebbe avvenire:
....
' GraphPort sono le porte a cui sono collegati i sensori
'tmX e tmY rappresentano il valore del sensore trasformato in coordinate
        For indx As Int16 = 0 To 3
            If GraphPort(indx) <> "OFF" Then
                GraphPt(indx).Add(New Point(tmX, tmY))
            End If
        Next
...

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 22/07/12 0:27
aaa
22/07/12 10:04
Il Totem
Certo che è possibile, ma una volta creato l'array devi ricordati di inizializzare ogni lista singolarmente:
Dim GraphPt(3) As List(Of Point)

For I As Int32 = 0 To 3
    GraphPt(I) = New List(Of Point)()
Next
aaa
23/07/12 8:28
lupino
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.....
Public Class frmGraph

    '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 
    .......
    Private GraphPt(3) As List(Of Point)
    Private GraphBrush() As Brush
    .......

    Private Sub frmGraph_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'Inizializzo i due array
        ......
        For indx As Int16 = 0 To 3
            GraphPt(indx) = New List(Of Point)
        Next
        GraphBrush = New Brush(3) {Brushes.Red, Brushes.Green, Brushes.Yellow, Brushes.Blue}
        ......
    End Sub
    .....
    .....
    Private Sub picGraph_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles picGraph.Paint
    .....
        'GraphPort contiene il numero della porta (pin) a cui è collegato il sensore o, in alternativa, -OFF- se è spenta
        For indx As Int16 = 0 To 3
            If GraphPort(indx) <> "OFF" Then
                For Each pt As Point In GraphPt(indx)
                    gr.FillRectangle(GraphBrush(indx), pt.X, pt.Y, 3, 3)
                Next
            End If
        Next
    .....
    End Sub
    ....
    Private Sub tmrData_Tick(sender As System.Object, e As System.EventArgs) Handles tmrData.Tick
    'La rilevazione dei dati dai sensori avviene ciclicamente
    'le linee che seguono servono per testare il grafico

        Dim tmr As Int32 = CInt(tmrData.Tag)
        For indx As Int16 = 0 To 3
            If GraphPort(indx) <> "OFF" Then
                GraphPt(indx).Add(New Point(tmr, tmr + indx))
            End If
        Next
        picGraph.Invalidate()
        tmr += 1
        tmrData.Tag = tmr
    End Sub

Ancora grazie
Ultima modifica effettuata da lupino 23/07/12 8:30
aaa