Не удается установить свойство Checked для TreeNode в событии AfterCheck - PullRequest
0 голосов
/ 24 мая 2011

У меня есть простой TreeView (несколько родителей и один уровень детей каждый) в C # 2008 (.Net 3.5) в Vista.

В процедуре AFterCheck я пытаюсь установить / отменить свойство Checked дочерних узлов на основе состояния родительского элемента, когда он щелкается мышью.

Используя MessageBoxes, я вижу введенную подпрограмму события и цикл через дочерние узлы, и если родитель проверен, код

childnode.Checked = parentNode.Checked;

показывает через MessageBox.Show (childnode.Checked + "" + parentNode.Checked); после выполнения кода отображается «False True», а дочерний флажок остается не отмеченным в TreeView.

Я пробовал несколько вариантов, найденных в сети, с одинаковым результатом. Я даже пытался заменить TreeView (MWControls) с точно такими же результатами.

Интересно, что любое другое свойство childnode (скажем, BackColor), которое я установил, вступает в силу.

Я считаю, что рекурсия не является проблемой и, кажется, проверяется отладочными MessageBoxes.

Есть идеи?

С уважением, Jim


Это приложение winform.

Я удалил все вызовы MessageBox без изменений; дочерние узлы все еще не проверены в ответ на проверяемый родительский узел.

Я удалил свою подпрограмму AfterCheck и использовал ту, на которую ссылается verbatum с теми же результатами; дочерние узлы не проверены в ответ на проверку родительского элемента.

Я играл с этим часами без удачи.

Странно, что любое другое свойство, которое я изменяю (например, BackColor), вступает в силу.

Я видел неясную ссылку в Интернете на эту проблему в Win7, но я не могу найти ее снова. В любом случае, я использую Vista, .Net 3.5 и C # Express 2008.

Спасибо за ввод.

С уважением, Jim

1 Ответ

1 голос
/ 24 мая 2011

Этот пример делает то, что вам нужно.Скорее всего, ваш код не работает, потому что установка дочернего свойства Checked снова распространяет событие, и вы не проверяете действие Unknown, как это делает связанный код.

...