닷넷/WinForms

C# 간단하게 구현한 CheckBox ComboBox (with CheckedListBox)

FreeBear 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


반응형