Diskuze: Jak odebrat specifický objekt z ArrayListu (případně z Listu)

C# .NET .NET (C# a Visual Basic) Jak odebrat specifický objekt z ArrayListu (případně z Listu) American English version English version

Avatar
Martin Gabriel:

Zdravím

narazil jsem na problém, který se mi nedaří vyřešit. Jedná se o C#

Mám vytvořený ArrayList, do kterého dynamicky vkládám objekty. Například tlačítka. Čili do mého ArrayListu jsem vložil 5 tlačítek, přičemž každé z nich má jiné jméno (myšleno jako myButton.Name = "button1")

Při každém vkládání tlačítka však chci mít kontrolu nad tím, jestli tam už tlačítko se specifickým jménem. Pokud se v listu nachází, tak jej potřebuju přesunout na konec (čili odebrat a znovu vložit - na konec).

Má to fungovat tak, že ve WPF aplikaci mám ListBox, do kterého vysypu oblekty z mého Listu a potřebuju, aby vždy na konci bylo tlačítko, které bude moci přidat další položku doprostřed tohoto ListBoxu.

Snažil jsem se to ošetřit něčím takovým:

if (arrayList.Contains(buttonAdd.Name = "buttonAdd1"))
{
arrayList.Remove(buttonAdd.Name = "buttonAdd1");
}

Každopádně to nefunguje. Na stackoverflow mi poradili jen to, že nemám používat ArrayList, což každopádně neřeší můj problém.

Předem díky za rady. ;)

Odpovědět 10.9.2013 14:44
"Be the change you want to see in the world" - Michael Scofield
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Martin Gabriel
Jan Vargovský:

Používej nějaký kontejner a né arraylist ... Můžeš vyfotit jak má vypadat to GUI ?

 
Nahoru Odpovědět 10.9.2013 15:05
Avatar
Martin Gabriel:

ArrayList jsem zvolil proto, že než to nacpu do ListBoxu, tak mám kontrolu nad tím, co tam je a co má jaký index. Protože každý objekt v tom ListBoxu má svoje specifické vlastnosti (text, tooltip, atd, atd).

S kontejnerem ve WPF jsem se zatím nesetkal. =)

V příloze je příklad, jak to má fungovat. Už jsem funkční verzi měl. A to tak, že se mi vkládaly objekty za sebe do ListBoxu, ale jak říkám - potřebuju pracovat s každým objektem zvlášť.

PS: Potřebuju, aby se mi dynamicky vkládaly objekty. Aby se podle počtu přizpůsobil ten "kontejner", takže proto to mám v ListBoxu, který si podle potřeby vyhodí slider.

Nahoru Odpovědět 10.9.2013 15:20
"Be the change you want to see in the world" - Michael Scofield
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Martin Gabriel
Jan Vargovský:

No ve WPF nedělám, takže ti bude muset poradit někdo jiný. Ve WFA jsem toto řešil binding listem a flowlayoutpanelem.

 
Nahoru Odpovědět 10.9.2013 15:27
Avatar
Odpovídá na Martin Gabriel
Jakub Lásko[Saarix]:

A nešlo by to náhodou řešit skrze indexy?

Nahoru Odpovědět 10.9.2013 16:41
Časem je vše možné.
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Martin Gabriel
Theodor Johnson:

A co to projet foreachem a když najdeš ten který hledáš tak ho rovnou odstranit?

Nahoru Odpovědět 10.9.2013 17:27
Přecházím na "Cross-Platform Development"
Avatar
davidomil
Člen
Avatar
Odpovídá na Theodor Johnson
davidomil:

To by nešlo. Nejde manipulovat s prvky, které zrovna projíždíš ve foreach.
Musel bys to celé zkopírovat do nového umístění v paměti (Nesmí to být jako reference)to projet a to staré mazat podle indexů z nového.

Nahoru Odpovědět 11.9.2013 9:31
Live long and prosper.
Avatar
Odpovídá na davidomil
Luboš Běhounek (Satik):

Já to obvykle řeším tak, že v foreach projedu celý list, do List<int> si uložím indexy ke smazání a ty pak v dalším foreach (přes ty inty) smažu.

Nahoru Odpovědět  +1 11.9.2013 9:42
:)
Avatar
davidomil
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
davidomil:

Jasně, to je taky možnost. A si je i lepší. Rozhodně to je méně náročné na paměť, při větších datech.

Nahoru Odpovědět 11.9.2013 10:51
Live long and prosper.
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na davidomil
Theodor Johnson:

Můžeš s nimi manipulovat ale ne mazat, to se dá vyřešit že po smazání se foreach přeruší breakem

Nahoru Odpovědět 11.9.2013 13:22
Přecházím na "Cross-Platform Development"
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.