Я заинтересован в захвате события перетаскивания, которое начнется с того, что пользователь перетаскивает существующий TreeNode где-то в TreeView. Пока пользователь перетаскивает TreeNode, меня интересует захват, когда узел перетаскивается между двумя узлами дерева. Когда пользователь делает это, я хотел отобразить хеш-метку между узлами дерева, чтобы указать, будет ли узел отброшен в узле как дочерний или как родной элемент. Этот хеш-знак будет отображаться либо:
- под узлом назначения (чтобы указать, что узел источника будет отброшен как дочерний узел узла назначения
ИЛИ ЖЕ
- под узлом назначения слева (чтобы указать, что узел источника будет отброшен как родной узел узла назначения), до или после ...
Я добился некоторого прогресса, используя событие DragOver. Я вычисляю местоположение мыши и получаю верхний и нижний узлы, когда перетаскиваю мышь вокруг.
int threshold = 8; //Joe(hack)
Point mouseLocation = mouseLocation = treeViewConditions.PointToClient(new Point(e.X, e.Y - threshold));
TreeNode topNode = treeViewConditions.GetNodeAt(mouseLocation);
mouseLocation = treeViewConditions.PointToClient(new Point(e.X + threshold, e.Y));
TreeNode bottomNode = treeViewConditions.GetNodeAt(mouseLocation);
if (topNode != null && bottomNode == null)
{
textBoxDescription.Text = "handling top node";
}
else if (topNode == null && bottomNode != null)
{
textBoxDescription.Text = "handling bottom node";
}
else if (topNode != null && bottomNode != null)
{
if (topNode != bottomNode)
{
textBoxDescription.Text = "between!";
}
else if (topNode == bottomNode)
{
}
}
Однако, делая это, он просто чувствует себя грязным. Мне интересно, знал ли кто-нибудь о лучшем способе сделать это.
За тонну заранее спасибо!