
{
TreeNode myNode = null
if (e.Data.GetDataPresent(typeof (sdTreeNode)))
{
myNode = (TreeNode)(e.Data.GetData(typeof(sdTreeNode)))
}
else
{
MessageBox.Show("error")
}
Position.X = e.X
Position.Y = e.Y
Position = sdTreeView1.PointToClient(Position)
DropNode = this.sdTreeView1.GetNodeAt(Position)
if (DropNode != null)
DropNode.BackColor = TreeNodeDefaultColor
else
return
// 1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身
TreeNode node = DropNode.Parent
while(node!=null&&node.Level>=0)
{
if (node == myNode)
return
node = node.Parent
}if (DropNode != null &&DropNode.Parent != myNode &&DropNode != myNode)
{
DialogResult dr = MessageBox.Show(this,
"您确定移动此节点?", "移动提示",
MessageBoxButtons.YesNo, MessageBoxIcon.Question)
//中文
if (dr != DialogResult.Yes)
{
return
}
AfterDragNode(myNode, DropNode)
myNode.ExpandAll()
TreeNode DragNode = myNode
// 将被拖拽节点从原来位置删除。
myNode.Remove()
// 在目标节点下增加被拖拽节点
DropNode.Nodes.Add(DragNode)
}
// 如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下
if (DropNode == null)
{
DialogResult dr = MessageBox.Show(this,
"您确定移动此节点?", "移动提示",
MessageBoxButtons.YesNo, MessageBoxIcon.Question)
//中文
if (dr != DialogResult.Yes)
{
return
}
AfterDragNode(myNode, DropNode)
myNode.ExpandAll()
TreeNode DragNode = myNode
myNode.Remove()
sdTreeView1.Nodes.Add(DragNode)
}
}private void sdTreeView1_DragOver(object sender,DragEventArgs e)
{
try
{
sdTreeView1.SelectChangeColor = false
sdTreeView1.SelectedNode = null
if (DropNode != null)
DropNode.BackColor = TreeNodeDefaultColor
Position.X = e.X
Position.Y = e.Y
Position = sdTreeView1.PointToClient(Position)
DropNode = this.sdTreeView1.GetNodeAt(Position)
DropNode.BackColor = Color.HotPink
}
finally
{
sdTreeView1.SelectChangeColor = true
}
}private void sdTreeView1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(sdTreeNode)))
e.Effect = DragDropEffects.Move
else
e.Effect = DragDropEffects.None /*
Position.X = e.X
Position.Y = e.Y
Position = sdTreeView1.PointToClient(Position)
DropNode = this.sdTreeView1.GetNodeAt(Position)
DropNode.BackColor = Color.IndianRed*/
}
树节点拖拽的好处是使用户更方便地修改脚本。TreeView支持拖拽,用户可以把任意一个节点拖拽到他想要的地方,从而达到修改脚本的目的,用户可以右键单击节点,进行修改或删除当前函数参数属性增加函数等 *** 作,通过TreeView能够增加LoadRunner提供的部分常用通用函数和协议相关函数。
树节点拖拽的特点
TTreeView是VCL里面一个类,也是我们经常会用到的,而且功能也是很强大的,首先要实现OnMouseDown,在其内要写入开启拖动的代码,然后要实现OnDragOver,其主要作用是在拖动过程中,实现对节点拖动目的di的控制,最后要实现OnDragDrop,其是实现拖动释放的 *** 作。
你试一下,新建一个项目,加一个TreeView控件,应该可以运行:using System
using System.Collections.Generic
using System.ComponentModel
using System.Data
using System.Drawing
using System.Text
using System.Windows.Forms
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent()
}
private void Form1_Load(object sender, EventArgs e)
{//添加树形视图子节点
this.treeView1.Nodes.AddRange(new TreeNode[] {
new TreeNode("中国直辖市", new TreeNode[] {
new TreeNode("北京市", new TreeNode[] {
new TreeNode("东城区"), new TreeNode("西城区"),new TreeNode("朝阳区")}),
new TreeNode("上海市", new TreeNode[] {new TreeNode("长宁区"),
new TreeNode("黄埔区"), new TreeNode("浦东区")}),
new TreeNode("重庆市", new TreeNode[] {
new TreeNode("长寿区", new TreeNode[] {new TreeNode("云台镇"),
new TreeNode("凤城镇", new TreeNode[] )}),
new TreeNode("渝北区"),new TreeNode("北碚区")})})})
this.treeView1.AllowDrop = true
this.treeView1.ExpandAll()
}
private void treeView1_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{ //处理 treeView1控件ItemDrag事件
//设置拖放类型为移动
DoDragDrop(e.Item, DragDropEffects.Move)
}
private void treeView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{//处理 treeView1控件DragEnter事件
//获取节点的数据内容
object MyData = e.Data.GetData(typeof(TreeNode))
//如果节点有数据,拖放目标允许移动
if (MyData != null)
{
e.Effect = DragDropEffects.Move
}
else
{
e.Effect = DragDropEffects.None
}
TreeView MyTreeView = (TreeView)sender
TreeNode MyNode = MyTreeView.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)))
if (MyNode != null)
{ //改变进入节点的背景色
MyNode.BackColor = Color.Blue
//保存此节点,进入下一个时还原背景色
MyOldNode = MyNode
}
}
private void treeView1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{//处理 treeView1控件DragOver事件
//修改鼠标进入节点的背景色,还原上一个节点的背景色
TreeView MyTreeView = (TreeView)sender
TreeNode MyNode = MyTreeView.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)))
if ((MyNode != null) &&(MyNode != MyOldNode))
{
MyOldNode.BackColor = Color.White
MyNode.BackColor = Color.Blue
MyOldNode = MyNode
}
}
private void treeView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{//处理 treeView1控件DragDrop事件
TreeNode MyNode = (TreeNode)e.Data.GetData(typeof(TreeNode))
TreeView MyTreeView = (TreeView)sender
//得到当前鼠标进入的节点
TreeNode MyTargetNode = MyTreeView.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)))
if (MyTargetNode != null)
{
TreeNode MyTargetParent = MyTargetNode.Parent
//删除拖放的节点
MyNode.Remove()
//添加到目标节点
MyTargetNode.Nodes.Add(MyNode)
MyTargetNode.BackColor = Color.White
MyTreeView.SelectedNode = MyTargetNode
}
}
//保存前一个鼠标进入的节点
private TreeNode MyOldNode
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)