如何设置winform checkboxlist项目进行半检查?

时间:2014-02-09 10:17:35

标签: c# winforms checkboxlist

我不知道这是否可行,但如果有人知道如何实现这一点,那将是明智的。 我在winform中有一个复选框列表,我需要对一些复选框进行半检查(例如,未选中复选框但未检查复选框)。甚至可以在winforms复选框列表中执行此操作吗?如果没有,是否可以使用常规复选框而不是复选框列表来实现此目的?

3 个答案:

答案 0 :(得分:3)

这也可以在CheckListBox上实现,但您必须自己设置不确定状态,来自MSDN:

  

CheckedListBox对象通过CheckState枚举支持三种状态:Checked,Indeterminate和Unchecked。您必须在代码中设置Indeterminate的状态,因为CheckedListBox的用户界面不提供这样做的机制。

还有一个代码示例:

  // Adds the string if the text box has data in it. 
  private void button1_Click(object sender, System.EventArgs e)
  {
     if(textBox1.Text != "")
     {
        if(checkedListBox1.CheckedItems.Contains(textBox1.Text)== false)
           checkedListBox1.Items.Add(textBox1.Text,CheckState.Checked);  // here you can set CheckState.Indeterminate!
        textBox1.Text = "";
     }
  }

供参考: http://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox%28v=vs.110%29.aspx

答案 1 :(得分:0)

可以使用复选框。将ThreeState属性设置为true:

checkBox1.ThreeState = true;
  

获取或设置一个值,该值指示CheckBox是否允许三个   检查状态而不是两个。

CheckState可以是:

CheckState.Checked 
CheckState.Indeterminate
CheckState.Unchecked

示例:

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
    public Form1()
    {
        InitializeComponent();

        CheckState state = checkBox1.CheckState;

        switch (state)
        {
        case CheckState.Checked:
        case CheckState.Indeterminate:
        case CheckState.Unchecked:
            {
            MessageBox.Show(state.ToString());
            break;
            }
        }

        MessageBox.Show(checkBox1.Checked.ToString());
    }
    }
}

答案 2 :(得分:0)

private void button1_Click(object sender, EventArgs e)
{
    int index = checkedListBox1.Items.Add("test");
    checkedListBox1.SetItemCheckState(index, CheckState.Indeterminate);
}

Indeterminate

单击时设置不确定状态:

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;
    }
}