您的位置:首页 > 其它

winform Treeview设置右键点击的节点

2015-11-25 15:15 459 查看
(1)要向窗体添加一个TreeView控件

(2)再添加一个ContextMenuStrip控件;

(3)就要给TreeView添加一个MouseDown事件,代码如下:

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)//判断你点的是不是一个节点

...{

switch (CurrentNode.Name)//根据不同节点显示不同的右键菜单,当然你可以让它显示一样的菜单

...{

case "errorUrl":

CurrentNode.ContextMenuStrip = contextMenuStripErrorUrl;

break;

}

treeView1.SelectedNode = CurrentNode;//选中这个节点

}

}

}

----------------------------------------------------------------------------------

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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: