ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# 간단하게 구현한 CheckBox ComboBox (with CheckedListBox)
    프로그래밍/C# 2018. 3. 15. 19:01

    콤보박스 아이템들에 체크박스를 추가하는 방법들은

    구글링하면 나오긴 하는데 참고해서 직접 구현하려니 잘 안 된다.


    그래서 콤보박스와 체크드리스트박스 두개를 활용하는 방식으로 구현하였다.


    디자인(Designer.cs)

    // 콤보박스, // 1) 드롭다운스타일은 심플로 한다.
    // 2) 클릭이벤트가 있다.
    // cbGroups
    // 
    this.cbGroups.BackColor = System.Drawing.Color.AliceBlue;
    this.cbGroups.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple;
    this.cbGroups.FormattingEnabled = true;
    this.cbGroups.Items.AddRange(new object[] {
    "전체"});
    this.cbGroups.Location = new System.Drawing.Point(27511);
    this.cbGroups.Name = "cbGroups";
    this.cbGroups.Size = new System.Drawing.Size(13523);
    this.cbGroups.TabIndex = 1;
    this.cbGroups.Text = "전체";
    this.cbGroups.Click += new System.EventHandler(this.cbGroups_Click);    
     
    // 체크드리스트박스
    // 1) 프로그램 처음 실행 시 보이지 않는다.
    // 2) 콤보박스 밑에 위치한다.
    // checkedListBox1
    // 
    this.checkedListBox1.CheckOnClick = true;
    this.checkedListBox1.FormattingEnabled = true;
    this.checkedListBox1.Location = new System.Drawing.Point(27533);
    this.checkedListBox1.Name = "checkedListBox1";
    this.checkedListBox1.Size = new System.Drawing.Size(135244);
    this.checkedListBox1.TabIndex = 10;
    this.checkedListBox1.Visible = false;
    cs



    소스(.cs)

    // 아이템 데이터는 콤보박스가 아닌 체크드리스트박스에 바인딩한다.
    private void SetCombo()
    {
        DataTable dt = new DataTable();   
        string sQuery = "SELECT GroupID, GroupName FROM Groups WHERE CompID='" + cbCompanys.SelectedValue + "'";
        DataAdapter da = new DataAdapter(sQuery, conn); //Sql이든 OleDb든 본인이 사용하는 DB의 데이터어댑터 사용
        da.Fill(dt);
     
        checkedListBox1.DataSource = dt;
        checkedListBox1.ValueMember = "GroupID";
        checkedListBox1.DisplayMember = "GroupName";
    }
    cs


    // 콤보박스 클릭시 체크드리스트박스를 보인다.
    private void cbGroups_Click(object sender, EventArgs e)
    {
        if (!checkedListBox1.Visible)
            checkedListBox1.Visible = true;
        else
        {
            string s = "";
            foreach (object item in checkedListBox1.CheckedItems)
            {
                DataRowView castItem = item as DataRowView;
     
                if (s.Length > 0)
                {
                    s = s + ", ";
                }
                s = s + castItem["GroupName"].ToString();
            }
     
            if (s == "")
                s = "전체";
     
    //콤보박스의 텍스트에 체크드리스트박스에서 선택한 아이템 표시
            cbGroups.Text = s;
     
            checkedListBox1.Visible = false;
        }
    }
    cs


    댓글 1

Designed by Tistory.