Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET
Využij akce až 80% zdarma při nákupu e-learningu. Více informací .
BF summer

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

Aktivity (5)
Avatar
Martin Gabriel
Redaktor
Avatar
Martin Gabriel:10.9.2013 14:44

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ý:10.9.2013 15:05

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
Redaktor
Avatar
Martin Gabriel:10.9.2013 15:20

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ý:10.9.2013 15:27

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]:10.9.2013 16:41

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é.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na Martin Gabriel
Theodor Johnson:10.9.2013 17:27

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

Nahoru Odpovědět
10.9.2013 17:27
Mo8ilε 15 Ѐλđ
Avatar
davidomil
Člen
Avatar
Odpovídá na Theodor Johnson
davidomil:11.9.2013 9:31

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
Luboš Běhounek Satik
Autoredaktor
Avatar
Odpovídá na davidomil
Luboš Běhounek Satik:11.9.2013 9:42

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
11.9.2013 9:42
https://www.facebook.com/peasantsandcastles/
Avatar
davidomil
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
davidomil:11.9.2013 10:51

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:11.9.2013 13:22

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
Mo8ilε 15 Ѐλđ
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.