首先在Form上添加右鍵菜單,ConTextMenuStrip設置好菜單的右鍵彈出項的名字,之后在Treeview設置MouceDown事件,判斷是不是右鍵點擊,是的話,在判斷是不是選中節點,都滿足彈出右鍵選擇菜單。
我的TreeView因為需要設置成的只能有一個節點被選中。
代碼如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); InitTree(); } private void InitTree() { TreeNode node = new TreeNode("base1"); TreeNode node2 = new TreeNode("base2"); treeView1.Nodes.Add(node); treeView1.Nodes.Add(node2); node.Nodes.Add("a"); node.Nodes.Add("b"); node.Nodes.Add("c"); node2.Nodes.Add("d"); node2.Nodes.Add("e"); node2.Nodes.Add("f"); } //設置樹單選,就是只能有一個樹節點被選中 private void SetNodeCheckStatus(TreeNode tn, TreeNode node) { if (tn == null) return; if (tn != node) { tn.Checked = false; } // Check children nodes foreach (TreeNode tnChild in tn.Nodes) { if (tnChild != node) { tnChild.Checked = false; } SetNodeCheckStatus(tnChild, node); } } //在樹節點被選中后觸發 private void treeView1_AfterCheacked(object sender, TreeViewEventArgs e) { //過濾不是鼠標選中的其它事件,防止死循環 if (e.Action != TreeViewAction.Unknown) { //Event call by mouse or key-press foreach (TreeNode tnChild in treeView1.Nodes) SetNodeCheckStatus(tnChild, e.Node); string sName = e.Node.Text; } } //獲得選擇節點 private void GetSelectNode(TreeNode tn) { if (tn == null) return; if (tn.Checked == true) { m_NodeName = tn.Text; return; } // Check children nodes foreach (TreeNode tnChild in tn.Nodes) { GetSelectNode(tnChild); } } private void button1_Click(object sender, EventArgs e) { TreeNode node = null; foreach (TreeNode tnChild in treeView1.Nodes) { GetSelectNode(tnChild); } string sName = m_NodeName; } //選擇樹的節點并點擊右鍵,觸發事件 private void treeView1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right)//判斷你點的是不是右鍵 { Point ClickPoint = new Point(e.X, e.Y); TreeNode CurrentNode = treeView1.GetNodeAt(ClickPoint); if (CurrentNode != null && true == CurrentNode.Checked)//判斷你點的是不是一個節點 { switch (CurrentNode.Name)//根據不同節點顯示不同的右鍵菜單,當然你可以讓它顯示一樣的菜單 { case "": CurrentNode.ContextMenuStrip = contextMenuStrip1; break; default: break; } treeView1.SelectedNode = CurrentNode;//選中這個節點 } } } private String m_NodeName = null; //右鍵設置節點可以重命名 private void toolStripMenuItem2_Click(object sender, EventArgs e) { //窗體的LabelEdir為false,因此每次要BeginEdit時都要先自LabelEdit為true treeView1.LabelEdit = true; treeView1.SelectedNode.BeginEdit(); } //右鍵添加節點 private void toolStripMenuItem1_Click(object sender, EventArgs e) { //在Tree選擇節點的同一級添加節點 treeView1.LabelEdit = true; TreeNode CurrentNode = treeView1.SelectedNode.Nodes.Add("Node1"); //更新選擇節點 treeView1.SelectedNode.Checked = false; CurrentNode.Checked = true; //使添加的樹節點處于可編輯的狀態 CurrentNode.BeginEdit(); } //右鍵刪除節點 private void toolStripMenuItem3_Click(object sender, EventArgs e) { treeView1.SelectedNode.Remove(); } } }
結果如圖:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。