Нет фона для вставки корневого узлаC#

Место общения программистов C#
Ответить
Anonymous
 Нет фона для вставки корневого узла

Сообщение Anonymous »

У меня есть winform с TreeView, который состоит из нескольких корневых узлов. Мои данные не будут выглядеть хорошо с одним корневым узлом.
Я требую, чтобы у пользователя была возможность щелкать мышью, чтобы добавлять новые узлы в Treeview. Если пользователь щелкает узел в дереве, новый узел добавляется как дочерний узел выбранного узла. Если пользователь щелкнет пустое место под конечным узлом дерева, в дерево будет добавлен новый RootNode. Я использую событие MouseUp, чтобы определить, был ли щелчок по узлу дерева или по пустому пространству под последним узлом.

Код: Выделить всё

            TreeNode clickedNode = treeView1.GetNodeAt(e.X, e.Y);

if (clickedNode != null)
{
// User clicked node
clickedNode.Nodes.Add("New ChildNode");
}
else
{
// User clicked background
treeView1.Nodes.Insert(0, "New RootNode");
}
Это работает нормально, пока под TreeView не останется пустого места, по которому можно щелкнуть (и не появятся полосы прокрутки). Это связано с тем, что узел в TeeView состоит из всей горизонтальной линии, а не только из текстовой метки, что означает, что в элементе управления больше нет пустого места, на которое можно щелкнуть, чтобы создать корневой узел.
Изображение

Та же проблема возникает, если я использую перетаскивание для перемещения узлов. Как только новые добавленные узлы достигают нижней части дерева (и появляются полосы прокрутки), я не могу перетаскивать дочерние узлы из дерева, чтобы они стали корневыми узлами.
Пустой строки в нижней части TreeView было бы достаточно, если это возможно.
Чтобы сделать ситуацию немного понятнее.
На рисунке выше показано простое тестовое приложение, которое я создал, чтобы показать, как можно обойти поведение TreeView по умолчанию и создать корневой узел в пустом месте. пространство вместо добавления дочернего узла к выбранному узлу в дереве.
Мое фактическое приложение имеет много узлов в дереве, но только 2 типа: папки или документы. Пользователь может щелкнуть правой кнопкой мыши, и появится контекстное меню, позволяющее добавить новый документ, новую корневую папку или новую дочернюю папку. Мне это не нравится, я бы предпочел просто иметь «Новый документ» или «Новую папку», нет необходимости различать корневую папку и дочернюю папку, что просто создает путаницу. Поэтому я изменил contextMenu, чтобы просто включить «Новый документ» и «Новую папку», и использовал приведенный выше код (очевидно, измененный), чтобы решить, создавать ли корневую или дочернюю папку, проверив, было ли щелкнуто правой кнопкой мыши пространство под последним узлом. Это отлично работает до тех пор, пока TreeView не будет полностью заполнен, тогда я больше не могу щелкнуть в пространстве под последним узлом, чтобы создать корневые узлы.
У меня также есть проблема, заключающаяся в том, что contextMenu позволяет пользователю вырезать/копировать и вставлять узлы. Это также отлично работает до тех пор, пока TreeView не будет полностью заполнено, тогда я больше не могу вставлять вырезанные/скопированные узлы в пустое пространство для создания корневых узлов.
Аналогично с перетаскиванием я могу перетаскивать узлы из TreeView в пустое пространство для создания корневых узлов, но не тогда, когда дерево полностью заполнено.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»