Winforms:确定是否单击了树视图背景

时间:2017-08-18 08:44:32

标签: c# winforms treeview

我正在创建一个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();
}

1 个答案:

答案 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);
    }
}