후임이 들어왔는데 콤보박스를 어렵게 쓰고 있다.
예를들어
1 : 사과
2 : 배
3 : 당근
이렇게 3가지를 콤보박스 아이템으로 넣고 선택을 하게 할 것이다.
그리고 사과를 선택하면 1을 얻어오고 싶고, 배를 선택하면 2를 얻어오고 싶고, 당근을 선택하면 3을 얻어오고 싶다.
후임은 이렇게 작성하였다.
1. 콤보박스에 아이템을 넣을 때
private void InitControl()
{
comboBox1.Items.Add("사과");
comboBox1.Items.Add("배");
comboBox1.Items.Add("당근");
}
2. 그리고 콤보박스에서 선택하였을 때
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int selectNum;
switch(comboBox1.Text)
{
case "사과":
selectNum = 1;
break;
case "배":
selectNum = 2;
break;
case "당근":
selectNum = 3;
break;
}
}
이렇게 해도 상관은 없지만
데이터베이스에 CODE와 NAME으로 맵핑되어 있는 것을 읽어와 콤보박스에 넣어 사용하려면 위에 방법은 별로 효율적이지 못하다고 생각한다. 그리고 선택 한 값을 매핑할때도 오류를 많이 범할 수 있다.
내가 쓰는 방법은 아래와 같다.
1. 콤보박스 아이템으로 넣을 클래스를 한개 만든다.
public class ComboBoxItem
{
#region Fields
private int code;
private string name;
#endregion
#region Properties
public int Code
{
get { return code; }
set { code = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
#endregion
public override string ToString()
{
return this.name;
}
}
여기서 중요한 것은 ToString을 override하여 리턴을 name을 리턴하도록 한다.
이렇게 했을 경우 저 객체를 생성해서 콤보박스 아이템으로 넣었을 때 name에 있는 string을 콤보박스에 보여준다.
2. 콤보박스에 아이템을 넣을 때
- ComboBoxItem을 생성하여 값을 넣어주고 그것을 콤보박스 아이템에 Add 해준다.
private void InitControl()
{
ComboBoxItem item1 = new ComboBoxItem();
item1.Code = 1;
item1.Name = "사과";
comboBox1.Items.Add(item1);
ComboBoxItem item2 = new ComboBoxItem();
item2.Code = 2;
item2.Name = "배";
comboBox1.Items.Add(item2);
ComboBoxItem item3 = new ComboBoxItem();
item3.Code = 3;
item3.Name = "당근";
comboBox1.Items.Add(item3);
}
3. 콤보박스에서 선택하였을 때(예외처리 생략)
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int selectNum;
ComboBoxItem item = comboBox1.SelectedItem as ComboBoxItem;
selectNum = item.Code;
}
이렇게 하면 item.Code, item.Name을 통하여 선택한 아이템의 명칭도 가져올 수 있고 선택한 아이템에 정의되어 있는 Code도 알 수 있다.
이것보다 더 좋은 방법들이 많이 있겠지만 나는 이 방법이 편하고 좋은 것 같다.
'→ 개발 > C#' 카테고리의 다른 글
C# 입력받은 문자열의 byte길이(크기) 구하기 (0) | 2017.04.21 |
---|---|
C# Interop 형식 오류 (0) | 2017.04.18 |
[C#] PC에서 사용할 수 있는 COM포트 목록 가져오기 (0) | 2014.12.30 |
Byte 값을 HEX String으로 변환 (0) | 2014.12.30 |
[C#] OpenFileDialog 파일 불러오기 (0) | 2013.09.24 |