Pogčedajte punu verziju : C# checkedListBox.Items.RemoveAt()
Koristim ovaj kod (dole) za brisanje chekiranih itema ali mi uvek ostaje jedan neobrisan item:
Code:
for (int i = 0; i <= checkedListBox2.CheckedItems.Count - 1; i++)
{
checkedListBox2.Items.RemoveAt(i);
}
checkedListBox2.CheckedItems.Count vraca pravi broj itema ...
U cemu je problem ? Hvala.
bluesman
26. 09. 2008., 23:23
zar nije bolje
i < checkedListBox2.CheckedItems.Count
nego
i <= checkedListBox2.CheckedItems.Count -1
jedna matematicka operacija manje u for petlji.
Pravo pitanje je odakle pocinje index, da li od 0 ili od 1 ?
Nenad Vasić
26. 09. 2008., 23:24
Da li si probao:
for (int i = 0; i < checkedListBox2.CheckedItems.Count; i++)
U suštini je isto kao što si i ti napisao mada te ništa ne košta da probaš. :)
edit: Preteče me bluesman... :)
Ovo sam uzeo samo primer iz nekog texta, petlju cu da sredim.
Index valjda pocinje od 0 ?
Btw, mislim da moram prvo da uzmem broj itema pa da sa tom varijablom radim u petlji jer se ovako dinamicno menja ... (?)
Nenad Vasić
26. 09. 2008., 23:41
Što ne probaš? A inače moguće je to što si rekao jer se u php-u na primer dešava ovo:
<?php
$blah = array_fill(0, 10, 'blah');
for ($i=0;$i<count($blah);$i++) {
echo count($blah)."\n";
unset($blah[$i]);
}
?>
Output:
10
9
8
7
6
S' tim što ovde iskače iz petlje kad je broj elemenata došao na 5 odnosno kad se $i izjednači sa brojem elemenata...
Resio sam ovako:
while (checkedListBox2.CheckedItems.Count > 0)
{
checkedListBox2.Items.Remove(checkedListBox2.Check edItems[0].ToString());
}
degojs
27. 09. 2008., 02:23
Btw, mislim da moram prvo da uzmem broj itema pa da sa tom varijablom radim u petlji jer se ovako dinamicno menja ... (?)
Pa mora da se menja kad pozivaš RemoveAt[x] i uklanjaš elemente iz niza. Zato si i imao problem.
Da da, u tome je bio problem. Obicno skontam resenje kad postavim pitanje ;)
degojs
27. 09. 2008., 16:25
U stvari, ti si sve na ovoj temi naveo da rešavaju krivi problem (uključujući i mene). Ovo što sam ja primetio sinoć je samo jedna stvar, ali problem je u samom algoritmu koji si postavio.
Možda nije loše da još samo malo komentarišemo..
for (int i = 0; i <= checkedListBox2.CheckedItems.Count - 1; i++)
checkedListBox2.Items.RemoveAt(i);
Zamisli da imamo 10 elemenata u kolekciji i da su 4 elementa štiklirana. Tvoj kod gore (ne obraćamo sad pažnju što RemoveAt uklanja elemente, da bude jednostavnije) otprilike radi sledeće:
1. u kolekciji imamo 10 elementa, 4 su štiklirana
2. pošto su 4 elementa štiklirana, ukloni elemente 1, 2, 3 i 4.
Naravno da je pogrešno: to što imamo 4 čekirana elementa, ne znači da su oni na pozicijama 1-4. Čini mi se da je i tu bio problem.
CheckedListBox.CheckedItems Property (http://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.checkeditems.a spx)
- Collection of checked items in this CheckedListBox
Cini mi se da "CheckedItems" vraca niz chekiranih itema koji pocinje od 0. (Nisam siguran jer sam pocetnik sto se tice C#-a, javice se vec neko iskusniji ...)
Btw, greska je nastala jer checkedListBox2.Items vraca sve iteme a ne samo one koji su chekirani.
degojs
27. 09. 2008., 18:32
He, ja sam gledao web kontrole i još se pitam gde si našao to CheckedItems? Te sam zaključio da koristiš third-party kontrolu i slično. Nisam uopšte ni pomislio da radiš WinForms, da tamo pogledam. Hehe, dotle se znači stiglo - meni više ne pada na pamet da neko pravi desktop aplikaciju :)
Btw, greska je nastala jer checkedListBox2.Items vraca sve iteme a ne samo one koji su chekirani.
Da, i, kako rekoh, uklanjao si onda krive elemente iz niza. Ti si kao rekao npr. imamo 3 čekirane stavke (CheckedItems.Count), daj da uklonim prve 3 (Items.RemoveAt[i])...
Anyway.. :)
Zatrebaju po nekad neki custom alati za upravljanje procesima/fajlovima i sl, a u C#-u se to veoma jednostvano napravi ;)
vBulletin® v3.6.8, Copyright ©2000-2024, Jelsoft Enterprises Ltd.