我正在创建一个包含两个Checklistbox的表单。第一个是由数据库查询填充的,而后者是在我检查第一个上的元素时是动态创建的,而这些元素必须在第二个上复制。第一个工作正常,而第二个给我带来麻烦,因为它总是给我带来n-1个元素。我尝试了几个方法,例如BeginUpdate()和EndUpdate(),cblStaff..GetItemChecked(i))而不是cblStaff.GetItemCheckState(i).Equals(CheckState.Checked)。
我想这是价值刷新的问题,因为我放置了一个标签(lblCounter)来检查cblStaff上有多少项被选中。
也许这是事件的问题,我使用的是错误的,但我对这种控制感到疯狂。
这是代码:
private void cblStaff_ItemCheck(object sender, ItemCheckEventArgs e)
{
cblStaff.BeginUpdate();
switch (e.CurrentValue)
{
case CheckState.Indeterminate:
e.NewValue = CheckState.Checked;
break;
case CheckState.Checked:
e.NewValue = CheckState.Unchecked;
persons--;
break;
case CheckState.Unchecked:
e.NewValue = CheckState.Checked;
persons++;
break;
}
cblStaff.EndUpdate();
TeamUpdate();
}
private void RefreshDirector()
{
cblDirector.Items.Clear();
int counter = 0;
for (int i = 0; i < cblStaff.Items.Count; i++)
{
if (cblStaff.GetItemCheckState(i).Equals(CheckState.Checked)) {
cblDirector.Items.Add(cblStaff.Items[i].ToString(), CheckState.Unchecked);
counter++;
lblCounter.Text = "" + counter;
}
}
}
private void TeamUpdate()
{
switch (persons) {
case 0:
lblTeam.Text = "No team";
break;
case 1:
lblTeam.Text = "1 person team";
break;
default:
lblTeam.Text = "" + persons + " people team";
break;
}
cblStaff.Refresh();
RefreshDirector();
}