Checklistbox - ItemCheck - volani procedur po zmene   otázka

VB.NET, WinForms

Skoro si pripadam jako blazen, ale nepodarilo se mi najit odpoved na toto:

Mam checklistbox clstbSeznamOkruhu. Polozkami jsou objekty, instance tridy clsOkruh.

Po zmene zatrhnuti nektere z polozek potrebuju vyvolat plno aktualizacnich procedur, ktere zkontroluji clstbSeznamOkruhu.CheckedItems a z teto kolekce dale kuchaji informace.

Problem: kdyz se zavola udalost _ItemCheck, stale jeste neni provedena aktualizace kolekce CheckedItems. To znamena pri prvni zatrhnute polozce je stale CheckedItems.Count = 0. Ale ja uz bych potreboval zavolat udalosti, ktere by pracovaly s aktualizovanou kolekci.

U listboxu vse funguje spravne s SelectedItems kolekci, ale tady uz si pomalu rvu vlasy z hlavy.

Podotykam jen, ze mi nejde jen o pocet zatrhnutych polozek, to lze upravit pres e.NewValue = CheckState.Checked.

Spis jak zavolat neco pote,co byla provedena aktualizace kolekce CheckedItems... ?

Predem diky za jakekoliv info.

Lada

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Kus, mezitim me to odhlasilo... no nicmene, zaregistrovan jiz jsem.

Taky jeste diky za odpovedi vsech, kteri sem prispivaji... az budu mit vic zkusenosti, rad se pridam.

Lada

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No, ak musíš po každej zmene nejakej položky aktualizovať

znovu všetky, tak sa asi budeš musieť potrápiť a udržiavať

si checknuté položky vo vlastnej kolekcii na základe udalosti

ItemCheck. Ja by som sa však snažil urobiť to tak, aby som

musel spustiť tie aktualizačné procedúry len pre tú položku,

ktorej CheckedState sa práve zmenil. Ale možno tomu bránia

závislosti medzi jednotlivými poožkami, neviem. Na podobný

problém som už raz narazil (pri inom ovl. prvku) a je to

naozaj na porazenie. Ale riešenie s tou vlastnou kolekciou

by tomu mohlo pomôcť. Ak je ovšem počet položiek stabilný.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Vlastni kolekce je urcite reseni, jen jsem porad doufal, ze se najde elegantnejsi reseni, protoze mi prijde, ze to preci musi byt reseno primo pres vestavenou funkcionalitu.

Je divne, je by to nekdo nepotreboval... vzdy prace se selecteditems kolekci u listboxu je jedna z nejcastejsi.

Tak se divim, ze neni nejaka udalost, ktera by se volala az po tom zaktualizovani kolekce checkeditems.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak, dostal jsem se kousek dal, ale objevil se pribuzny problem k jinemu reseni.

Abyste z toho neco meli i vy, pripisu to sem pro vsechny.

Gandalf mi poradil, co tak zkusit vymenit checklistbox za listview, u ktereho nastavit vlastnost View na List a jeste CheckBoxes na true. Pak to vypada takrka identicky.

A celou vec pak resit pres udalost ItemChecked, ktera uz pracuje s aktualizovanou kolekci zatrhnutych polozek.

Bohuzel pro me, u ListView se mi nepodarilo zakazat horizontalni scrollbary a pritom ponechat vertikalni. Respektive pri vetsim poctu items se vytvari dalsi sloupec misto toho, aby se jen ten prvni prodlouzil.

Takze pokud ma nekdy dalsi napady... jste velmi vitani!!!

Diky patri Gandalfovi za pomoc.

Lada

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přepněte ListView do režimu Details a mělo by to jít.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tak jsem to nejak proklikaval a tohle uz funguje.Demonstrativni ukazka:

                listView1.View = View.Details
                listView1.CheckBoxes = True

                ' Create columns for the items and subitems.
                ListView1.Columns.Add("", -2, HorizontalAlignment.Left)    ' pro checkbox
                ListView1.Columns.Add("Nazev", -2, HorizontalAlignment.Left)
                ListView1.Columns.Add("Info", -2, HorizontalAlignment.Left)

                For Each mujObjekt In mojeKolekceObjektu
                    Dim item1 As New ListViewItem()
                    item1.SubItems.Add(mujObjekt.nazev)
                    item1.SubItems.Add(mujObjekt.info)
                    ListView1.Items.Add(item1)
                Next

Potom staci vse aktualizovat pomoci udalosti ItemChecked, ktera jiz opravdu pracuje s aktualizovanou kolekci zatrhnutych polozek.

Nevim, jestli je to uplne koser, ale svuj ucel to splnilo.

Diky vsem .-)

Lada

PS: otazka byla zodpovezena, jen jsem nenasel link "Označit jako odpověď". Pokud by sem nektery z adminu prisel, prosim o oznaceni, ze dane tema je jiz vyreseno.

diky...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback