닷넷/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(275, 11);
this.cbGroups.Name = "cbGroups";
this.cbGroups.Size = new System.Drawing.Size(135, 23);
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(275, 33);
this.checkedListBox1.Name = "checkedListBox1";
this.checkedListBox1.Size = new System.Drawing.Size(135, 244);
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 |
반응형