Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET] Aggiungere un elemento ad un arrey...

Voglio aggungere un elemento ad un arrey che ho creato...
Apro il Balena e speranzoso mi copio l'esempietto a pag. 303...
Noto con basita tristezza che non funziona, perchè non ha aumentato gli
elementi dell'arrey...
Che faccio???
Per chi non ha il Balena posto l'esempietto...
Sub PuntiInsertElement(ByVal Arr As Array, ByVal Index As Integer, ByVal
NewValue As Integer)
'Sposta gli elementi da Arr(Index) ad Arr(Index+1) per fare spazio
Array.Copy(Arr, Index, Arr, Index + 1, Arr.Length - Index - 1)
'Assegna l'elemento
Arr.SetValue(NewValue, Index)
End Sub
--
Alessandro Vaia,
PANGUANETA S.p.a.

 End Sub
direi che questa funzione inserisce unelemento in "mezzo" all'array, non
aumenta la dimensione dell'array medesimo.
In vb6 si modificavano le dimensioni con l'istruzione redim, in .net la
funzione esiste e funziona, ma non so se esiste una funzione .net "nativa"
per ottenere lo stesso risultato.
Salutoni
Sergio

 gli elementi dell'arrey...
Con .NET non saprei, perň credo che anche lě si scriva 'array'
;-))))))
ciaociao

 per ottenere lo stesso risultato.
Il Redim mi funziona, mi aumenta la dimensione della matrice...
Ma quando faccio il SetValue mi da un errore...
Adesso guardo...


Ok, l'ho messo a posto...
#Region "Aggiunta Punti"
Sub PuntiInsertElement(ByVal Index As Integer, ByVal NewValue1 As Integer,
ByVal NewValue2 As Integer)
'Sposta gli elementi da Punti(Index) ad Punti(Index+1) per fare spazio
Index = Punti.Length + 1
ReDim Punti(Index)
'Assegna l'elemento
Punti.SetValue(New Point(NewValue1, NewValue2), Index)
End Sub
#End Region

 ReDim Punti(Index)
Se mi è permessa una cosa...
Non era meglio ReDim Preserve?
Salutoni
Sergio

 Non era meglio ReDim Preserve?
Già, è vero... ;-)
A sproposito... Ho un problemino con queste linee:
Dim Segmento As Int16
Segmento = Punti.Length
Grafico.StartFigure()
Grafico.AddCurve(Punti, 0, Segmento, 0.5)
Praticamente all'aumentare degli elementi dell'array Punti, dovrebbe
aumentare anche Segmento...
Il fatto è che al metodo AddCurve non piace Segmento (non so perchè)...Come
mai???
Come posso allora aumentare quel valore all'aumentare degli elementi
dell'array???

End Sub
Curiosita': perche' non usare un ArrayList che e' fatto apposta per
gli array ridimensionabili?
Tra l'altro, l'ArrayList ha un metodo Insert che, molto piu'
semplicemente, farebbe al caso tuo.
-- 
ciao, hal

Non era meglio ReDim Preserve?
Ma...
Redim viene tradotta come newarr, che crea un nuovo array (riallocando
quindi memoria, ecc.) mentre Redim Preserve maschera il giochetto
dell' Array.Copy:
Dim prova() As Short
ReDim prova(8)
-----> newarr     [mscorlib]System.Int16
ReDim Preserve prova(10)
-----> 	// converte in un oggetto Array
	castclass  [mscorlib]System.Array
	// mette il valore 11 sullo stack per passarlo al costruttore 
	ldc.i4.s   11
	// alloca un nuovo array di 11 elementi Short
	newarr     [mscorlib]System.Int16
	// copia il primo array nel secondo passando per le librerie
	// di compatibilita' con il vecchio VB
	call       class [mscorlib]System.Array
[Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Utils::CopyArray(class
[mscorlib]System.Array,
class[mscorlib]System.Array)
Insomma, mi sembra sia da preferire un' ArrayList.
-- 
ciao, hal

 Insomma, mi sembra sia da preferire un' ArrayList.
Grazie lo stesso, ma ho già risolto senza Redim Preserve e senza
l'arraylist...

 Redim Preserve e senza l'arraylist...
Ma probabilmente se utilizzavi l'ArrayList (o qualche altro contenitore di
alto livello) avresti potuto ottenere una soluzione migliore (più leggibile,
più performante, più affidabile..)
--
ale
http://www.sen.it