Eliminare un campo da un elenco

giovedì 27 luglio 2006 - 09.34

new Profilo | Junior Member

Ciao a tutti, ho la necessità di eliminare un campo da un elenco di Point che ottengo attraverso un ciclo DO WHILE LOOp, con abbinato un Redim preserve con relativo Counter.
Il problema è che alla fine mi ritrovo anche un campo con valore 0,0 che in realtà non esiste nel mio elenco, ma viene generato dal ciclo. Come faccio ad eliminarlo??

Se serve allego codice:

Dim ListPoubters As Point()
Dim PointsNumber As Integer = 0
Dim Counter As Integer = 0
Dim po2 As Point
Dim oj = [Object].ReferenceEquals(0, 0)
Do While reader.Read()
Dim la = reader.Item("Latitude")
Dim lo = reader.Item("Longitude")
If la <> ("0") And lo <> ("0") Then
ReDim Preserve ListPoubters(PointsNumber + 1) 'as PointF
PointsNumber = PointsNumber + 1
po2 = New Point(la, lo)
Counter = Counter + 1
ListPoubters(Counter) = (New Point(po2))
Lb1.Items.Add(po2)
client.Text = ("Inseriti " & Counter & "punti")
End If

Loop

Pb1.CreateGraphics.DrawLines(greenPen, ListPoubters)

Grazie
new

sanbiz Profilo | Senior Member

>Ciao a tutti, ho la necessità di eliminare un campo da un elenco
>di Point che ottengo attraverso un ciclo DO WHILE LOOp, con
>abbinato un Redim preserve con relativo Counter.
>Il problema è che alla fine mi ritrovo anche un campo con valore
>0,0 che in realtà non esiste nel mio elenco, ma viene generato
>dal ciclo. Come faccio ad eliminarlo??
>
>Se serve allego codice:
>
> Dim ListPoubters As Point()
> Dim PointsNumber As Integer = 0
> Dim Counter As Integer = 0
> Dim po2 As Point
> Dim oj = [Object].ReferenceEquals(0, 0)
> Do While reader.Read()
> Dim la = reader.Item("Latitude")
> Dim lo = reader.Item("Longitude")
> If la <> ("0") And lo <> ("0") Then
>ReDim Preserve ListPoubters(PointsNumber + 1) 'as PointF
> PointsNumber = PointsNumber + 1
> po2 = New Point(la, lo)
> Counter = Counter + 1
> ListPoubters(Counter) = (New Point(po2))
> Lb1.Items.Add(po2)
>client.Text = ("Inseriti " & Counter & "punti")
> End If
>
> Loop
>
> Pb1.CreateGraphics.DrawLines(greenPen, ListPoubters)
>

Così a prima vista sembra che il tuo problema sia sul primo elemento dell'array ListPoubters;
alla prima reader.Read il valore Counter è = 0 e se fai ReDim Preserve ListPoubters(PointsNumber + 1) l'array possiede due elementi, uno con indice 0 (che non hai gestito) e l'altro con indice 1 (PointsNumber + 1).
Quello che potresti fare è impostare il valore iniziale di Counter a -1 (dim Counter As Integer = -1) in modo che al primo incremento sia 0.

Una nota:
Non è proprio bello dimensionare una variabile senza indicarne il tipo "Dim la" (integer?, long?)

--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

new Profilo | Junior Member

Grazie per la risposta

Comunque ci avevo gia pensato, ed il risultato è che non fa altro che generarmi lo stesso errore solo nell'ultima posizione anzi che nella prima!!!

Per quanto riguarda la tua nota hai ragione, è stata una dimenticanza!!


new

sanbiz Profilo | Senior Member

>Grazie per la risposta
>
>Comunque ci avevo gia pensato, ed il risultato è che non fa altro
>che generarmi lo stesso errore solo nell'ultima posizione anzi
>che nella prima!!!

Ok, guardando meglio il tuo codice forse è il caso di fare un po' di ordine:

If la <> ("0") And lo <> ("0") Then
ReDim Preserve ListPoubters(PointsNumber + 1) 'as PointF
PointsNumber = PointsNumber + 1
po2 = New Point(la, lo)
Counter = Counter + 1
ListPoubters(Counter) = (New Point(po2))
Lb1.Items.Add(po2)
client.Text = ("Inseriti " & Counter & "punti")
End If

Utilizzi die variabili PointsNumber e Counter per fare la stessa cosa. Se ovviamente imposti una a -1 come dichiarazione iniziale anche la seconda deve essere a -1.
In ogni caso togline una (ad esempio counter) ed incrementa la PointsNumber:

If la <> ("0") And lo <> ("0") Then
PointsNumber += 1
ReDim Preserve ListPoubters(PointsNumber) 'as PointF
po2 = New Point(la, lo)
ListPoubters(PointsNumber) = (New Point(po2))
Lb1.Items.Add(po2)
client.Text = ("Inseriti " & Counter & "punti")
End If

Facendo così dovrebbe essere tutto ok.

--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

new Profilo | Junior Member

Grandissimo!!!

Tutto ok!!

Grazie
new
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5