Вы можете использовать метод HitTest
, предоставляемый элементом управления TreeView
в сочетании с расположением указателя мыши, когда произошло событие MouseClick
( e.Location
), чтобы определить, какой узел был нажат (и, следовательно, будет отображаться выбранным в конце события). Например:
private void TreeView_MouseClick(object sender, MouseEventArgs e)
{
// Get the node that was clicked
TreeNode selectedNode = myTreeView.HitTest(e.Location).Node;
if (selectedNode != null)
{
// ...
// Do something with the selected node here...
}
}
Обратите внимание, что приведенный выше код проверяет, чтобы убедиться, что selectedNode
не является нулевым, прежде чем делать что-либо еще с ним. Если пользователь щелкнул что-то, что является , а не узлом, объект selectedNode
, полученный методом HitTest
, будет null
.
Вероятно, это сейчас не работает для вас, потому что вы пытаетесь использовать SelectedNode
свойство элемента управления TreeView
. Узел еще не был выбран, когда работает код в вашем методе обработчика событий MouseClick
- он будет выбран только после , когда этот код был выполнен. Использование вышеупомянутого метода вместо этого позволит вам добраться до узла, который в конечном итоге будет выбран более напрямую.
РЕДАКТИРОВАТЬ относительно вашего обновления и комментария ниже:
Это выглядит как простое исправление. Проблема возникает в этой строке вашего кода:
TVRecorder.Nodes[0].Nodes.Add(Convert.ToString(testplan_key), testplan_desc, "P", "Test_Plan");
Приведенный выше код добавляет новые узлы в качестве дочерних узлов первого узла, отображаемого в вашем TreeView
. Вместо этого мне кажется, что вы хотите добавить их в качестве дочерних элементов выбранного узла. Вы уже определили, что является выбранным узлом (см. Выше часть ответа), поэтому вам просто нужно изменить свой код, чтобы добавить новые узлы в качестве дочерних узлов выбранного узла, например:
selectedNode.Nodes.Add(Convert.ToString(testplan_key), testplan_desc, "P", "Test_Plan");
Помните, что каждый узел (экземпляр класса TreeNode
) имеет свойство Nodes
, которое предоставляет TreeNodeCollection
. Эта коллекция содержит все дочерние узлы этого узла. MSDN, вероятно, объясняет это лучше, чем я:
Свойство Nodes
может содержать
коллекция других TreeNode
предметов.
Каждый из узлов дерева [s] в
коллекция имеет свойство Nodes
, которое
может содержать свой собственный
TreeNodeCollection
. Это вложение
узлы дерева могут затруднить
перемещаться по древовидной структуре.
FullPath
свойство облегчает
определите свое местоположение в дереве.