2013-08-24 68 views
1

我有窗口應用程序。現在,在運行時,我在該頁面的內部添加了一個頁面& checkboxlist。C#窗口應用程序checkboxlist選擇模式不工作

對我的代碼是:

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」 ..

你能讓我知道嗎?我失蹤了什麼?

感謝

+1

這是'CheckBoxList'不是像'RadioButtonList' 。 'SelectionMode'僅用於'Select'而不用於'Check'。 –

+1

你應該使用'radiobuttons'' – Shaharyar

+0

'選擇一個項目'和'檢查一個項目'是兩回事。您正在選擇它,而不是檢查一個項目。 – Shaharyar

回答

2

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; 
+0

我爲itemcheck事件添加代碼。 DocTypeChkList.ItemCheck + = System.EventHandler(this.DocTypeChkList_ItemCheck);它在運行時向我顯示錯誤 – Kvadiyatar

+0

如何添加項目檢查事件? – Kvadiyatar

+0

@Kvadiyatar我以爲你知道如何註冊一個事件處理程序在C#中,看到我的更新知道如何。 –

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); 
     } 
    } 
} 
+0

SelectionMode.One意味着您一次只能選擇一個項目....這是我的問題...爲什麼它不起作用... – Kvadiyatar

+0

它是您的downvote?再次閱讀我的答案。這是正確的答案。 '選擇'是不同的'檢查'是不同的! –

+0

'在運行時用戶可以檢查多個複選框'是的用戶可以檢查多個項目,但他們不能選擇多個項目。 –

相關問題