Dziwne zachowanie zbindowanych kontrolek checkbox

0

Witam, mam problem z kontrolkami checkbox, a mianowicie, mam 6 takich kontrolek na formatce, trzy z nich są zbindowane z polami w klasie i chcę aby na podstawie stanów tych 3 kontrolek zmieniały się stany pozostałych 3. Tzn, jedna kontrolka robi za 'Tak' druga za 'Nie'. Pola są zbindowane do kontrolek 'Tak' i dla każdej z nich wywoływane jest takie zdarzenie:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked == true)
            {
                checkBox1.Checked = true;
                checkBox2.Checked = false;
            }
            
        }

A dla kontrolek 'Nie' takie:

private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked == true)
            {
                checkBox2.Checked = true;
                checkBox1.Checked = false;
            }
           
        }

Problem polega na tym, że gdy testuję czy zmieniają się stany kontrolek to czasami ze zdarzenia zmiany staniu jednej kontrolki która nie powinna mieć żadnego powiązania ze stanem innej, program wchodzi mi w jej zdarzenie CheckedChanged i mieszają się zaznaczenia kontrolek. Dodam że gdy kontrolki nie są zbindowane takie problemy nie występują. Jaka może być tego przyczyna ?

1

chcę aby na podstawie stanów tych 3 kontrolek zmieniały się stany pozostałych 3. Tzn, jedna kontrolka robi za 'Tak' druga za 'Nie

Od tego jest RadioButton.

0

Sprawdzałem, przy radio buttonach występuje ten sam problem... jeśli nie są zbindowane z polem w klasie to wszystko jest ok. Ale gdy tylko przypisze je do jakiegoś pola w klasie w ten sposób:

radioButton1.DataBindings.Add("Checked", state, "Radio1", true,);

To obserwuję dziwne zachowanie, np zaznaczam radiobutton w jednym panelu a we wszystkich innych też się zaznaczają. Gdzie nie powinno być żadnego powiązania między tymi kontrolkami...
Czy ktoś wie jak rozwiązać taki problem ?

0

Nie wystarczy

 
if (checkBox1.Checked==true)
{
checkBox2.Checked=false;
}

I analogicznie checkBox2 ?

0

Niestety :) kontrolki zachowują się bardzo dziwnie spróbuj sam sobie dodać 4 checkboxy i zbindować je do pól w klasie :) sam zobaczysz co się dzieje przy zdarzeniach :)

1

Bo podczas wywołania zdarzenia jednej kontrolki i zmiany jej stanu ( lub stanu innej kontrolki ) odpalasz jej/ich zdarzenia. Innymi słowy zdarzenie CheckedChanged jest odpalanie nie tylko gdy pochodzi z interfejsu użytkownika ale i z kodu.

checkBox1_CheckedChanged(object sender, EventArgs e) 

Nie pamiętam jak to jest w WF ale w WPF (XAML) możesz zgrupować kontrolki CheckBox ze sobą i wtedy tylko jedna kontrolka z grupy może być ustawiona na true. Piszę z pracy i nie mam przy sobie IDE więc musisz sam poszukać... Jeśli nie da się w WF grupować ze sobą CheckBoxów to pozostaje ci w kodzie podać flagę w której zaznaczysz sobie skąd pochodzi zdarzenie... coś podobnego jak tu :

http://stackoverflow.com/questions/16117251/wpf-multiple-checkbox-check-uncheck

0

Uporałem się z tym zagadnieniem. Niestety trzeba zbindować wszystkie kontrolki żeby działały jak należy. Samo podpięcie do pól 'tak' nie zdaje egzaminu ale jeśli zbindujemy i kontrolki 'nie' do pól w klasie to wszystko śmiga. To tak gdyby ktoś miał z tym problem w przyszłości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1