Это трудно объяснить, поэтому я просто скажу вам, чего я хочу достичь, и как я это делаю, поэтому, возможно, у кого-то есть идея о том, что я делаю неправильно.C# TreeView Collapse/Expand on parent select
В моем winForm у меня есть элемент управления TreeView, который я заполняю. У всех родителей есть дети (любое их число), но у детей нет детей. Пример:
- Parent 1
Child 1
Child 2
Child 3
- Parent 2
Child 4
Поведение я хочу следующее:
- , когда пользователь нажимает ребенок его получить он выбран (сделано по умолчанию)
- Когда пользователь щелкает родитель, он должен либо свернуть или развернуть, но не изменить ни один из вариантов.
Пункт 1 не представляет проблемы, так как это поведение TreeView по умолчанию, но это еще одна история.
Вот что я сделал до сих пор:
Чтобы предотвратить родителей от выбран я добавить обработчик событий BeforeSelect и поместить в него следующий код:
if (e.Node.Parent == null)
e.Cancel = true;
Это делает работу отлично , Итак, теперь, когда я отменил выбор родителя, я хочу его развернуть или свернуть. Таким образом, я изменил приведенный выше код:
if (e.Node.Parent == null)
{
if (e.Node.IsExpanded)
{
e.Node.Collapse();
}
else
{
e.Node.Expand();
}
e.Cancel = true;
}
Это несколько работ - за исключением того, что, в отличие от нажатия на знак +, вызывая Expand() или Collapse() делает родительский узел будет выбран, не обращая внимания на e.Cancel = верно ; линия.
Я попытался получить SelectedNode перед вызовом Collapse() или Expand(), а затем установить его обратно - он работает, но когда я это сделаю, он снова расширит родительский элемент, чтобы сделать выбор.
Как-то знак + делает то, что я хочу, когда я нажимаю на родителя - я просто не могу заставить его работать.
Идеи?
Заранее спасибо
способ воскрешать на старые темы - лол - я с тех пор тронулась этот проект, но ваш ответ кажется твердым, так что я дам вам – 537mfb
@ chiper Можете ли вы подробнее рассказать о том, что здесь происходит? Я не совсем уверен. Моя проблема в том, что мой SelectedNodeChanged не срабатывает, если я дважды нажимаю на один и тот же узел (один для разворачивания, один для краха) – Ortund
Я не нашел событие SelectedNodeChanged в TreeView. Вы имели в виду AfterSelect? На самом деле этот код не меняет выделение, когда вы нажимаете на какой-либо корневой (расширяемый) узел. Обратите внимание, что структура вашего дерева должна следовать заявлению на вопрос: «У всех родителей есть дети (любое их число), но дети не имеют детей» – chiper