RadioButton과 CheckBox 도구(클래스)는 사용자에게 선택지를 줄 때 사용할 수 있다.


[그림 1 : 좌 라디오버튼 우 체크박스]


radiobutton과 checkbox에는 공통적으로 존재하는 이벤트로 CheckedChanged가 있다.

'Checked' 속성의 값이 변경될 때 동작하는 이벤트인데, 

이를 이용해 선택하는 동작이 있었을 때를 트리거로 다른 동작을 구현할 수 있다.


1
2
3
4
5
6
7
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    if (sender == this.radioButton1)
    {
        //동작
    }
}
cs

[코드 1]


1
2
3
4
5
6
7
8
9
10
11
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if (sender == this.checkBox1)
    {
        //동작
    }
    if (this.checkBox1.Checked == false)
    {
        //동작
    }
}
cs

[코드 2]


[코드 1]의 sender == this.radioButton1 은 this.radioButton1.Checked == true 로도 사용 가능하다.

마찬가지로 [코드 2]의 sender == this.checkBox1 도 this.checkBox1.Checked == true 로 사용 가능하다.


체크박스의 경우 여러개의 체크박스를 ListBox에 넣어 묶음으로 사용 가능하게 만들어둔

CheckedListBox 도구가 따로 존재한다.

Items라는 속성을 가지며 그 안에 체크박스 항목들을 자식 컨트롤로 갖는다.

항목들을 추가하기 위해 속성 창의 Items 프로퍼티 컬랙션을 설정하거나 Designer.cs 또는 초기화 코드에서

checkedListBox1.Items.Add("항목이름"); 처럼 직접 넣을 수 있다.

추가된 항목들은 각자 0번부터 Index값을 갖는다.


[그림 2]


CheckedListBox의 경우 그냥 CheckBox와는 달리 Item을 선택했을때 발생하는 SelectedIndexChanged 이벤트와

Item의 Checked 상태가 변경될 때 발생하는 ItemCheck 이벤트가 있다.


1
2
3
4
5
6
        private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //if(this.checkedListBox1.SelectedIndex != -1){
                this.label1.Text = this.checkedListBox1.SelectedItem.ToString();
            //}
        }
cs

[코드 3]


SelectedIndexChanged 이벤트는 SelectedIndex 값이 변경될 때 발생하는데

아무것도 선택된 항목이 없을 시 SelectedIndex 는 -1값을 갖고있다. 이를 이용해 조건문을 만들 수 있지만

[코드 3]처럼 해도 이벤트 발생을 위해선 일단 SelectedIndex 값이 변경되어야 하기에 동작은 차이가 없다.


1
2
3
4
5
6
7
8
9
10
11
12
13
        private void itemCheck_Changed(object sender, ItemCheckEventArgs e)
        {
            string item = this.checkedListBox1.SelectedItem.ToString();
            this.label1.Text = e.NewValue.ToString();
            if (e.NewValue == CheckState.Checked)
            {
                this.listBox1.Items.Add(item);
            }
            else
            {
                this.listBox1.Items.Remove(item);
            }
        }
cs

[코드 4]


ItemCheck 이벤트에선 e.NewValue로 현재 항목의 Checked 상태를 가져올 수 있다.

상태로는 Checked와 Unchecked 그리고 Indeterminate가 있다.

Checked는 선택된 상태 Unchecked는 선택되지 않은 상태 Indeterminate는 결정되지 않은 상태로


[그림 3 출처 : https://css-tricks.com/indeterminate-checkboxes/]


Indeterminate는 [그림 3]의 Tall Things 같은 경우 사용한다 생각하면 될 듯 하다.


[코드 4]의 5번 라인 처럼 현재 선택된 항목의 체크 상태를 불러와 CheckState를 이용해 비교하여 조건문을 만들 수 있다.

반응형

+ Recent posts