후임이 들어왔는데 콤보박스를 어렵게 쓰고 있다.
예를들어
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 |