Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
tigorlab
1 / 1 / 2
Регистрация: 02.10.2013
Сообщений: 74
1

Checkedlistbox - запретить вручную ставить/снимать флажок

05.06.2015, 10:04. Просмотров 895. Ответов 2
Метки нет (Все метки)

Здравствуйте, помогите пожалуйста решить проблему с checkedlistbox
необходимо чтобы доступ к check item был только программно - т.е. по клику мышки (одинарный, двойной) не изменялось состояние чекбокса в checkedlistbox.
так как реализовал работает только при одинарном клике, но при двойном состояние меняется
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void checkedListBox1_MouseDown(object sender, MouseEventArgs e)// в момент нажатия клавишы мы отлавливаем состояние чекбокса
{
    int n = checkedListBox1.IndexFromPoint(e.X, e.Y);
    textBox2.AppendText(n + "\r\n");
    yyyy = checkedListBox1.GetItemCheckState(n).ToString();// 
    textBox2.AppendText(yyyy + "\r\n");            
}
 
private void checkedListBox1_MouseUp(object sender, MouseEventArgs e)// и когда кнопку отпускаем то возвращаем то состояние которое отловили
{
    if (yyyy !=null)
    {
        int n = checkedListBox1.IndexFromPoint(e.X, e.Y);
        if (yyyy.Equals("Checked"))
        {
            checkedListBox1.SetItemCheckState(n, CheckState.Checked);
        }
        else
        {
            checkedListBox1.SetItemCheckState(n, CheckState.Unchecked);
        }
    }
}
заранее благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2015, 10:04
Ответы с готовыми решениями:

CheckedListBox - как установить-снять флажок?
Доброго времени суток! Тут такое дело... Потребовалось программно...

Флажок (true, false)
Как создать флажок? И как его надо использовать чтоб он проверил занят ли...

При выборе узла дерева не снимать выделение с дерева, а переводить курсор в datagridview
на форме treeview(слева)datagridview(справа).мне надо чтобы при выборе узла...

Подписать динамически созданный флажок на событие изменения значения
Здравствуйте уважаемые форумчане. Проблема в следующем, создал checkbox...

Скрытие textbox,label и button пока не будет нажат флажок
Работает не так как надо в чем проблема МБ кто знает подскажите пожалуйста....

2
sanmar1no
0 / 0 / 1
Регистрация: 13.01.2016
Сообщений: 6
13.01.2016, 22:28 2
Спасибо, благодаря тебе нашел функцию, чтобы реализовать устновку флажка одинарным щелчком мыши.
Получается так, что одним кликом происходит выделение, а вторым установка флажка. Либо двойным кликом (почти одно и тоже). Но если выделение будет происходить при движении курсора, то галоку ставить можно одним кликом.

C#
1
2
3
4
private void checkedListBox1_MouseMove(object sender, MouseEventArgs e)
        {            
            checkedListBox1.SetSelected(checkedListBox1.IndexFromPoint(e.X, e.Y),true);
        }
Добавлено через 6 минут
Тебе эта функция тоже могла пригодиться, если была бы своевременно написана
т.е. нужно в событие одинарного клика прописать реверсивную установку флажка и все (как у тебя в MouseUp). Должно сработать. А что мешает Enable false сделать?

Добавлено через 1 час 54 минуты
В связи с тем, что размер checkedListBox1 может быть больше, чем количество элементов в нем, поэтому нужно еще учесть пустое место над которым будет иногда "пролетать" курсор.

C#
1
2
3
4
5
        private void checkedListBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (checkedListBox1.IndexFromPoint(e.X, e.Y)!=-1)
            checkedListBox1.SetSelected(checkedListBox1.IndexFromPoint(e.X, e.Y),true);
        }
0
Даценд
Модератор
Эксперт .NET
4205 / 3969 / 2627
Регистрация: 20.04.2015
Сообщений: 7,210
13.01.2016, 23:12 3
sanmar1no,
Для установки чека одним щелчком просто поставьте для CheckedListBox свойство CheckOnClick = true.

Добавлено через 34 минуты
Не обратил внимания на дату создания темы. Но вдруг кому пригодится, чтобы доступ к check item был только программно:
Подключаем обработчик к событию ItemCheck:
C#
1
2
3
4
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    e.NewValue = e.CurrentValue;
}
Естественно, теперь изменить состояние чекбокса невозможно даже программно. Поэтому при необходимости программного изменения пользуемся методом SetCheckState:
C#
1
2
3
4
5
6
public void SetCheckState(int itemIndex, CheckState newState)
{
    checkedListBox1.ItemCheck -= checkedListBox1_ItemCheck; // отключаем обработчик
    checkedListBox1.SetItemCheckState(itemIndex, newState); // меняем состояние
    checkedListBox1.ItemCheck += checkedListBox1_ItemCheck; // подключаем обработчик
}
Вызываем метод:
C#
1
2
3
SetCheckState(1, CheckState.Checked);
SetCheckState(3, CheckState.Indeterminate);
SetCheckState(4, CheckState.Unchecked);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2016, 23:12

CheckedListBox
Привет Ребята. У меня возник вопрос. Можно ли загружать коллекции...

CheckedListBox
Доброе утро! Подскажите пожалуйста, можно ли в CheckedListBox к добовляемуму...

checkedlistbox
Добрый вечер. Потребовали написать программу, которая выглядит так: на форме 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru