[카테고리:] <span>Windows Forms 응용</span>

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

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

[그림 2.5] 실행화면

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

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

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

[그림 2.6] 컨트롤 배치

 다음은 Form1의 자식 컨트롤의 Name과 형식입니다.

NoName컨트롤 형식설명
1cboxComboBox콤보 박스
2btn_add1Button콤보 박스에 항목 추가
3btn_remove1Button콤보 박스의 선택 항목 삭제
4tbox_1TextBox리스트 박스에 추가할 Text
5btn_add2Button리스트 박스에 항목 추가
6lbox_1ListBox리스트 박스
7btn_remove2Button리스트 박스의 선택 항목 삭제
8tbox_2TextBox체크 리스트 박스에 추가할 Text
9btn_add3Button체크 리스트 박스에 항목 추가
10chboxCheckListBox체크 리스트 박스
11bnt_remove3Button체크 리스트 박스의 선택 항목 삭제
12btn_summaryButton전체 요약
13lbox_2ListBox요약 정보 표시할 리스트 박스
14lb_msgLabel사건 변화를 표시할 Label

콤보 박스에 항목을 추가하는 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);
            }
        } 
    }
}

Windows Forms 응용