Troncare un array

giovedì 26 febbraio 2009 - 11.21

toniovigi Profilo | Expert

Ciao ragazzi,ho un array di bottone che viene creato al click di un bottone in modo dinamico:

al click creo un bottone e ridimensiono l'array
con:
int newSize = vuote.Length + 1;
Array.Resize(ref vuote, newSize);
vuote[vuote.Length - 1] = scrivania;

adesso ho implementato una funzione che cancella il bottone e ovviamente voglio anche ridimensionare l'array

con
int newSize = vuote.Length - 1;
Array.Resize(ref vuote, newSize);

solo che in questo modo lui appunto fa il resize e mi toglie l'ultimo elemento che magari mi serve

quindi io voglio proprio stringere l'array quindi eliminare l'emento che magari si trova anchein mezzo e nn
che mi slitta tutto di uno

aiedail92 Profilo | Expert

Ciao

In questo caso ti conviene usare una List<Button> anzichè un semplice array. Con la List hai il metodo Add per aggiungere un elemento, Remove per rimuoverlo, Insert per aggiungere un elemento in una certa posizione, e RemoveAt per rimuovere un elemento ad un dato indice.

Per accedere ad un elemento usi sempre le parentesi quadre:

List<Button> tuaList = new List<Button>(); tuaList.Add(new Button()); Button b = tuaList[0]; tuaList[0] = new Button(); tuaList.RemoveAt(0);

Inoltre non devi nemmeno preoccuparti di ridimensionare la List perchè il compito viene eseguito automaticamente quando necessario.

Luca

toniovigi Profilo | Expert

ottima come soluzione, ma ho un programma praticamente finito e ho usato in tutto e x tutto gli array,poi ho gia la serializzaione e un casino e volevo usare gli array, e fattibile??

aiedail92 Profilo | Expert

Allora consideralo come un suggerimento per la prossima volta

Ovviamente si può fare anche con gli array, potresti usare due funzioni tipo queste:

private void RemoveAt<T>(ref T[] array, int index) { //Copia la seconda parte dell'array sovrascrivendo il valore da rimuovere Array.Copy(array, index + 1, array, index, array.Length - index - 1); //Ridimensiona l'array Array.Resize(ref array, array.Length - 1); } private void Remove<T>(ref T[] array, T item) { //Ottiene l'indice dell'elemento da rimuovere int index = Array.IndexOf(array, item); //Se non è presente non fa niente if (index == -1) return; //Rimuove l'elemento all'indice trovato RemoveAt(ref array, index); }

Luca

toniovigi Profilo | Expert

Luca prova ad aiutarmi ho il seguente frammento di codice;

Control btcl = new Control();
btcl = contextMenuStrip2.SourceControl;//assegno ad un controllo il bottone origine,btcl sarà un bottone

if (btcl.BackColor == Color.IndianRed)
{
this.Controls.Remove(btcl);//rimuovo il bottone dalla form

//ADEX QUI VOGLIO RIDIMENSIONARE L'ARRAY ELIMINANDO l'elemendo BTCL,usando quelle tue funzioni, come esce fuori???
quello che avevo prima appunto che mi tagliava "la coda" dell'array

int newSize = vuote.Length - 1;
Array.Resize(ref vuote, newSize); //vuote e l'array


GRAZIE TANTISSIMO!!!DEVO RICAMBIARE X TUTTI GLI AIUTI CHE MI DAI

aiedail92 Profilo | Expert

Scusa, ho fatto caso solo ora a questo:

>quindi io voglio proprio stringere l'array quindi eliminare l'emento
>che magari si trova anche in mezzo e nn che mi slitta tutto di uno

Intendi dire che dopo che hai rimosso l'elemento, non vuoi che per accedere ad un altro elemento cambi il suo indice?

Cioè, se prima hai in ordine C1, C2, C3, C4, C5, C6 nell'array, e poi rimuovi C4, gli indici di C5 e C6 devono scalare indietro di un posto (e diventare 3 e 4) o devono rimanere rispettivamente 4 e 5?

Luca
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5