2. 3 실습: ComboBox, ListBox, CheckListBox
이번에는 ComboBox, ListBox, CheckListBox 컨트롤의 사용법을 알아봅시다. 이들 컨트롤은 Items 컬렉션 속성을 갖고 있어 요소 개체를 보관하고 이들의 정보를 화면에 표시하는 역할을 수행합니다.
우리는 이들 컨트롤에 요소를 추가하거나 삭제할 수 있고 선택 항목을 변경하였을 때 이에 관한 이벤트 처리를 하는 방법을 살펴볼 것입니다. 그리고 프로그램 방식으로 전체 요소의 개수를 알아내고 선택 항목이 무엇인지 확인하는 작업을 수행할 것입니다. 특히 CheckListBox 컨트롤은 요소 항목이 Checked 상태인지 여부도 확인할 수 있습니다.
[그림 2.5] 실행화면
콤보 박스는 텍스트 박스처럼 입력도 할 수 있습니다. 여기서는 콤보 박스에 텍스트를 입력한 후 추가 버튼을 누르면 콤보 박스 항목에 추가합니다. 삭제 버튼을 누르면 선택 항목을 삭제합니다. 그리고 추가하거나 삭제 및 선택 항목이 바뀌면 실시간으로 맨 아래에 있는 Label 컨트롤에 메시지를 표시합니다.
리스트 박스와 체크 리스트 박스도 콤보 박스와 비슷하게 처리할 것입니다. 다른 점은 항목을 추가하기 위한 별도의 텍스트 상자가 있다는 점입니다.
마지막으로 요약 버튼을 클릭하면 각 박스의 항목 개수와 선택 항목을 리스트 박스에 항목 추가합니다. 그리고 체크 리스트 박스에 체크 상태의 항목들도 추가합니다.
[그림 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); } } } } |
'프로그래밍 기술 > Windows Form 응용 프로그램' 카테고리의 다른 글
3. 2 실습: 다른 프로젝트에서 만든 컨트롤 사용하기 [Windows Forms 응용 프로그램] (0) | 2016.04.06 |
---|---|
3.1.3 Form1 구현 [Windows Forms 응용 프로그램] (0) | 2016.04.06 |
3.1.2 ColorSelectControl 정의 [Windows Forms 응용 프로그램] (0) | 2016.04.06 |
3.1.1 ColorChangeEventArgs 정의 [Windows Forms 응용 프로그램] (0) | 2016.04.06 |
3. 사용자 정의 컨트롤 [Windows Forms 응용 프로그램] (0) | 2016.04.06 |
TreeView 실습 [Windows Forms 응용 프로그램] (2) | 2016.04.05 |
ListView 실습 [Windows Forms 응용 프로그램] (0) | 2016.04.05 |
CheckBox와 RadioButton 사용 실습 [Windows Forms 응용 프로그램] (0) | 2016.04.05 |
2. 공용 컨트롤 , 동적으로 버튼 생성 [Windows Forms 응용 프로그램] (0) | 2016.04.05 |
1. Form [Windows Forms 응용 프로그램] (0) | 2016.04.05 |