【问题标题】:how to set winform checkboxlist items to be semi-checked?如何将winform checkboxlist项目设置为半选中?
【发布时间】:2014-02-09 10:17:34
【问题描述】:

我不知道这是否可能,但如果有人知道如何实现这一点,那就太好了。 我在 winform 中有一个复选框列表,我需要一些复选框进行半选中(例如,复选框未选中且未选中)。甚至可以在 winforms check-box-list 中执行此操作吗?如果没有,是否可以使用常规复选框而不是复选框列表来实现这一点?

【问题讨论】:

    标签: c# winforms checkboxlist


    【解决方案1】:

    这也可以在 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

    【讨论】:

    • 复选框列表有一个数据源。我试过这样chkListPermissionGroups.SetItemCheckState(i, CheckState.Indeterminate);,但它所做的只是显示禁用的复选框......
    • @LiranFridman CheckedState.Indeterminate 是一个选中的 CheckBox,但背景颜色为灰色以显示其不确定状态,有关详细信息,请参阅 MSDN:msdn.microsoft.com/en-us/library/…msdn.microsoft.com/en-us/library/…
    • 但是在一个常规的复选框中,它会以其他方式显示......即便如此,当我点击复选框时,它不会更改为三种状态,只是在选中和未选中之间
    • @LiranFridman 如果您指的是不确定状态是正方形内的正方形(而不是检查)的样式,这取决于您使用的控件。也许它们的实现方式不同,或者取决于 Windows UI 主题。
    • 但是当我点击复选框时,它不会切换 3 个状态。它只切换 2:选中和未选中
    【解决方案2】:
    private void button1_Click(object sender, EventArgs e)
    {
        int index = checkedListBox1.Items.Add("test");
        checkedListBox1.SetItemCheckState(index, CheckState.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;
        }
    }
    

    【讨论】:

    • 我试过了,但复选框没有显示为半选中。它只显示为灰色,如已禁用
    • 提供了一张图片。它看起来像这样吗?如果需要,您可以提供自己的状态图像,如果标准图像不令人满意。
    • 是的,我看到了。但是当我点击复选框时,它不会切换 3 个状态。它只切换 2:选中和未选中。
    • 提供了在单击项目时设置不确定状态的代码。
    【解决方案3】:

    可以使用复选框。将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());
        }
        }
    }
    

    【讨论】:

    • -> "如果没有,是否可以使用常规复选框而不是复选框列表来实现此目的?"
    • 我看到了,谢谢。你能告诉我如何设置半选中状态吗?
    猜你喜欢
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多