프로그래밍 기술/Windows Form 응용 프로그램

ComboBox, ListBox, CheckListBox 실습 [Windows Forms 실습]

언제나휴일 2016. 4. 5. 15:52
반응형

2. 3 실습: ComboBox, ListBox, CheckListBox

 

 이번에는 ComboBox, ListBox, CheckListBox 컨트롤의 사용법을 알아봅시다. 이들 컨트롤은 Items 컬렉션 속성을 갖고 있어 요소 개체를 보관하고 이들의 정보를 화면에 표시하는 역할을 수행합니다.

 

 우리는 이들 컨트롤에 요소를 추가하거나 삭제할 수 있고 선택 항목을 변경하였을 때 이에 관한 이벤트 처리를 하는 방법을 살펴볼 것입니다. 그리고 프로그램 방식으로 전체 요소의 개수를 알아내고 선택 항목이 무엇인지 확인하는 작업을 수행할 것입니다. 특히 CheckListBox 컨트롤은 요소 항목이 Checked 상태인지 여부도 확인할 수 있습니다.


ComboBox, ListBox, CheckListBox 실습 실행화면

[그림 2.5] 실행화면

 

 콤보 박스는 텍스트 박스처럼 입력도 할 수 있습니다. 여기서는 콤보 박스에 텍스트를 입력한 후 추가 버튼을 누르면 콤보 박스 항목에 추가합니다. 삭제 버튼을 누르면 선택 항목을 삭제합니다. 그리고 추가하거나 삭제 및 선택 항목이 바뀌면 실시간으로 맨 아래에 있는 Label 컨트롤에 메시지를 표시합니다.

 

 리스트 박스와 체크 리스트 박스도 콤보 박스와 비슷하게 처리할 것입니다. 다른 점은 항목을 추가하기 위한 별도의 텍스트 상자가 있다는 점입니다.

 

 마지막으로 요약 버튼을 클릭하면 각 박스의 항목 개수와 선택 항목을 리스트 박스에 항목 추가합니다. 그리고 체크 리스트 박스에 체크 상태의 항목들도 추가합니다.


ComboBox, ListBox, CheckListBox 실습 컨트롤 배치

[그림 2.6] 컨트롤 배치

 

No

Name

컨트롤 형식

설명

1

cbox

CheckBox

체크 박스

2

btn_add1

Button

체크 박스에 항목 추가

3

btn_remove1

Button

체크 박스의 선택 항목 삭제

4

tbox_1

TextBox

리스트 박스에 추가할 Text

5

btn_add2

Button

리스트 박스에 항목 추가

6

lbox_1

ListBox

리스트 박스

7

btn_remove2

Button

리스트 박스의 선택 항목 삭제

8

tbox_2

TextBox

체크 리스트 박스에 추가할 Text

9

btn_add3

Button

체크 리스트 박스에 항목 추가

10

chbox

CheckListBox

체크 리스트 박스

11

bnt_remove3

Button

체크 리스트 박스의 선택 항목 삭제

12

btn_summary

Button

전체 요약

13

lbox_2

ListBox

요약 정보 표시할 리스트 박스

14

lb_msg

Label

사건 변화를 표시할 Label

[ 2.3] Form1의 자식 컨트롤

 

 콤보 박스에 항목을 추가하는 btn_add1 컨트롤의 클릭 이벤트 핸드러를 등록하세요.

private void btn_add1_Click(object sender, EventArgs e)

{

 콤보 박스에 입력한 문자열은 Text 속성으로 가져오기 있습니다. 이를 콤보 박스의 항목을 보관하는 Items 컬렉션 속성에 추가합니다.

    cbox.Items.Add(cbox.Text);

 그리고 메시지를 표시할 lb_msg Text 속성에 정보를 설정하고 cbox Text 속성을 문자열로 설정합니다.

    lb_msg.Text = string.Format("콤보 박스 항목 추가 {0}", cbox.Text);

    cbox.Text = string.Empty;

}

  

 

 cbox 선택 항목 변경 이벤트 핸들러를 등록합니다.

private void cbox_SelectedIndexChanged(object sender, EventArgs e)

{

 선택 항목의 인덱스는 SelectedIndex 속성으로 가져오기 있습니다. 만약 값이 -1이면 선택 항목이 없는 것입니다.

    string msg;

    if (cbox.SelectedIndex == -1)

    {

        msg = string.Format("체크 박스 선택 항목이 없습니다.");

    }

    else

    {

 선택 항목은 SelectedItem으로 참조할 있습니다.

        string str = cbox.SelectedItem as string;

        msg = string.Format("체크 박스 선택 항목 변경, 인덱스:{0} Text:{1}",

                cbox.SelectedIndex, str);

    }

    lb_msg.Text = msg;

}



 콤보 박스의 선택 항목을 삭제하는 버튼의 클릭 이벤트 핸들러를 등록합니다.

private void btn_remove1_Click(object sender, EventArgs e)

{

 선택 항목이 없으면 이벤트 핸들러를 종료합니다.

    if (cbox.SelectedIndex == -1){    return;    }

 선택 항목의 정보를 가져와 메시지 문자열을 만듭니다.

    string str = cbox.SelectedItem as string;

   string msg = string.Format("체크 박스 선택 항목 삭제, 인덱스:{0} Text:{1}",

            cbox.SelectedIndex, str);

 그리고 콤보 박스의 Items 컬렉션 속성의 RemoveAt 메서드를 이용하여 선택 항목인덱스를 전달해 항목을 삭제합니다.

    cbox.Items.RemoveAt(cbox.SelectedIndex);

    lb_msg.Text = msg;

    cbox.Text = string.Empty;

}



 리스트 박스 사용법은 콤보 박스 사용법과 매우 흡사합니다. 먼저 리스트 박스에 항목을 추가하는 버튼의 클릭 이벤트 핸들러를 등록하여 작성하세요.

private void btn_add2_Click(object sender, EventArgs e)

{

    lbox_1.Items.Add(tbox_1.Text);

    lb_msg.Text = string.Format("리스트 박스 항목 추가 {0}", tbox_1.Text);

    tbox_1.Text = string.Empty;

}

 


 리스트 박스의 선택 항목을 삭제하는 버튼의 클릭 이벤트 핸들러도 등록하여 구현합시다.

private void btn_remove2_Click(object sender, EventArgs e)

{

    if (lbox_1.SelectedIndex == -1)

    {

        return;

    }

    string str = lbox_1.SelectedItem as string;

    string msg = string.Format("리스트 박스 선택 항목 삭제, 인덱스:{0} Text:{1}",

                lbox_1.SelectedIndex, str);

    lbox_1.Items.RemoveAt(lbox_1.SelectedIndex);

    lb_msg.Text = msg;

}

  

 

 리스트 박스의 선택 항목 변경 이벤트 핸들로도 등록하여 구현합시다.

private void lbox_1_SelectedIndexChanged(object sender, EventArgs e)

{

    string msg;

    if (lbox_1.SelectedIndex == -1)

    {

        msg = string.Format("리스트 박스 선택 항목이 없습니다.");

    }

    else

    {

        string str = lbox_1.SelectedItem as string;

        msg = string.Format("리스트 박스 선택 항목 변경, 인덱스:{0} Text:{1}",

                    lbox_1.SelectedIndex, str);

    }

    lb_msg.Text = msg;

}



 체크 리스트 박스에 항목을 추가하는 부분도 크게 다르지 않습니다.

private void btn_add3_Click(object sender, EventArgs e)

{

    chbox.Items.Add(tbox_2.Text);

    lb_msg.Text = string.Format("체크 리스트 박스 항목 추가 {0}", tbox_2.Text);

    tbox_2.Text = string.Empty;

}



 체크 리스트 박스에 항목을 삭제하는 부분도 구현합시다.

private void btn_remove3_Click(object sender, EventArgs e)

{

    if (chbox.SelectedIndex == -1){    return;    }

    string str = chbox.SelectedItem as string;

    string msg = string.Format(

          "체크 리스트 박스 선택 항목 삭제, 인덱스:{0} Text:{1}",

           chbox.SelectedIndex, str);

    chbox.Items.RemoveAt(chbox.SelectedIndex);

    lb_msg.Text = msg;

}

 


 체크 리스트 박스의 선택 항목 변경 이벤트 핸들러도 등록하여 구현하세요.

private void chbox_SelectedIndexChanged(object sender, EventArgs e)

{

    string msg;

    if (chbox.SelectedIndex == -1)

    {

        msg = string.Format("체크 리스트 박스 선택 항목이 없습니다.");

    }

    else

    {

        string str = chbox.SelectedItem as string;

        msg = string.Format("체크 리스트 박스 선택 항목 변경, 인덱스:{0} Text:{1}",

                   chbox.SelectedIndex, str);

    }

    lb_msg.Text = msg;

}

 


 마지막으로 요약 버튼 클릭 이벤트 핸들러를 등록하여 구현합시다.

private void btn_summary_Click(object sender, EventArgs e)

{

 먼저 요약 정보를 표시할 리스트 박스의 항목을 지웁니다.

    lbox_2.Items.Clear();

 그리고 박스의 항목 개수와 선택 항목을 추가합니다.

    string str;

    str = string.Format("콤보 박스 항목 개수:{0}", cbox.Items.Count);

    lbox_2.Items.Add(str);

    str = string.Format("콤보 박스 선택 항목:{0}", cbox.SelectedIndex);

    lbox_2.Items.Add(str);

    string.Format("리스트 박스 항목 개수:{0}", lbox_1.Items.Count);

    lbox_2.Items.Add(str);

    str = string.Format("리스트 박스 선택 항목:{0}", lbox_1.SelectedIndex);

    lbox_2.Items.Add(str);

    string.Format("체크 리스트 박스 항목 개수:{0}", chbox.Items.Count);

    lbox_2.Items.Add(str);

    str = string.Format("체크 리스트 박스 선택 항목:{0}", chbox.SelectedIndex);

    lbox_2.Items.Add(str);

 체크 리스트 박스의 체크 상태의 항목은 CheckedItems 컬렉션 속성에 있습니다. 이를 이용하여 선택 항목들을 순차적으로 추가하세요.

    str = string.Format("체크 리스트 박스 체크 상태 목록");

    lbox_2.Items.Add(str);

    foreach (object obj in chbox.CheckedItems)

    {

        lbox_2.Items.Add(obj);

    }

}

 이제 빌드한 후에 확인해 보세요.

 

Form1.cs

using System;

using System.Windows.Forms;

namespace Ex_ComboBox_ListBox_CHeckListBox

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void btn_add1_Click(object sender, EventArgs e)

        {

            cbox.Items.Add(cbox.Text);

            lb_msg.Text = string.Format("콤보 박스 항목 추가 {0}", cbox.Text);

            cbox.Text = string.Empty;

        }

        private void cbox_SelectedIndexChanged(object sender, EventArgs e)

        {

            string msg;

            if (cbox.SelectedIndex == -1)

            {

                msg = string.Format("체크 박스 선택 항목이 없습니다.");

            }

            else

            {

                string str = cbox.SelectedItem as string;

                msg = string.Format("체크 박스 선택 항목 변경, 인덱스:{0} Text:{1}",

                    cbox.SelectedIndex, str);

            }

            lb_msg.Text = msg;

        }

        private void btn_remove1_Click(object sender, EventArgs e)

        {

            if (cbox.SelectedIndex == -1){    return;    }

            string str = cbox.SelectedItem as string;

            string msg = string.Format("체크 박스 항목 삭제 인덱스:{0}Text:{1}",

                cbox.SelectedIndex, str);

            cbox.Items.RemoveAt(cbox.SelectedIndex);

            lb_msg.Text = msg;

            cbox.Text = string.Empty;

        }

        private void btn_add2_Click(object sender, EventArgs e)

        {

            lbox_1.Items.Add(tbox_1.Text);

            lb_msg.Text = string.Format("리스트 박스 항목 추가 {0}", tbox_1.Text);

            tbox_1.Text = string.Empty;

        }

        private void btn_remove2_Click(object sender, EventArgs e)

        {

            if (lbox_1.SelectedIndex == -1){    return;    }

            string str = lbox_1.SelectedItem as string;

            string msg = string.Format("리스트 박스 항목 삭제, 인덱스:{0} Text:{1}",

                lbox_1.SelectedIndex, str);

            lbox_1.Items.RemoveAt(lbox_1.SelectedIndex);

            lb_msg.Text = msg;

        }

        private void lbox_1_SelectedIndexChanged(object sender, EventArgs e)

        {

            string msg;

            if (lbox_1.SelectedIndex == -1)

            {

                msg = string.Format("리스트 박스 선택 항목이 없습니다.");

            }

            else

            {

                string str = lbox_1.SelectedItem as string;

                msg = string.Format("리스트 박스 선택 항목 변경 인덱스:{0} Text:{1}",

                    lbox_1.SelectedIndex, str);

            }

            lb_msg.Text = msg;

        }

 

        private void btn_add3_Click(object sender, EventArgs e)

        {

            chbox.Items.Add(tbox_2.Text);

            lb_msg.Text = string.Format(

                              "체크 리스트 박스 항목 추가 {0}", tbox_2.Text);

            tbox_2.Text = string.Empty;

        }

        private void btn_remove3_Click(object sender, EventArgs e)

        {

            if (chbox.SelectedIndex == -1){    return;    }

            string str = chbox.SelectedItem as string;

            string msg = string.Format(

               "체크 리스트 박스 선택 항목 삭제, 인덱스:{0} Text:{1}",

                chbox.SelectedIndex, str);

            chbox.Items.RemoveAt(chbox.SelectedIndex);

            lb_msg.Text = msg;

        }

        private void chbox_SelectedIndexChanged(object sender, EventArgs e)

        {

            string msg;

            if (chbox.SelectedIndex == -1)

            {

                msg = string.Format("체크 리스트 박스 선택 항목이 없습니다.");

            }

            else

            {

                string str = chbox.SelectedItem as string;

                msg = string.Format(

                    "체크 리스트 박스 선택 항목 변경, 인덱스:{0} Text:{1}",

                    chbox.SelectedIndex, str);

            }

            lb_msg.Text = msg;

        }

        private void btn_summary_Click(object sender, EventArgs e)

        {

            lbox_2.Items.Clear();

            string str;

            str = string.Format("콤보 박스 항목 개수:{0}", cbox.Items.Count);

            lbox_2.Items.Add(str);

            str = string.Format("콤보 박스 선택 항목:{0}", cbox.SelectedIndex);

            lbox_2.Items.Add(str);

            string.Format("리스트 박스 항목 개수:{0}", lbox_1.Items.Count);

            lbox_2.Items.Add(str);

            str = string.Format("리스트 박스 선택 항목:{0}", lbox_1.SelectedIndex);

            lbox_2.Items.Add(str);

            string.Format("체크 리스트 박스 항목 개수:{0}", chbox.Items.Count);

            lbox_2.Items.Add(str);

            str = string.Format("체크 리스트 박스 선택 항목:{0}",

                                      chbox.SelectedIndex);

            lbox_2.Items.Add(str);

 

            str = string.Format("체크 리스트 박스 체크 상태 목록");

            lbox_2.Items.Add(str);

            foreach (object obj in chbox.CheckedItems)

            {

                lbox_2.Items.Add(obj);

            }

        }

    }

}

 

반응형