我想根据用户的选择将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 事件。但它不计算当前的选择。
非常感谢任何帮助。
答案 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
}
答案 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。 (伟大的黑客,如果你问我)