본문 바로가기
→ 개발/C#

C# 콤보박스

by 벅스쭌 2016. 12. 1.
반응형

후임이 들어왔는데 콤보박스를 어렵게 쓰고 있다.

 

예를들어

 

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도 알 수 있다.

이것보다 더 좋은 방법들이 많이 있겠지만 나는 이 방법이 편하고 좋은 것 같다.

 

 

 

 

 

 

반응형