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

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

Сообщение Anonymous »

У меня есть приложение Winforms с древовидным представлением, состоящим из нескольких корневых узлов. Мои данные не будут выглядеть хорошо с одним корневым узлом.
Я требую, чтобы у пользователя была возможность щелкать мышью, чтобы добавлять новые узлы в древовидное представление. Если пользователь щелкает узел в дереве, новый узел добавляется как дочерний узел выбранного узла. Если пользователь щелкает пустое место под последним узлом дерева, к дереву добавляется новый корневой узел. Я использую событие 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");
}
Это работает нормально, пока под древовидным представлением не останется пустого места, на которое можно щелкнуть (и не появятся полосы прокрутки). Это связано с тем, что узел в древовидном представлении состоит из всей горизонтальной линии, а не только из текстовой метки, что означает, что в элементе управления больше нет пустого места, на которое можно щелкнуть, чтобы создать корневой узел:
Изображение

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

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

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

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

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

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