CheckedComboBoxEdit實現單選


一般地,我們用ComboBoxEdit來實現下拉單選,但它的item只能一個字符串,而不是一個自定義的對象。因此,我們常用CheckedComboBoxEdit來代替ComboBoxEdit,但CheckedComboBoxEdit默認是可以多選的,所以,我們要寫一個單選處理事件。效果如下:

自定義對象:

private static DataTable CreateTable(int rowCount)
{
    DataTable datatable = new DataTable();
    datatable.Columns.Add("Name", typeof(string));
    datatable.Columns.Add("ID", typeof(int));
    datatable.Columns.Add("Number", typeof(int));
    datatable.Columns.Add("Date", typeof(DateTime));
    for (int i = 0; i < rowCount; i++)
        datatable.Rows.Add(new object[] { $"選項 {i}", i, 3 - i, DateTime.Now.AddDays(i) });
    return datatable;
}

綁定數據:

checkedComboBoxEdit1.Properties.DataSource = CreateTable(10);
checkedComboBoxEdit1.Properties.DisplayMember = "Name";
checkedComboBoxEdit1.Properties.ValueMember = "ID";
checkedComboBoxEdit1.Properties.SelectAllItemVisible = false;

彈出窗口事件:

private void checkedComboBoxEdit1_Popup(object sender, EventArgs e)
{
    CheckedListBoxControl checkedListBoxControl = (sender as IPopupControl)?.PopupWindow.Controls.OfType<PopupContainerControl>().First().Controls.OfType<CheckedListBoxControl>().First();

    if (checkedListBoxControl != null)
    {
        checkedListBoxControl.ItemCheck -= checkedListBoxControl_ItemCheck;
        checkedListBoxControl.ItemCheck += checkedListBoxControl_ItemCheck;
    }
}

private void checkedListBoxControl_ItemCheck(object sender, DevExpress.XtraEditors.Controls.ItemCheckEventArgs e)
{
    if (e.State == CheckState.Checked)
    {
        CheckedListBoxControl list = sender as CheckedListBoxControl;
        List<CheckedListBoxItem> items = new List<CheckedListBoxItem>();
        foreach (int index in list.CheckedIndices)
        {
            if (index == e.Index) continue;
            items.Add(list.Items[index]);
        }
        foreach (CheckedListBoxItem item in items)
            item.CheckState = CheckState.Unchecked;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM