Dziwne zachowanie zbindowanych kontrolek checkbox

Dziwne zachowanie zbindowanych kontrolek checkbox
SZ
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 10 lat
  • Postów:14
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:

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

A dla kontrolek 'Nie' takie:

Kopiuj
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 ?

edytowany 1x, ostatnio: Szymod
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 16 godzin
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.

SZ
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 10 lat
  • Postów:14
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:

Kopiuj
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 ?

HA
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 10 lat
  • Postów:48
0

Nie wystarczy

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

I analogicznie checkBox2 ?

edytowany 1x, ostatnio: hansonq
SZ
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 10 lat
  • Postów:14
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 :)

wedlock
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Bartoszyce
  • Postów:180
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.

Kopiuj
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

SZ
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 10 lat
  • Postów:14
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.

edytowany 1x, ostatnio: Szymod

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.