我不知道这是否可行,但如果有人知道如何实现这一点,那将是明智的。 我在winform中有一个复选框列表,我需要对一些复选框进行半检查(例如,未选中复选框但未检查复选框)。甚至可以在winforms复选框列表中执行此操作吗?如果没有,是否可以使用常规复选框而不是复选框列表来实现此目的?
答案 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);
}
单击时设置不确定状态:
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;
}
}