2

ウィンドウアプリケーションがあります。今、実行時に、そのページ内に1つのページとチェックボックスリストを追加しています。

そのための私のコードは次のとおりです。

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

現在、ユーザーは実行時にマルチチェックボックスをチェックできます...一度に複数ではなく1つのチェックボックスのみをチェックする必要があります....すでに選択モード「ONE」を指定してい ます..

何が欠けているのか教えてもらえますか????

ありがとう

4

2 に答える 2

3

CheckedListBoxユーザーが複数のチェックボックスをチェックできるようにすることが、このコントロールを設計する目的です。SelectionModeは、1 つまたは複数のアイテムを選択できることを示すためのものです (チェックされていないハイライトされているアイテムは、選択されていると見なされます)。したがって、回避するには、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されている場合は、一度に 1 つの項目しか選択できないことを意味します。ただし、 1 つの項目だけをチェックできるという意味ではありません。どちらも違います。違いを感じます。

使用することもできません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 に答える