问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

webform的treeview怎么实现节点拖拽

发布网友 发布时间:2022-05-09 14:04

我来回答

2个回答

热心网友 时间:2023-12-24 19:02

private void sdTreeView1_DragDrop(object sender, DragEventArgs e)
{
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;*/
}

热心网友 时间:2023-12-24 19:03

需要定义treeview控件的几个事件,并且AllowDrop属性必须设置为true。

需要定义DragDrop、DragLeave、DragOver和DragEnter事件
还可以订阅GiveFeedBack 和QueryContinueDrag事件。

具体的拖放逻辑可以参考1楼的实现代码。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 我是女特殊工种2018年退休社保交够15年了医保只有3年.最低医保该交几年,可以享受终身医保 asp.net mvc 中怎么像webform一样自定义一个BaseController实现判断用... asp.net中使用listview,怎么实现根据条件改变行显示颜色?是在webform中! winform和webform一般用什么方式实现打印 webform(c#) 如何在datagrid里实现类似winform里的效果 asp.net,学mvc可以不看webform吗 WebForm和WinForm同在服务端,如何通讯、交换数据、传参数。 webform如何实现像MVC一样可以前台后台一起验证表单的功能? 现在webform处理ajax请求用一般处理程序ashx还是用后台去处理 三亚8月适合去三亚吗 8月份去三亚玩怎么样 八月份去三亚旅游会不会太热? 8月份可以去三亚合适吗 OPPO和VIVO分别是哪个国家出厂的? “李福琳”这个名字的寓意 请帮我起一个网名!我的名字有一个志字,希望可以放进网名里,谐音亦可 王焮琳的名字+含义 邹振琳含义是什么 张世琳这个名字好不好 oppo和vivo是哪个国家的品牌? 有关网站UI实现的几种方式的讨论 C# webform 求助,怎么实现点击下图中长方形的菜单展开,而不是圆形的三角号开展 到退休才买18年的医疗保险,要补多少年? 2018年退休时一次*10年医疗保险2020年怎么一次*纳25年医疗保险呢? 男45岁。18年退职。医保交了18年。问还得交几年? 2018年3月退休,满15年养老保险,9年医保,需要一次性补缴多少钱? 安庆市06年参加职工医保18年退休需要交多少年 退休时医保年限己满为什么每年还要交 浙江嘉兴平湖市96年参加工作现退休医保18年要补交到25年吗? 快速跳绳会让小腿变粗么,那怎么跳才能不让它变粗 怎么跳绳不使小腿变粗 跳绳之后做什么运动可以不使小腿变粗 跳绳真的会不会让小腿变粗哦? 急啊急啊···跳绳会让小腿变粗么?跳绳后怎么做不会让小腿变粗啊···· 经常跳绳会不会使小腿变硬变的更粗呢?怎么样才能使小腿变细呢? 烛之武退秦师全文改写800 把《烛之武退秦师》改写成小说,谢谢。 烛之武退秦师扩写600字 改写烛之武退秦师 扩写烛之武退秦师