2

我有窗口应用程序。现在,在运行时,我在该页面内添加一个页面和复选框列表。

为此我的代码是:

Form inputBox = new Form();

                inputBox.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
                inputBox.ClientSize = size;
                inputBox.Text = "Doc Selection";
                inputBox.StartPosition = FormStartPosition.CenterScreen;
                inputBox.ControlBox = false;

                System.Windows.Forms.CheckedListBox DocTypeChkList = new CheckedListBox();
                DocTypeChkList.Location = new System.Drawing.Point(15, 10);
                DocTypeChkList.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                DocTypeChkList.Items.Add("B");
                DocTypeChkList.Items.Add("P");
                DocTypeChkList.Items.Add("Other");
                DocTypeChkList.SelectionMode = SelectionMode.One;
                inputBox.Controls.Add(DocTypeChkList);

现在,在运行时用户可以检查多个复选框...我希望一次只检查一个复选框而不是多个...我已经给出了选择模式“ONE” ..

你能告诉我。我错过了什么???

谢谢

4

2 回答 2

3

CheckedListBox允许用户检查多个复选框,这就是设计此控件的目的。SelectionMode只是表示您可以选择一个或多个项目(如果项目未选中,则认为它已被选中)。因此,要解决此问题,您必须添加一些代码来处理该ItemCheck事件。机制很简单。

    int lastCheckedIndex = -1;
    //ItemCheck event handler for your checkedListBox1
    private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        if (e.Index != lastCheckedIndex)
        {
            if(lastCheckedIndex != -1)
               checkedListBox1.SetItemCheckState(lastCheckedIndex, CheckState.Unchecked);
            lastCheckedIndex = e.Index;
        }
    }
    //To register event
    checkedListBox1.ItemCheck += checkedListBox1_ItemCheck;
于 2013-08-24T06:24:03.650 回答
1

在选中的列表框中SelectionMode.One意味着您一次只能选择一项。但这并不意味着您只能检查一项。两者是不同的。感到不同。

你不能CheckedListBox使用MultiSelect也这样做会抛出ArgumentException

解决方法:附加 ItemCheck 事件并取消选中所有其他项目

checkedListBox1.ItemCheck +=checkedListBox1_ItemCheck;

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    for (int i = 0; i < checkedListBox1.Items.Count; i++)
    {
        if (i != e.Index)
        {
            checkedListBox1.SetItemChecked(i, false);
        }
    }
}
于 2013-08-24T06:27:15.317 回答