/ / Obmedzenie skupiny zaškrtávacích políčok na určitý počet kontrol - .net, winforms, užívateľské rozhranie

Obmedzenie skupiny začiarkavacích políčok na určité množstvo kontrol - .net, winforms, užívateľské rozhranie

Mám skupinu začiarkavacích políčok, ktoré len chcemumožniť kontrolu nastavenej sumy kedykoľvek. Ak novo začiarknuté začiarkavacie políčko posúva počet nad limit, chcel by som, aby sa najstaršie začiarkavacie políčko automaticky odškrtávalo. Všetky skupiny začiarkavacích políčok používajú rovnaký obslužný program udalostí, ktorý je uvedený nižšie.

Funkčnosť som dosiahol pomocou frontu,ale je to dosť chaotické, keď musím odstrániť položku zo stredu frontu a myslím si, že existuje elegantnejší spôsob. Obzvlášť sa mi nepáči prevádzať rad na zoznam, len aby som zavolal jednu metódu, skôr ako prevediem zoznam späť na rad.

  • Existuje lepší spôsob, ako to urobiť?
  • Je dobrý nápad zrušiť pripútanosť k ovládačom udalostí, ako som to urobil ja.

Tu je kód.

private Queue<CheckBox> favAttributesLimiter - new Queue<CheckBox>();
private const int MaxFavoredAttributes = 5;

private void favoredAttributes_CheckedChanged(object sender, EventArgs e)
{
CheckBox cb = (CheckBox)sender;

if (cb.Checked)
{
if (favAttributesLimiter.Count == MaxFavoredAttributes)
{
CheckBox oldest = favAttributesLimiter.Dequeue();

oldest.CheckedChanged -= favoredAttributes_CheckedChanged;
oldest.Checked = false;
oldest.CheckedChanged += new EventHandler(favoredAttributes_CheckedChanged);
}

favAttributesLimiter.Enqueue(cb);

}
else // cb.Checked == false
{
if (favAttributesLimiter.Contains(cb))
{
var list = favAttributesLimiter.ToList();
list.Remove(cb);
favAttributesLimiter=new Queue<CheckBox>(list);
}
}
}

edit:
Čakr odpovedal na moju skutočnú otázku lepšímnáhrada za front (Of T). Argument, že moja predstava zrušenia začiarknutia políčok bola v skutočnosti zlým nápadom, bol však dosť presvedčivý. Nechávam odpoveď Chakrit ako prijatú, ale hlasoval som pre ďalšie odpovede, pretože v očiach používateľa ponúkajú konzistentnejšie a použiteľnejšie riešenie.

odpovede:

2 pre odpoveď č. 1

Myslím, že hľadáte lineárny zoznam.

použitie AddLast namiesto Enqueue a RemoveFirst namiesto Dequeue a na odstránenie niečoho v strede stačí použiť normál Remove.


4 pre odpoveď č. 2

Pre prípad, že by ťa to takto nenapadlo.

Z hľadiska použiteľnosti pravdepodobne máte text, ktorý hovorí niečo ako „kliknite na viac ako 4 začiarkavacie políčka“.

V takom prípade prečo jednoducho nezapočítať počet začiarknutých políčok a zabrániť akýmkoľvek zmenám v piatom políčku (pokiaľ samozrejme neexistujú iba 3 začiarkavacie políčka).


3 pre odpoveď № 3

Jedna vec, ktorú si treba položiť, je:naozaj chcete implementovať tento typ správania pomocou začiarkavacích políčok? Začiarkavacie políčka už majú z pohľadu používateľa dobre pochopené správanie a mať zaškrtnuté zdanlivo náhodné políčko pri začiarknutí nového bude pravdepodobne pre priemerného používateľa veľmi mätúce alebo dokonca frustrujúce.

Možno zvážte niečo ako zoznam stlačidlá na pridanie / odstránenie, kde dizajn zoznamu dáva používateľovi vizuálnu stopu, že existuje maximálne (povedzme) štyroch položiek. Ako referenciu si myslím niečo v duchu dialógové okno prispôsobenia panela nástrojov v IE.

Možno nie odpoveď, ktorú ste hľadali, ale niečo, čo by ste mali zvážiť.


1 pre odpoveď č. 4

To, čo som urobil predtým, je ponuka viacstĺpcového výberu, ako je táto:

<---->

možnosti: vybrané výber-1-prázdny box- výber-2-prázdny box- výber-3-prázdna krabica- výber-4-prázdna krabica-

Potom ľudia mohli zvýrazniť „choice-1“ a stlačiťpravé tlačidlo. Druhý stĺpec by sa zrazu naplnil položkami v prvom. Potom môžete šípku deaktivovať po pridaní troch možností a vysunúť správu so slovami „Môžete zvoliť iba tri možnosti.“ To má v porovnaní s inými možnosťami oveľa zmysel. Pre používateľa by to bolo oveľa jednoduchšie.


1 pre odpoveď č. 5

Je dobrý nápad zrušiť pripútanie? obsluhy udalostí ako ja.

To záleží.

Je to Windows Forms?Windows Forms bežia nad WinAPI, čo znamená, že obslužný program udalostí je v skutočnosti iba funkcia volaná slučkou na odoslanie správy v hlavnom vlákne. Funkcie preto nie je potrebné opätovne zadávať a je to „bezpečné“.

Musíte však vyriešiť svoju chybu a zachytiť všetky výnimky, ako napríklad neúspešné pridelenie vnútri váš obslužný program udalostí alebo vaša aplikácia bude ukončená.


0 pre odpoveď č. 6

Ak požiadate používateľa, aby vybral zoznam možností a obmedzil počet možností, je pravdepodobné, že prvá voľba je prvoradá.

napr. Vyberte si dve, nikdy nebudete mať nič z toho, čo si nevyberiete:

  • peniaze
  • Moc
  • Sex
  • Vzrušenie
  • Gadgety
  • Armáda kodérov.

Bola vaša prvá voľba prvoradá?

Ak chcete použiť začiarkavacie políčka, jednoducho zrušte začiarknutie všetkých, keď je začiarknuté druhé.