powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как приостановить реакцию контрола на события.
8 сообщений из 8, страница 1 из 1
Как приостановить реакцию контрола на события.
    #32842495
Astakhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сабж .
Например я в TreeView на AfterCheck секаю и другие ноды, и у меня начинается цепная реакция.
Понятно, что можно нарисовать флаг и все такое, но как это делать правильно?
...
Рейтинг: 0 / 0
Как приостановить реакцию контрола на события.
    #32842500
Astakhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Astakhov
AfterCheck секаю и другие ноды
Прошу прощения ЧЕКАЮ
...
Рейтинг: 0 / 0
Как приостановить реакцию контрола на события.
    #32842524
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вроде в BeforeCheck можно отменить
...
Рейтинг: 0 / 0
Как приостановить реакцию контрола на события.
    #32842537
Astakhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дык отменить всегда можно, интересует существование команды, останавливающей принятие любых ивентов определенным контролом.
Отмена ж делаться должна по любому на основании каких либо флагов.
...
Рейтинг: 0 / 0
Как приостановить реакцию контрола на события.
    #32842561
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Astakhov сабж .
Например я в TreeView на AfterCheck секаю и другие ноды, и у меня начинается цепная реакция.
Понятно, что можно нарисовать флаг и все такое, но как это делать правильно? А в чем проблема то ? Какая "цепная реакция" ? Отмечайте ноды, которые вам надо. А какие не надо не отмечайте
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
		private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
		{
			foreach(TreeNode node in e.Node.Nodes)
			{
				node.Checked=e.Node.Checked;
			}
			
		}
AstakhovДык отменить всегда можно, интересует существование команды, останавливающей принятие любых ивентов определенным контролом.
Отмена ж делаться должна по любому на основании каких либо флагов
"Любых" - нельзя.
Можно отменить подписку на определенное событие
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
		{
			/*foreach(TreeNode node in e.Node.Nodes)
			{
				node.Checked=e.Node.Checked;
			}*/

			treeView1.AfterCheck -=new TreeViewEventHandler(treeView1_AfterCheck); 
			
		}
...
Рейтинг: 0 / 0
Как приостановить реакцию контрола на события.
    #32842646
Astakhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Kudinov А в чем проблема то ? Какая "цепная реакция" ? Отмечайте ноды, которые вам надо. А какие не надо не отмечайте
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
		private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
		{
			foreach(TreeNode node in e.Node.Nodes)
			{
				node.Checked=e.Node.Checked;
			}
			
		}

Вот тут по и появляется цепная реакция, т.е. treeView1_AfterCheck вызывается при каждом изменении node.Checked - ПРОВЕРЕНО
Получается такой код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
		
private bool flag_StopEvent = false;

private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
	if (flag_StopEvent) return;
	flag_StopEvent = true;
	foreach(TreeNode node in e.Node.Nodes)
	{
		node.Checked=e.Node.Checked;
	}
	flag_StopEvent = false;
}
...
Рейтинг: 0 / 0
Как приостановить реакцию контрола на события.
    #32842674
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AstakhovВот тут по и появляется цепная реакция, т.е. treeView1_AfterCheck вызывается при каждом изменении node.Checked - ПРОВЕРЕНО
Конечно вызывается. Как говорится "thats's the idea". Но я бы на вашем месте не флагами регулировал отмечать или нет последующие ветки, а непосредственно в обработчике события проверял попадают ли ноды под некое условие или нет, и только тогда отмечал.
Например добавив признак отмечать или нет в tag ноды. Или проверяя FullPath ноды, чтобы ноды 3 и более уровня не отмечались (как у вас)

Но можно и флагами конечно, если вам так удобнее. Только лучше "обрамить" код в try/finally, а то флаг может не восстановится
...
Рейтинг: 0 / 0
Как приостановить реакцию контрола на события.
    #32842785
Astakhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конкретно надо было сделать так, что б если отметили втку, то отмечались бы и все детеныши, и обратно.
Если в не отмеченой ветке что либо отметили, то отметить и корень, соответственно если разотметили последний в дереве элемент, то разотметить все до родителя у которого хоть что-то есть...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как приостановить реакцию контрола на события.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]