ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# 콤보박스
    1.윈도우/1.C# 2016.12.01 20:24

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

     

    예를들어

     

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

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

     

     

     

     

     

     

    댓글 1

Designed by Tistory.