Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/47: Рейтинг темы: голосов - 47, средняя оценка - 4.64
18 / 18 / 6
Регистрация: 21.12.2011
Сообщений: 72
1
.NET 2.x

CheckBox и событие CheckedChanged

23.10.2013, 13:54. Показов 8452. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть checkBox1, который подписан на событие сheckBox1_CheckedChanged. Можно ли как-то отметить чекбокс (checkBox1.Checked = true), при этом, что бы событие сheckBox1_CheckedChanged не сработало (то бишь в обход этого события)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2013, 13:54
Ответы с готовыми решениями:

Как создать событие CheckedChanged для массива объектов CheckBox?
Здравствуйте. Есть динамический массив checkbox'ов, есть ли способ отслеживать изменение свойства...

Событие CheckedChanged для динамически создаваемых Radiobutton
Уважаемые форумчане, подскажите как определить событие CheckedChanged для динамически создаваемых...

В момент загрузки срабатывает ивент CheckBox.CheckedChanged, как этого избежать
Проблема такова, что я загружаю форму на которой несколько checkBox`ов и в момент загрузки...

Не работает обработка CheckStateChanged для главного CheckBox и CheckedChanged для побочных
Здравствуйте Вот код: void ReCheckArrayRampage() { for (int i = 0; i <...

6
746 / 487 / 187
Регистрация: 30.12.2012
Сообщений: 1,278
Записей в блоге: 2
23.10.2013, 14:09 2
Zer0_CooL, а нужно, чтобы обработчик вообще не вызывался, или вызывался, но ничего не происходило?
0
18 / 18 / 6
Регистрация: 21.12.2011
Сообщений: 72
23.10.2013, 15:27  [ТС] 3
Цитата Сообщение от Tsin Посмотреть сообщение
Zer0_CooL, а нужно, чтобы обработчик вообще не вызывался, или вызывался, но ничего не происходило?
Нужно что бы обработчик вызывался только тогда, когда мышкой отмечаю чекбокс, но не тогда, когда в коде встречается например checkBox1.Checked = true;

Добавлено через 49 минут
Блин, есть же очевидное решение: отписываться от события сheckBox1_CheckedChanged, перед тем как отмечать чекбокс
P.s: Если есть еще какой-то более разумный способ, поведайте пожалуйста.
0
114 / 112 / 62
Регистрация: 15.03.2013
Сообщений: 561
Записей в блоге: 5
23.10.2013, 15:31 4
Могу предложить вариант с делегатом. Програмно правда придеться изменять не напрямую а через дополнительный класс.
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Windows.Forms;
 
namespace WinForm
{
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            public delegate void CH();
            public class Checked
            {
                static public event CH checkEvent;
                static private bool _check;
 
               static public bool Check
                {
 
                    get { return _check; }
                    set
                    {
                        _check = value;
                        if (checkEvent != null) checkEvent();
                    }
                }
            }
 
            private void Form1_Load(object sender, EventArgs e)
            {
                checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged);
                Checked.checkEvent += new CH(Checked_checkEvent);
            }
 
            void Checked_checkEvent()
            {
                checkBox1.CheckedChanged -= new EventHandler(checkBox1_CheckedChanged);
                checkBox1.Checked = !checkBox1.Checked;
                label1.Text = "Program Checked With Delegate";
                // Вот здесь разместить код при программном изменении статуса
                checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged);
            }
 
            void checkBox1_CheckedChanged(object sender, EventArgs e)
            {
                label1.Text = "Checked With Mouse";
            }
 
            private void button1_Click(object sender, EventArgs e)
            {
                Checked.Check = !Checked.Check;
            }
}
    
}


Во вложении весь проект. Если изменять чек мышкой один эффект, кнопкой (программно) другой.
Вложения
Тип файла: rar WinForm.rar (37.8 Кб, 17 просмотров)
1
114 / 112 / 62
Регистрация: 15.03.2013
Сообщений: 561
Записей в блоге: 5
23.10.2013, 15:49 5
Верхний пост можно удалить.Этот вариант более понятный на мой взгляд.
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Windows.Forms;
 
namespace WinForm
{
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            public delegate void CH(bool t);
            static public event CH checkEvent;
            
            private void Form1_Load(object sender, EventArgs e)
            {
                checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged);
                checkEvent += new CH(Checked_checkEvent);
            }
 
            void Checked_checkEvent(bool t)
            {
                checkBox1.CheckedChanged -= new EventHandler(checkBox1_CheckedChanged);
                checkBox1.Checked = t;
                label1.Text = "Program Checked With Delegate";
                // Вот здесь разместить код при программном изменении статуса
                checkBox1.CheckedChanged += new EventHandler(checkBox1_CheckedChanged);
            }
 
            void checkBox1_CheckedChanged(object sender, EventArgs e)
            {
                label1.Text = "Checked With Mouse";
            }
 
            private void button1_Click(object sender, EventArgs e)
            {
                checkEvent(!checkBox1.Checked);
            }
        }
}
Вложения
Тип файла: rar WinForm.rar (37.3 Кб, 18 просмотров)
1
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
23.10.2013, 16:58 6
Цитата Сообщение от Zer0_CooL Посмотреть сообщение
Нужно что бы обработчик вызывался только тогда, когда мышкой отмечаю чекбокс, но не тогда, когда в коде встречается например checkBox1.Checked = true;
Повесьте обработчик не на событие CheckedChanged, а на MouseClick, например.
1
140 / 137 / 22
Регистрация: 16.02.2012
Сообщений: 453
23.10.2013, 17:25 7
Событие Click.
1
23.10.2013, 17:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2013, 17:25
Помогаю со студенческими работами здесь

Определить событие при нажатии на checkBox
Я в форме руками создаю списокcheckBox-ов. Так же создаю событие click. Как мне привязать это...

Как обработать событие со столбцом типа checkbox в datagridview?
У меня есть datagridview, который заполняется с помощью SQL запроса, все данные считываются из БД....

Как определить какой из CheckBox'ов вызвал событие CheckedChanged?
Чекбоксы созданы программно, список имен чекбоксов берется из Excel файла вот код: Dim ChkBox As...

Вызвать событие CheckedChanged компонента CheckBox из процедуры загрузки формы
Привет. У меня на форме несколько CheckBox. В зависимости от CheckBox.Checked устанавливаются...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru