在写项目的时候,我们都会在按钮上去实现一些添加,修改等等的操作,有时候复制,粘贴等大部门都是用按钮的形式,如果是右击往往这样会让用户感觉到软件的灵活性,因为用户在使用操作系统的时候都习惯了右击对数据进行复制,粘贴等操作,所有在树形节点上除了用按钮的形式实现复制,粘贴等功能外,我想菜单上也能够实现的话,会非常的好,能够给用户很好的体验。
实现粘贴功能代码如下:
/// <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();
}
这样程序就更加的完美了
分享到:
相关推荐
总之,通过结合`TreeView`控件和`ContextMenuStrip`,我们可以创建一个功能丰富的C#应用,允许用户通过右键菜单方便地编辑、添加、删除和复制/粘贴树节点。这不仅提高了用户体验,也为数据操作提供了直观的界面。
首先,要实现树形菜单的剪切和复制功能,我们需要利用`TreeView`控件的事件系统。`TreeView`控件有两个关键的事件:`MouseDown`和`MouseUp`,它们分别在鼠标按钮按下和释放时触发,这为我们提供了实现选择和操作节点...
综上所述,通过结合`TreeView`控件、右键菜单、`ContextMenuStrip`和`TreeNode`对象的操作,我们可以实现一个功能完善的C# Windows窗体应用,允许用户方便地对`TreeView`中的节点进行编辑和创建。
本篇文章将深入探讨如何在VB.NET中进行TreeView节点的添加和删除操作。 一、添加节点 1. 创建基本节点:在VB.NET中,可以使用TreeNode类来创建一个新节点。例如,以下代码创建了一个名为"根节点"的基本节点: ```...
在本教程中,我们将深入探讨如何利用C#来实现`TreeView`控件的功能,特别是节点的拖放操作和右键菜单功能,以及如何遍历`TreeView`的节点。 ### 一、节点拖放操作 1. **启用拖放功能**:首先,你需要启用`TreeView...
2. **删除节点**:在Delphi中,可以使用`TreeView1.Items`集合来访问和操作所有节点。删除单个节点通常使用`Delete`方法,例如`TreeView1.Items[index].Delete`,这里的`index`是目标节点的索引。但是,这只会删除...
标题"vb_Treeview节点上下左右移动.rar_VB树节点功能_adventurehpj_vb treeview_vb tree"暗示了这个压缩包包含的是一个VB应用程序,它实现了对Treeview控件节点的动态操作,如移动、添加和删除。这些功能对于创建...
C# treeView节点动态删除和添加示例,本源码演示了创建一个treeView父节点,创建了三个子节点,然后演示了将这3个子节点添加到父节点中,最后演示了使用Remove方法移除指定的TreeView节点项,添加节点和删除节点定义...
通常,TreeView控件的节点支持两种选择状态:选中(Checked)和未选中(Unchecked)。然而,有时候开发者可能需要更复杂的交互,比如实现一种半选(Partially Checked)状态,尤其是在处理具有子节点的树形结构时。...
在Windows应用程序开发中,树形控件(TreeView)是一种常用的数据...在实际项目中,可以根据需求添加更多自定义的功能,比如节点的编辑、复制、粘贴等。记住,良好的用户界面设计能够显著提升用户的操作效率和满意度。
本项目实现了`TreeView`节点的拖放(Drag and Drop)功能,这对于用户交互和数据操作非常实用。以下是对这个实现的详细解析: 1. **C#编程语言**: 这个实现是用C#编写的,C#是.NET Framework的主要编程语言,提供...
通过理解和实现上述步骤,开发者可以创建一个允许用户自由调整`TreeView`节点顺序的动态WPF应用,从而提高用户交互性和应用的易用性。在实际开发过程中,可能还需要根据具体需求进行调整和优化,以满足特定的业务...
有时,为了满足特定的界面设计需求,我们需要自定义`TreeView`节点的外观,比如改变节点的颜色、字体、图标等。本篇文章将深入探讨如何在C#中实现`TreeView`节点的自定义绘制。 首先,要实现自定义绘制,我们需要...
winform保持TreeView节点展开和折叠的状态 只需调用两个方法即可非常方面
本实例源码着重讲解如何利用VB来实现Treeview控件的节点拖动、增加与删除功能。下面将详细介绍这三个关键操作的具体实现。 一、Treeview节点拖动 拖动节点是提升用户交互体验的重要特性。在VB中,我们需要使用...
在本文中,我们将深入探讨如何在Winform应用中有效地利用Treeview控件,特别是在与数据库交互时动态添加、修改和管理节点。 1. **动态添加节点** 当你需要从数据库中获取数据并展示在Treeview上时,首先需要连接到...
详细介绍了js获取asp.net treeview 控件点击节点的值。点击treeview节点不提交网页
本实例主要关注`TreeView`控件的节点操作,包括拖动、增加和删除节点。下面将详细阐述这些功能的实现方法。 一、拖动节点 在`TreeView`控件中,拖放操作可以通过响应`MouseDown`、`MouseMove`和`MouseUp`事件来实现...
在实际应用中,我们经常需要对TreeView的节点进行交互性操作,如改变节点的背景色来突出显示当前选中的节点。本文将深入探讨如何使用JavaScript来实现“treeview节点选中后添加背景色”,以及在鼠标移开后仍然保持...
本教程将深入探讨如何实现TreeView节点的拖动效果,使用户能够将A节点拖动到B节点下,从而让A节点成为B节点的子节点。 首先,我们需要开启TreeView控件的拖放功能。在代码中,可以通过设置`AllowDrop`属性为`true`...