Witam,
poproszę o podpowiedź jak zrealizować poniższą funkcjonalność.
Na formularzu (Windows Form) mam umieszczonych kilka par kontrolek checkBox i textBox (dla uproszczenia opisywać będę tylko dwie pary) czyli:
checkBox1 i odpowiadający mu textBox1
checkBox2 i odpowiadający mu textBox2
Dla każdej z par w momencie zaznaczania checkBox'a ustawiam Fokus na odpowiadający mu textBox.
Funkcjonalność na której mi zależy, to nie dopuścić by na formularzu znajdowała się para: zaznaczony checkBox i odpowiadający jemu textBox bez fokusa (kursora) i bez wprowadzonego tekstu.
Realizuję to poprzez wykorzystanie zdarzenie textBox_Validating. W zdarzeniu tym sprawdzam, czy długość tekstu w textBox jest równa 0. Jeśli tak to ustawiam checkBox.Checked na 'false' (czyli w momencie opuszczania textBoxa, jeśli nie ma w nim tekstu, odznaczam checkBox) np.:
- Klikam w niezaznaczony chkBox1 (zaznaczam go). W zdarzeniu checkBox.CheckedChanged ustawiam fokus na textBox (textBox1.Fokus()).
- textBox1 otrzymuje fokus czyli pojawia się w nim kursor do wprwadzania tekstu, ale TextBox1 jest "pusty" - nie ma jeszcze wprowadzonego tekstu.
- Jeśli teraz kliknę w checkBox2, jako pierwsze, wywołane jest zdarzenie TextBox1_Validating w którym sprawdzam, że ChekBox1.Checked jest true i ponieważ textBox1.text.Lengt==0, to ustawiam checkBox1.Checked na false. Wszystko jest OK.
Problem zaczyna się jeśli jestem w sytuacji opisanej w punkcie 2. i - Jeśli teraz kliknę nie w checkBox2, a w checkBox1 (czyli chcę "odznaczyć" checkBox1), to "odznaczenie" to nie przynosi efektów - checkBox1 cały czas jest zaznaczony
Poniżej kod dwóch method obsługujących zdarzenia.
private void checkBox1_CheckedChanged(object sender, EventArgs e) {
if (((CheckBox1)sender).Checked) {
textBox1.Focus();
}
else {
textBox1.Text = "";
}
}
private void textBox1_Validating(object sender,CancelEventArgs e) {
if ((sender as TextBox1).TextLength == 0) {
checkBox1.Checked = false;
}
}
Czy jest jakiś sposób (być może inne rozwiązanie) by zrealizować powyższą funkcjonalność?
Wszystkie deklaracje metod obsługi zdarzeń są wygenerowane przez VisualStudio