2013-08-24 2 views
1

У меня есть окно приложения. теперь во время выполнения я добавляю одну страницу & checkboxlist внутри этой страницы.C# window application 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

Это ваш нисходящий знак? Прочтите мой ответ еще раз. это правильный ответ. «Выбор» отличается от «Проверка» - это другое! –

+0

'во время выполнения пользователь может проверять флажок« много ». Пользователь может проверять несколько элементов, но не может выбрать несколько элементов. –