Почему мой настроенный TreeNode не прокручивается с моим настроенным TreeView? - PullRequest
0 голосов
/ 19 июня 2019

Я настроил TreeNode и TreeView, потому что мой TreeView имеет нормальный флажок TreeNode и настроенный TreeNode, который содержит комбинированный список.Мой древовидный список можно прокручивать, но когда я прокручиваю вниз, TreeNode с комбинированным списком не прокручивается вместе с древовидным.Зачем?

Пример:

see the example

MyTreeNode имеет ComboBox свойство:

 public ComboBox ComboBox
        {
            get
            {
                likelihood.DropDownStyle = ComboBoxStyle.DropDownList;
                return likelihood;
            }
            set
            {
                likelihood = value;
                likelihood.DropDownStyle = ComboBoxStyle.DropDownList;
            }
        }

и MyTreeView имеет этот метод:

protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e)
        {                
            if (e.Node is MyTreeNode)
            {
                myTreeNode = (MyTreeNode)e.Node;
                Controls.Add(myTreeNode.ComboBox);
                myTreeNode.ComboBox.SetBounds(myTreeNode.Bounds.X, myTreeNode.Bounds.Y, myTreeNode.Bounds.Width + 25, myTreeNode.Bounds.Height);   

                myTreeNode.ComboBox.Show();
            }
        }

MyTreeView "зарегистрирован" для двух событий (AfterCheck и DrawNode), а свойство DrawMode равно OwnerDrawAll.

Спасибо

1 Ответ

0 голосов
/ 19 июня 2019

Это ожидаемое поведение. TreeView ничего не знает о ComboBox и не будет синхронизировать свою позицию при прокрутке. Вы должны сделать эту синхронизацию вручную.

Помимо расчета границ ComboBox в момент его отображения, вы также должны переместить ComboBox на события прокрутки TreeView и на события разворачивания / сворачивания узла.

Для обработки раскрытия / свертывания необходимо переопределить OnAfterExpand и OnAfterCollapse .

Обработка событий прокрутки не является простой задачей, поскольку TreeView не предоставляет события прокрутки. Тем не менее, это выполнимо, вот пример из вопросов и ответов сообщества MSDN: событие полосы прокрутки древовидной структуры (обнаружение / управление) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...