对treeview节点的复制,粘贴和出现右击菜单

这篇博客介绍了如何在Windows应用程序中为TreeView控件添加右击菜单,实现节点的复制和粘贴功能。通过创建事件处理程序和自定义方法,允许用户在树形视图中右击节点,实现灵活的数据操作,提高用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在写项目的时候,我们都会在按钮上去实现一些添加,修改等等的操作,有时候复制,粘贴等大部门都是用按钮的形式,如果是右击往往这样会让用户感觉到软件的灵活性,因为用户在使用操作系统的时候都习惯了右击对数据进行复制,粘贴等操作,所有在树形节点上除了用按钮的形式实现复制,粘贴等功能外,我想菜单上也能够实现的话,会非常的好,能够给用户很好的体验。
实现粘贴功能代码如下:
/// <summary>
/// 实现粘贴的功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void barButtonItem粘贴_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
//如果没有复制
if (this.copyNode == null)
{
return;
}
//如果目标节点为空或目标节点在外面
if (this.treeView1.SelectedNode == null || this.treeView1.SelectedNode == this.treeView1.Nodes[0])
{
MessageBox.Show("不能粘贴在所有部门以外", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//如果目标节点是自己或自己的子节点
if (this.treeView1.SelectedNode == this.copyNode || !IsNode(copyNode))
{
MessageBox.Show("不能粘贴在自己及自己的子节点上", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//添加节点
AddNode(this.treeView1.SelectedNode, this.copyNode);
//刷新
CreateTree(this.treeView2, "All");
}
/// <summary>
/// 粘贴子接点
/// </summary>
/// <param name="sNode"></param>
/// <param name="cNode"></param>
public void AddNode(TreeNode sNode, TreeNode cNode)
{
//取出当前节点的编号
int mId = ((TreeNodeClass)sNode.Tag).ID;
//连接数据库
SqlConnection sqlConn = new SqlConnection(sqlConnectionBuilder.ConnectionString);
SqlCommand comm = sqlConn.CreateCommand();
sqlConn.Open();
try
{
//执行插入语句
comm.CommandText = " INSERT INTO 人事部门信息(名称,父编号,停止,单位编号) VALUES('" + cNode.Text + "'," + mId + ",0,@单位编号); SELECT @@IDENTITY";
//以下为了防止sql语句攻击,较安全
comm.Parameters.Add("@单位编号", SqlDbType.Int);
comm.Parameters["@单位编号"].Value = ((TreeNodeClass)sNode.Tag).bh;
//获取目标节点的编号
int copyId = int.Parse(comm.ExecuteScalar().ToString());
//执行更改语句
comm.CommandText = " UPDATE 人事部门信息 SET 顺序号 = 编号 WHERE 编号 = " + copyId;
comm.ExecuteNonQuery();
//创建类实例
TreeNodeClass tag = new TreeNodeClass();
//为类的属性赋值
tag.ID = copyId;
tag.Text = cNode.Text;
tag.Type = "名称";
tag.bh = ((TreeNodeClass)sNode.Tag).bh;
//取出要复制的节点值
TreeNode node = new TreeNode(cNode.Text);
//设置图标索引
node.ImageIndex = 1;
node.SelectedImageIndex = 1;
node.Tag = tag;
//添加新的节点
sNode.Nodes.Add(node);
//如果要复制的数量小于1
if (cNode.Nodes.Count < 1)
{
return;
}
//依次添加
for (int i = 0; i < cNode.Nodes.Count; i++)
{
AddNode(node, cNode.Nodes[i]);
}
}
catch (System.Exception e)
{
MessageBox.Show(e.Message);
}
finally
{
//关闭数据库资源
close(comm,sqlConn);
}

}
实现复制的功能:
/// <summary>
/// 实现复制的功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void barButtonItem复制_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
// 如果没有选中节点或没有父节点
if (this.treeView1.SelectedNode == null || this.treeView1.SelectedNode.Parent == null)
{
MessageBox.Show("根节点不能复制", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//把当前节点的信息赋值给一个节点
this.copyNode = this.treeView1.SelectedNode;
}
上面就完成了在树节点上对数据的复制,粘贴了,然后我们在实现右击功能,把上面的功能添加到事件中去:
/// <summary>
/// 右击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 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)
{
//如果是节点,就出现右击菜单
CurrentNode.ContextMenuStrip = contextMenuStrip右击菜单;

}
//选中这个节点
treeView1.SelectedNode = CurrentNode;
}
}
/// <summary>
/// 右击粘贴事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e)
{
barButtonItem粘贴.PerformClick();
}
/// <summary>
/// 右击复制事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 复制ToolStripMenuItem_Click(object sender, EventArgs e)
{
barButtonItem复制.PerformClick();
}
这样程序就更加的完美了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值