使用CheckedListBox项动态绑定ComboBox?

时间:2014-01-02 03:21:49

标签: c# winforms combobox bind checkedlistbox

我想根据用户的选择将ComboBox与来自 CheckedListBox 的选中项绑定。

这就是我绑定ComboBox的方式:

    private void LoadFOCOutlets()
    {
        ArrayList outletList = new ArrayList();
        Outlet objOutlet = new Outlet();

        for (int i = 0; i < customCheckListBoxOutletList.CheckedItems.Count; i++)
        { 
            objOutlet = (Outlet)customCheckListBoxOutletList.Items[i];
            outletList.Add(objOutlet);
        }            

        objOutlet.OutletID = 0;
        objOutlet.OutletName = "Select Outlet";
        outletList.Insert(0, objOutlet);

        cmbFOCOutlets.DataSource = outletList;
        cmbFOCOutlets.DisplayMember = "OutletName";
        cmbFOCOutlets.ValueMember = "OutletID";
        cmbFOCOutlets.DropDownStyle = ComboBoxStyle.DropDownList;
    }

因此,每当用户检查一个新项时,它应该重新绑定ComboBox。上面的代码工作正常。

但是,在检查新项目后,我可以使用哪个 CheckedListBox 事件来重新绑定ComboBox?我尝试使用 ItemCheck 事件。但它不计算当前的选择。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

尝试此活动

private void CheckedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
   //Your code here
}

<强>(OR)

private void CheckedListBox1_ItemCheck(object sender, EventArgs e)
{
   //Your code here
}

Refer This

答案 1 :(得分:0)

以下摘录自 检查项目后会触发哪个CheckedListBox事件? Which CheckedListBox event triggers after a item is checked? (回答#3)

softburger声明: 我试过这个并且它有效: (似乎也适合我)

private void clbOrg_ItemCheck(object sender, ItemCheckEventArgs e)
{
    CheckedListBox clb = (CheckedListBox)sender;
    // Switch off event handler
    clb.ItemCheck -= clbOrg_ItemCheck;
    clb.SetItemCheckState(e.Index, e.NewValue);
    // Switch on event handler
    clb.ItemCheck += clbOrg_ItemCheck;

    // Now you can go further
    CallExternalRoutine();        
}

这个想法是,正如很多文章中提到的,CheckedListBox有一个ItemCheck事件,但没有ItemChecked事件。

要解决这个问题, ItemCheck处理程序赋值暂时中止(在ItemCheck处理程序例程本身(!?)中),

在此期间,为新检查的项调用CheckedListBox的SetItemCheckState方法(应该将项放在CheckedListBox的CheckedItems集合中)

然后重新分配ItemCheck处理程序。

// Switch off event handler
clb.ItemCheck -= clbOrg_ItemCheck;
clb.SetItemCheckState(e.Index, e.NewValue);
// Switch on event handler
clb.ItemCheck += clbOrg_ItemCheck;

现在你可以(最终)从CheckedItems集合中获取所有的CheckListBox Checked Items。 (伟大的黑客,如果你问我)