我正在创建一个winforms
应用,用户可以通过右键单击节点或背景将节点添加到树视图中。如果用户单击某个节点,则新节点应该成为该节点的子节点,否则它将被添加到树视图的根节点。
我的问题是没有检查背景是否被点击的功能。以下是我到目前为止的情况。不幸的是,如果现在单击一个节点,那么子节点将被添加到根节点和父节点。
private void treeView_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right) addChild(null);
}
private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == MouseButtons.Right) addChild(e.Node);
}
private void addChild(TreeNode parent)
{
TreeNode node = new TreeNode("new node");
// If didn't click on a node, add to root, otherwise add to parent
if (parent == null) treeView.Nodes.Add(node);
else parent.Nodes.Add(node)
node.Parent.Expand();
}
答案 0 :(得分:2)
将代码从MouseClick
移至MouseUp
(当用户释放鼠标按钮时)。然后通过鼠标坐标检查该位置上是否有节点。
看看这段代码:
private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
var clickedNode = treeView1.GetNodeAt(e.X, e.Y);
if (clickedNode == null)
{
//clicked on background
addChild(null);
}
else
{
//clicked on node
addChild(clickedNode);
}
}