在TREEVIEW中新建一个节点,接着用右键点击其它节点并在弹出菜单中点击删除,结果删除的不是当前的节点,而是刚新建的节点。原因是因为右键并没有对节点进行选择。
所以提问:如何解决让右键也右选中功能。附简单代码即可。

解决方案 »

  1.   

    放在treeView1_AfterSelect事件里,节点不会选错了
      

  2.   

    private void treeView1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    try
    {
    if(e.Button == MouseButtons.Right)
    {
    Point ClickPoint = new Point(e.X,e.Y);  //////////獲得鼠標坐標
    TreeNode ClickNode = treeView1.GetNodeAt(ClickPoint);  //////////獲得鼠標坐標的tree節點
    if(ClickNode == null) return;           
    Point ScreenPoint = treeView1.PointToScreen(ClickPoint);  
               Point FormPoint = this.PointToClient(ScreenPoint);             
    contextMenu1.MenuItems.Clear();  
    contextMenu1.MenuItems.Add("新增"); 
    contextMenu1.MenuItems.Add("修改"); 
    contextMenu1.MenuItems.Add("刪除"); 
    contextMenu1.Show(this,FormPoint); ///////////設置菜單得顯示坐標
    TreeNode tn =this.treeView1.GetNodeAt(ClickPoint) as TreeNode;///////獲得右擊選中的節點
    if(tn!=null)
    {
    this.treeView1.SelectedNode = tn;/////////////把選中得節點設為樹選中的節點
    }
    contextMenu1.MenuItems[0].Click+=new EventHandler(this.treeadd);///////向菜單定義委托
    contextMenu1.MenuItems[1].Click+=new EventHandler(this.treeupd);
    contextMenu1.MenuItems[2].Click+=new EventHandler(this.treedel);
    }
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message);
    } }
      

  3.   

    //treeView1鼠标按下事件
    private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if(e.Button == MouseButtons.Right)
    {
    TreeNode tn = treeView1.GetNodeAt(e.X,e.Y);
    if(tn != null)
    {
    this.treeView1.SelectedNode = tn;
    }
    }
    }
      

  4.   

    /// <summary>
    /// 树的鼠标按下事件
    /// </summary>
    private void treData_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if (e.Button == MouseButtons.Right)
    {
    TreeNode node = this.treData.GetNodeAt(e.X,e.Y);
    if (node != null)
    {
    this.treData.SelectedNode = node;
    }
    }
    }
      

  5.   

    你在其他节点上点右键时是用的MouseUp事件吗?
    如果是的话,那么就可以捕捉到当前节点的tag。
    如果你是在MouseDown里写鼠标右键事件,好象捕捉不到当前选中的节点,因为还没开始选。
    建议用mouseup事件处理鼠标右键事件。
      

  6.   

    我采用的  zhzuo(秋枫) 的做法,不过修改了一点。
    contextMenu1.MenuItems.Add("新增"); 
    contextMenu1.MenuItems[0].Click+=new EventHandler(this.treeadd);///////向菜單定義委托
    这两个合在一起成为一个,这样不容易出错。
    contextMenu1.MenuItems.Add("新增",new EventHandler(this.treeadd));