CheckListBox从另一个CheckListBox更新

时间:2016-02-05 00:14:26

标签: c# winforms checkedlistbox

我正在创建一个包含两个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();
}

0 个答案:

没有答案