Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Eliminare un campo da un elenco
giovedì 27 luglio 2006 - 09.34
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
new
Profilo
| Junior Member
65
messaggi | Data Invio:
gio 27 lug 2006 - 09:34
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
208
messaggi | Data Invio:
gio 27 lug 2006 - 10:28
>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
65
messaggi | Data Invio:
gio 27 lug 2006 - 10:41
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
208
messaggi | Data Invio:
gio 27 lug 2006 - 10:54
>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
65
messaggi | Data Invio:
gio 27 lug 2006 - 11:07
Grandissimo!!!
Tutto ok!!
Grazie
new
Torna su
Stanze Forum
Elenco Threads
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 !