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

[C#] 윈도우 폼 - 콤보 박스, 리스트 박스 사용하기

by Ratataca 2021. 12. 9.

ComboBox와 ListBox

콤보 박스와 리스트 박스는 1차원 리스트를 출력할 때 사용합니다. 이 둘은 일반적으로 디자인 창보다 코드를 입력해서 사용한다. 아래 그림에서 위에서 부터 ComboBox, ListBox 순으로 배치한다.

 

콤보 박스와 리스트 박스 생성하기

배열 또는 리스트를 이용하여 두 박스의 DataSource 속성에 할당한다.

아래는 Form1이 만들어지는 초기 생성 주기에 해당 값을 입력하여 Form이 만들어질 때 해당 값들이 정의 되게 한다.

 

코드

    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();

            var dataSource = new string[] { "사과", "바나나", "포도" };

            comboBox1.DataSource = dataSource;
            listBox1.DataSource = dataSource;
        }

    }

 

결과

 

 

SelectedIndexChanged 이벤트 사용하기

콤보 및 리스트 박스에서 선택한 요소가 변경될 때 자동으로 발생하는 이벤트이다. 속성 탭에 가서 해당 이벤트를 찾아 추가하면 된다. (해당 영역을 더블 클릭하면 자동 생성 됨)

 

다음과 같은 이벤트 함수가 생성된다.

 

코드

이벤트 함수가 호출 되었을때, 다음과 같이 결과를 출력할 Label의 Text 값을 변경하게 코드를 작성한다.

 

결과

 

 


클래스를 활용한 콤보 및 리스트 박스 활용법 (추가 조사 필요)

간단한 객체인 Fruit 객체를 선언하여 사용해보자. 또한 더 나아가 DataSource와 함께 사용 가능한 DisplayMember 속성과 ValueMenber 속성을 이용해보자.

  • DisplayMember 속성 : 화면에 출력할 속성을 선택
  • ValueMember 속성 : 이후 SelectedValue로 추출할 속성 선택

이 두 속성은 DataSource 속성을 지정하기 전에 지정하는 것이 중요하다.

 

        class Fruit { 
            public string Name { get; set; }
            public int Price { get; set; }
        }


        public Form1() {
            InitializeComponent();


            var dataSource = new List<Fruit> {
                new Fruit(){ Name = "사과", Price = 1500},
                new Fruit(){ Name = "바나나", Price = 2000},
                new Fruit(){ Name = "포도", Price = 4500}
            };

            comboBox1.DisplayMember = "Name";
            comboBox1.ValueMember = "Price";
            comboBox1.DataSource = dataSource;

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
            label2.Text = comboBox1.SelectedIndex + " : " + comboBox1.SelectedValue + " : " + ((Fruit)comboBox1.SelectedItem).Name;
        }

 

(Fruit)comboBox1.SelectedItem은 Object 객체 이기 때문에 형변환을 할 필요가 있다.

 

댓글