Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Опция выбора в CheckedListBox


Автор: CYBERDREAM 16.1.2007, 02:28
Привет Народ!
Есть вопрос, хотя может и глупый, но ответа никак не могу, без вас не обойтись.
Хочу сделать так, чтобы можно было только одну галочку поставить, А по умолчанию можно хоть весь список выделить, что меня не устроивает. Думал SelectionMode виновен, но там стоит "One". Есть идеи? smile 

Автор: ivashkanet 16.1.2007, 08:55
Для одиночного выбора придуманы РадиоБаттоны (RadioButton).
Чем тебе они не нравятся?

Автор: ivashkanet 16.1.2007, 09:35
Не заметил, что это CheckedListBox  smile 

Идея только влоб:
Наследоваться от CheckedListBox и перекрыть OnItemCheck метод.
В нем, прежде чем изменять чекбокс, убираем все отмеченные итемы.
Вот что я наклепал:
Код

public class SingleCheckedListBox : System.Windows.Forms.CheckedListBox
    {
        private bool _uncheckingMode = false;
        protected override void OnItemCheck(ItemCheckEventArgs ice)
        {
            if (!_uncheckingMode)
            {
                base.OnItemCheck(ice);

                UncheckAll();

                //if (ice.CurrentValue == CheckState.Checked)
                //    ice.NewValue = CheckState.Unchecked;
                //else
                //    ice.NewValue = CheckState.Checked;
            }
        }

        private void UncheckAll()
        {
            _uncheckingMode = true;
            foreach (int index in this.CheckedIndices)
            {
                this.SetItemCheckState(index, CheckState.Unchecked);
            }
            _uncheckingMode = false;
        }
    }


uncheckingMode (режим снятия "птичек") нужен для того, чтобы при снятии птички не вызывался метод OnItemCheck в котором опять вызывался UncheckAll и поехали по кругу smile
Закоментированный код не нужен, хотя, на первый взгляд, необходим.

Автор: CYBERDREAM 16.1.2007, 11:22
Извиняюсь за посредственные знания, не сталкивался прежде. Как сделать наследование?

Автор: Naum 16.1.2007, 11:29
Цитата(ivashkanet @  16.1.2007,  10:35 Найти цитируемый пост)
public class SingleCheckedListBox : System.Windows.Forms.CheckedListBox

Эта строчка и означает, что класс SingleCheckedListBox наследник CheckedListBox. А вообще надо бы подучить теорию.

Автор: ivashkanet 16.1.2007, 11:38
CYBERDREAM, тебе нужно будет:
1) В меню (наверху) выбрать Project --> AddClass.
2) Откроется диалог, дашь етому классу имя SingleCheckedListBox
3) Откроется страница с кодом. Код:
Код

    class SingleCheckedListBox
    {
    }

Полностью заменишь на мой (1:1, кроме коментариев)
4) Скомпилируешь проект
5) В дизайнере форм на вкладке Toolbox появится подвкладка "<Твой проект> components" появится новый контрол, его можно ложить на форму

Автор: CYBERDREAM 16.1.2007, 11:56
Все работает. Огромное спасибо. ivashkanet спасибо за полное изложение!  smile 

Автор: ivashkanet 16.1.2007, 12:04
CYBERDREAM, всегд рад smile
Заходи еще smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)