이번에는 ComboBox, ListBox, CheckListBox 컨트롤의 사용법을 알아봅시다. 이들 컨트롤은 Items 컬렉션 속성을 갖고 있어 요소 개체를 보관하고 이들의 정보를 화면에 표시하는 역할을 수행합니다.
우리는 이들 컨트롤에 요소를 추가하거나 삭제할 수 있고 선택 항목을 변경하였을 때 이에 관한 이벤트 처리를 하는 방법을 살펴볼 것입니다. 그리고 프로그램 방식으로 전체 요소의 개수를 알아내고 선택 항목이 무엇인지 확인하는 작업을 수행할 것입니다. 특히 CheckListBox 컨트롤은 요소 항목이 Checked 상태인지 여부도 확인할 수 있습니다.
콤보 박스는 텍스트 박스처럼 입력도 할 수 있습니다. 여기서는 콤보 박스에 텍스트를 입력한 후 추가 버튼을 누르면 콤보 박스 항목에 추가합니다. 삭제 버튼을 누르면 선택 항목을 삭제합니다. 그리고 추가하거나 삭제 및 선택 항목이 바뀌면 실시간으로 맨 아래에 있는 Label 컨트롤에 메시지를 표시합니다.
리스트 박스와 체크 리스트 박스도 콤보 박스와 비슷하게 처리할 것입니다. 다른 점은 항목을 추가하기 위한 별도의 텍스트 상자가 있다는 점입니다.
마지막으로 요약 버튼을 클릭하면 각 박스의 항목 개수와 선택 항목을 리스트 박스에 항목 추가합니다. 그리고 체크 리스트 박스에 체크 상태의 항목들도 추가합니다.
다음은 Form1의 자식 컨트롤의 Name과 형식입니다.
No | Name | 컨트롤 형식 | 설명 |
1 | cbox | ComboBox | 콤보 박스 |
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 |
콤보 박스에 항목을 추가하는 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); } } } }