Kontrolki RadioButton, CheckBox
Kontrolka RadioButton
Kontrolka RadioButton daje dostęp do dwóch stanów logicznych wzajemnie się wykluczających- aktywny/nieaktywny. Stany wykluczenia reprezentowane są w sposób graficzny i standardowo wyglądają jak poniżej
Wzajemny układ położenia tekstu i pola wyboru można zmienić w momencie projektowania wyglądu formularza formatki
Kontrolki RadioButton pracują w grupach, stąd też powinno się je umieszczać w obszarze kontrolki Panel lub GroupBox. W danej grupie może być aktywna tylko jedna kontrolka.
Stan aktywności kontrolki przechowuje właściwość Checked (False/True)
Zmianę stanu aktywności (Checked) kontrolki RadioButton śledzi zdarzenie CheckedChanged
Kontrolka CheckBox
Kontrolka CheckBox daje użytkownikowi formularza możliwość wyboru opcji prawda/ fałsz (tak/nie) w ustawieniach kombinacji różnych współpracujących ze sobą kontrolek ChekBox. Jest to różnica pomiędzy kontrolkami RadioButton, w których tylko jedna w danej grupie mogła być w logicznym stanie PRAWDA.
Stan wyboru przechowywany jest w polu właściwości Checked. Tę zmianę stanu aktywności śledzi zdarzenie CheckedChanged (podobnie jak w kontrolce RadioButton)
Kontrolka CheckBox może obsługiwać dwa lub trzy stany. Decyduje o tym ustawienie właściwości ThreeState. Gdy ma przypisana wartość False, to obsługiwane są dwa stany (niewybrany, wybrany), w przeciwnym wypadku trzy stany (niewybrany, wybrany, nieokreślony)
Ćwiczenie
Cel: Utwórz formatkę zawierającą kontrolki w układzie jak na poniższej ilustracji
Używając kontrolek RadioButton obsłuż możliwość zmiany wielkości liter dla wprowadzanego imienia i nazwiska w kontrolkach TextBox. Przy pomocy kontrolek CheckBox zablokuj/ odblokuj
- edycję imienia
- edycję nazwiska
- zmianę opcji wielkości liter dla imienia
- zmianę opcji wielkości liter dla nazwiska
Wskazówka:
Zmiana wielkości czcionki używanej na przykład w kontrolce TextBox możliwa jest w kodzie programu przez wykorzystanie właściwości CharacterCasing (Upper, Lower, Normal)
textBox1.CharacterCasing = CharacterCasing.Upper;Blokowanie dowolnej kontrolki odbywa się przez wykorzystanie właściwości Enabled. Gdy ma przypisaną wartość False to jest nieaktywna
textBox1.Enabled = false;Kodowanie rozwiązania można skrócić przez przypisani unikalnych tagów (właściwość Tag) kontrolkom typu RadioButton oraz CheckBox. Następnie w odpowiednich zdarzeniach CheckedChanged podpiętych do wybranej grupy kontrolek odwołać się w metodzie switch. Patrz poniższy przykład
Wskazówka:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb= (RadioButton)sender;
switch (rb.Tag)
{
case "imD":
if (rb.Checked)textBox1.CharacterCasing = CharacterCasing.Upper;
break;
case "imM":
if (rb.Checked) textBox1.CharacterCasing = CharacterCasing.Lower;
break;
}
}
Pełny kod proponowanego rozwiązania
Wskazówka:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CheckBoxRadioButton_WbudowaneStyle
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb= (RadioButton)sender;
switch (rb.Tag)
{
case "imD":
if (rb.Checked)textBox1.CharacterCasing = CharacterCasing.Upper;
break;
case "imM":
if (rb.Checked) textBox1.CharacterCasing = CharacterCasing.Lower;
break;
}
}
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = (RadioButton)sender;
switch (rb.Tag)
{
case "naM":
if (rb.Checked) textBox2.CharacterCasing = CharacterCasing.Lower;
break;
case "naD":
if (rb.Checked) textBox2.CharacterCasing = CharacterCasing.Upper;
break;
case "naDowolne":
if (rb.Checked) textBox2.CharacterCasing = CharacterCasing.Normal;
break;
}
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
CheckBox cb= (CheckBox)sender;
switch(cb.Tag) {
//blokuj edycję imienia
case "chBox1":
if (cb.Checked) textBox1.Enabled = false;
else textBox1.Enabled = true;
break;
//krótsza wersja tego samego co powyżej
//blokuj edycję nazwiska
case "chBox2":
textBox2.Enabled = !cb.Checked;
break;
//bloku zmiany wielkości liter w imieniu
case "chBox3":
groupBox1.Enabled = !cb.Checked;
break;
//bloku zmiany wielkości liter w nazwisku
case "chBox4":
groupBox2.Enabled = !cb.Checked;
break;
}
}
}
}