在CheckedListBox中使用鼠标设置Indeterminate状态

时间:2011-12-12 23:48:48

标签: vb.net controls checkedlistbox tri-state-logic

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

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

我需要能够切换,鼠标从Checked到Unchecked到Indeterminate to Checked。如果我使用CheckBox并将ThreeState设置为True,这恰好会发生什么,但似乎是在{{1}中设置不确定状态的唯一方法通过代码。

有人可以告诉我该怎么办?令我难以置信的是,这不是你可以在CheckedListBox中设置的财产。

我认为是什么让我觉得以前似乎没有人需要这个功能。我在谷歌上没有发现任何人如何做到这一点,或者提出问题。

2 个答案:

答案 0 :(得分: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;
        }
    }

答案 1 :(得分: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

像魅力一样工作。我会发誓我尝试了类似的东西,但我没有做对。但这很有效。非常感谢你。很简单。总有一天我会弄清楚这一点。自己教学包括提出一个想法并四处挖掘,直到找到线索。