2

我需要一些帮助,但我正在用头撞墙。我有一个使用 tri-state 的应用程序CheckedListBox。我将这三种状态用于特定目的:

选中意味着技术人员执行了一项操作 未选中意味着技术人员没有执行该操作 不确定意味着技术人员没有执行该操作,因为它是不必要的。

我需要能够根据需要使用鼠标从 Checked 到 Unchecked 到 Indeterminate 到 Checked 进行切换。如果我使用 aCheckBoxThreeState设置为True,这正是会发生的情况,但似乎在 中设置 Indeterminate 状态的唯一方法CheckedListBox是通过代码。

有人可以告诉我该怎么做吗?令我难以置信的是,它不是您可以像在 中那样设置的属性CheckBox

我认为让我感到震惊的是,以前似乎没有人需要这个功能。我在谷歌上没有找到任何关于如何做到这一点或提出问题的信息。

4

2 回答 2

5

我不认为控件中有一个属性可以控制这种行为,但是在代码中很容易实现:

    void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        switch (e.CurrentValue)
        {
            case CheckState.Checked:
                e.NewValue = CheckState.Unchecked;
                break;

            case CheckState.Indeterminate:
                e.NewValue = CheckState.Checked;
                break;

            case CheckState.Unchecked:
                e.NewValue = CheckState.Indeterminate;
                break;
        }
    }
于 2011-12-13T00:02:57.620 回答
0

我将提供的建议从 C# 翻译为 VB,如下所示

Private Sub CheckedListBoxCriteria_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles CheckedListBoxCriteria.ItemCheck

Select Case e.CurrentValue
   Case CheckState.Checked
      e.NewValue = CheckState.Unchecked
      Exit Select

   Case CheckState.Indeterminate
      e.NewValue = CheckState.Checked
      Exit Select

   Case CheckState.Unchecked
      e.NewValue = CheckState.Indeterminate
      Exit Select
   End Select
End Sub

像魅力一样工作。我会发誓我尝试过类似的事情,但我没有做对。但这有效。非常感谢你。很简单。总有一天我会解决这个问题的。自学包括提出一个想法并四处挖掘,直到找到线索。

于 2011-12-13T14:54:18.810 回答