如何在拖动时突出显示目标节点
本文关键字:显示 目标 节点 拖动 | 更新日期: 2023-09-27 18:14:39
我有一个树视图,并试图移动节点到父节点(拖放),
是否有任何方法允许目标节点显示背景色,而鼠标在(左键仍然保持与拖动的项目)?
(更新)为什么下面的代码不工作??
private TreeNode nodeOver=null;
private void treeView_DragOver(object sender, DragEventArgs e)
{
Point p = treeView.PointToClient(new Point(e.X, e.Y));
nodeOver = treeView.GetNodeAt(p.X, p.Y);
nodeOver.BackColor = Color.Aquamarine;
}
private void treeView_DragLeave(object sender, EventArgs e)
{
nodeOver.BackColor = Color.White;
}
您可以尝试这样做:
private void treeView_DragOver(object sender, DragEventArgs e)
{
ClearBackground(treeView.Nodes);
Point p = treeView.PointToClient(new Point(e.X, e.Y));
TreeNode node = treeView.GetNodeAt(p.X, p.Y);
node.BackColor = Color.Aquamarine;
}
private void ClearBackground(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
node.BackColor = Color.White;
ClearBackground(node.Nodes);
}
}
编辑
这是一个改进的版本,应该不会引起闪烁:
private void treeView_DragOver(object sender, DragEventArgs e)
{
Point p = treeView.PointToClient(new Point(e.X, e.Y));
TreeNode node = treeView.GetNodeAt(p.X, p.Y);
if (node.PrevVisibleNode != null)
{
node.PrevVisibleNode.BackColor = Color.White;
}
if (node.NextVisibleNode != null)
{
node.NextVisibleNode.BackColor = Color.White;
}
node.BackColor = Color.Aquamarine;
}
Veldmius,你上面的答案不可靠,而且有点啰嗦。如果没有前一个或下一个节点可用,则NextVisibleNode和PreviousVisibleNode抛出空异常。
我的做法如下…转到设计器中的树视图属性。Set hidesselection = False
然后用这两行代码连接拖放事件。
private void treeview1_DragOver(object sender, DragEventArgs e)
{
TreeNode node = treeview1.GetNodeAt(treeview1.PointToClient(new Point(e.X, e.Y)));
treeview1.SelectedNode = node;
}