最简单的方法就是传递一个标记变量,每次点击节点时标记tag复位1否则为0
而Contextmenu是否有效就是通过tag来标记

解决方案 »

  1.   

    给个例子做参考:源码转摘(不错的例子)
    TreeView.aspx<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
    <HTML>
    <HEAD>
    <title>TreeView控件右键菜单</title>
    <style>
    <!--
    .skin 
    {
    cursor:default;
    font:menutext;
    position:absolute;
    text-align:left;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 10pt;
    width:120px;
    background-color:menu;
    border:1 solid buttonface;
    visibility:hidden;
    border:2 outset buttonhighlight;
    }
    .menuitems 
    {
    padding-left:15px;
    padding-right:10px;
    }
    -->
    </style> 
    </HEAD>
    <body onclick="hideMenu()">
    <form id="TreeView" method="post" runat="server">
    <iewc:TreeView id="TreeView1" runat="server" ExpandLevel="3" HoverStyle="color:blue;background:#ffff00;">
    <iewc:TreeNode Text="Node0" Expanded="True">
    <iewc:TreeNode Text="Node3">
    <iewc:TreeNode Text="Node5"></iewc:TreeNode>
    <iewc:TreeNode Text="Node6"></iewc:TreeNode>
    </iewc:TreeNode>
    <iewc:TreeNode Text="Node4"></iewc:TreeNode>
    </iewc:TreeNode>
    <iewc:TreeNode Text="Node1" Expanded="True">
    <iewc:TreeNode Text="Node7">
    <iewc:TreeNode Text="Node8"></iewc:TreeNode>
    </iewc:TreeNode>
    </iewc:TreeNode>
    <iewc:TreeNode Text="Node2" Expanded="True">
    <iewc:TreeNode Text="Node9"></iewc:TreeNode>
    <iewc:TreeNode Text="Node10">
    <iewc:TreeNode Text="Node11"></iewc:TreeNode>
    <iewc:TreeNode Text="Node12"></iewc:TreeNode>
    </iewc:TreeNode>
    </iewc:TreeNode>
    </iewc:TreeView>
    <div id="popupMenu" class="skin" onMouseover="highlighItem()" onMouseout="lowlightItem()" onClick="clickItem()">
    <div class="menuitems" func="add">添加</div>
    <hr>
    <div class="menuitems" func="delete">删除</div>
    <div class="menuitems" func="modify">修改</div>
    </div>
    </form>
    <script language="javascript">
    var menuskin = "skin";
    var node = null; function hideMenu() 
    {
    popupMenu.style.visibility = "hidden";
    } function highlighItem() 
    {
    if (event.srcElement.className == "menuitems") 
    {
    event.srcElement.style.backgroundColor = "highlight";
    event.srcElement.style.color = "white";
    }
    } function lowlightItem() 
    {
    if (event.srcElement.className == "menuitems") 
    {
    event.srcElement.style.backgroundColor = "";
    event.srcElement.style.color = "black";
    window.status = "";
    }
    } function clickItem() 
    {
    if (event.srcElement.className == "menuitems") 
    {
    if(event.srcElement.getAttribute("func") == "add" && node != null)
    {
    var newNode=TreeView1.createTreeNode();
    newNode.setAttribute("Text","new Node");
    node.add(newNode);
    }
    else if (event.srcElement.getAttribute("func") == "delete" && node != null)
    {
    node.remove();
    }
    else if (event.srcElement.getAttribute("func") == "modify" && node != null)
    {
    node.setAttribute("Text","hgknight");
    }
    }
    }

    function TreeView1.oncontextmenu()
    {
    var nodeIndex = event.treeNodeIndex;
    if (typeof(nodeIndex) == "undefined")
    {
    node = null;
    return false;
    }

    node = TreeView1.getTreeNode(nodeIndex);

    var rightedge = document.body.clientWidth-event.clientX;
    var bottomedge = document.body.clientHeight-event.clientY;
    if (rightedge <popupMenu.offsetWidth)
    {
    popupMenu.style.left = document.body.scrollLeft + event.clientX - popupMenu.offsetWidth;
    }
    else
    {
    popupMenu.style.left = document.body.scrollLeft + event.clientX;
    }
    if (bottomedge <popupMenu.offsetHeight)
    {
    popupMenu.style.top = document.body.scrollTop + event.clientY - popupMenu.offsetHeight;
    }
    else
    {
    popupMenu.style.top = document.body.scrollTop + event.clientY;
    }
    popupMenu.style.visibility = "visible";
    return false;
    }

    </script>
    </body>
    </HTML>
      

  2.   

    可以使用treeview的MouseDown事件:
    private void treeViewRack_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        if(e.Button ==MouseButtons.Right)
        {
          //当在treeview节点点击右键时调用
          ..............................
        }
    }
      

  3.   

    用TreeView构建树型目录(C#版) 
     
    参与了一个大型社区程序的开发,现在将相关开发经验陆续总结出来,和大家探讨一下。本节内容主要主要讨论的是用TreeView生成无限级分类的树型目录的问题,相关代码摘录自社区程序中的一个文章发布管理系统中的目录管理部分。一、数据库设计BBS_BestArticleFolder 精华区目录表
     
    Key:   FolderID
     
    Field name
     Type
     Length
     Default
     Description
     
    FolderID
     int
     4
      
     ID(自动编号)
     
    ParentFolderID
     int
     4
     0
     父目录ID
     
    FolderName
     Nvarchar
     80
      
     目录名
     
    BoardID
     int
     4
     0
     版块ID
     
    CreaterUserID
     int
     4
     0
     创建者ID
     
    AddTime
     DateTime
     8
     GetDate()
     创建时间
     二、树型目录构建过程1、安装TreeView控件,我想大多数人都是会安装的,不会安装的去找相关文章一下下。2、具体实现:a 数据生成         #region 树的数据生成事件          private DataView CreateDateView(int boardID)         {              BBSBestArticleFolderCollection bafc=new BBSBestArticleFolderCollection();              bafc.GetInfoByParentFolderID(boardID,-1);              int bafcCount=bafc.Count;              DataTable dt = new DataTable("table");              dt.Columns.Add("FolderID",System.Type.GetType("System.String"));              dt.Columns.Add("FolderName",System.Type.GetType("System.String"));              dt.Columns.Add("ParentFolderID",System.Type.GetType("System.String"));              for(int i=0;i<bafcCount;i++)              {                   DataRow dr=dt.NewRow();                   dr[0]=bafc[i].ID;                   dr[1]=bafc[i].FolderName;                   dr[2]=bafc[i].ParentFolderID;                   dt.Rows.Add(dr);              }                            dv=dt.DefaultView;              return dv;         }          #endregion一点说明:BBSBestArticleFolderCollection对象是个集合类,里面存储了所有符合条件的数据集合,GetInfoByParentFolderID是其中的一个方法,根据一定条件填充集合类的,此文主要讲TreeView构建树型目录,此处会在另外的文章中详述。 b          #region TreeView节点生成方法         private void CreateTree(TreeNodeCollection folderTreeNodeCollection ,int parentID)         {                  dv.RowFilter= "ParentFolderID="+parentID;              int tmpParentFolderID=0;              foreach(DataRowView drv in  dv)              {                   TreeNode tn=new TreeNode();                   tn.ID=drv.Row["FolderID"].ToString();                   tn.Text=drv.Row["FolderName"].ToString().Trim();                   tmpParentFolderID=Int32.Parse(drv.Row["ParentFolderID"].ToString().Trim());                   //tn.CheckBox=true;                   folderTreeNodeCollection.Add(tn);                                      CreateTree(folderTreeNodeCollection[folderTreeNodeCollection.Count - 1].Nodes,Int32.Parse(tn.ID));              }                             }一点解释:递归构建树的各级节点,其中的dv就是上一个方法生成的DataViewc  取得数据的方法有了,生节节点的方法也有了,那么剩下的就是调用了                            CreateTree(TreeView1.Nodes,0);一点解释:TreeView1是控件ID,这个大家都知道吧,这里的0其实就是表示顶级目录,从顶级目录递归调用下去DI。
     
      

  4.   

    private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if ( e.Button == System.Windows.Forms.MouseButtons.Right )
    {
     TreeNode tn = treeView1.GetNodeAt( e.X,e.Y );
    if ( tn != null )
    {
    treeView1.SelectedNode = tn;
    this.contextMenu1.Show(treeView1,new Point(e.X,e.Y ));
    }

    }
    }
      

  5.   

    根据ItemData的数据类型来判断就可以了啊!
      

  6.   

    private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
             if (e.Button == MouseButtons.Right)
    {
    TreeNode treeNode = this.treeView1.GetNodeAt(e.X, e.Y);
             if (treeNode != null)
    {
    this.treeView1.SelectedNode = treeNode;
    this.treeView1.ContextMenu = this.contextMenu1;
    }
    else
    this.treeView1.ContextMenu = null;
    }
    }
    注:不要给treeview1的ContextMenu属性附初值。
      

  7.   

    分两种
    1.设置了TreeView的ContextMenu属性
    private void treeViewCatalog_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    TreeView tv = (TreeView)sender;
    if(e.Button == MouseButtons.Right)
    {
    TreeNode tn = tv.GetNodeAt(e.X,e.Y) as TreeNode;
    if(tn!=null)
    {
    tv.SelectedNode = tn;
    //this.ctMenuTreeView.Show(tv,new Point(e.X,e.Y));
    }
    }
    }
    2,没有设置。
    加上this.ctMenuTreeView.Show(tv,new Point(e.X,e.Y));