DevExpress TreeList 拖动时中如何判断源节点作为目标节点的子节点还是兄弟节点
目的:只允许同级拖动。
两个判断:
1.原节点(假设为:S)的父级如果不等于目标节点(假设为:T)的父节点,那么发生了跨级,即非同级移动。这个判断很容易。
2.S、T是同一级的,但是S是移动到T下一级,这种情景下,移动过程中,S和T的父节点是一致的,不能判断是否跨级移动,那么怎么办判断呢?
方案1:在afterDrop事件中来判断父节点是否一致,因为移动已经完成,父节点发什么了变化,根据判断结果然后再把节点恢复回去。这种做法很low。
方案2:在移动过程中判断S被移动到T节点的位置:T节点前、T节点后、T节点下,如果是移动到T节点下,那么禁止移动即可。
下面贴出方案2判断方法:
/// <summary>
/// 获取拖动过程中的方向
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <returns></returns>
private DragInsertPosition AjustDirection(object sender, DragEventArgs e)
{
TreeListNode dragNode, targetNode;
TreeList tl = sender as TreeList;
Point p = tl.PointToClient(new Point(e.X, e.Y));
dragNode = e.Data.GetData(typeof(TreeListNode)) as TreeListNode;
TreeListHitInfo hit = tl.CalcHitInfo(p);
PropertyInfo pi = typeof(TreeList).GetProperty("Handler", BindingFlags.Instance | BindingFlags.NonPublic);
TreeListHandler handler = (TreeListHandler)pi.GetValue(tl, null);
return handler.StateData.DragInfo.DragInsertPosition; }
private void treeListNav_DragOver(object sender, DragEventArgs e)
{
TreeListNode dragNode = e.Data.GetData(typeof(TreeListNode)) as TreeListNode;
System.Diagnostics.Debug.WriteLine("Over:" + e.Effect);
TreeListNode targetNode;
Point p = treeListNav.PointToClient(MousePosition);
targetNode = treeListNav.CalcHitInfo(p).Node;
if (targetNode == null)
{
return;
}
FileContent tagParent = null;//拖动后的父级数据
if (targetNode.ParentNode != null)
{
tagParent = this.treeListNav.GetRow(targetNode.ParentNode.Id) as FileContent;
}
if (sourceParent != tagParent)//发生跨级拖动
{
// MessageHelper.ShowHit("只能在同一级拖动,移动未成功。");
e.Effect = DragDropEffects.None;
return;
} //移动到了同级子节点下
if (AjustDirection(sender, e) == DragInsertPosition.AsChild)
{
e.Effect = DragDropEffects.None;
return;
} if (e.Effect == DragDropEffects.Link)
{
// MessageHelper.ShowHit("不能移动到子集。");
e.Effect = DragDropEffects.None;
} }
这个确定移动方向的枚举:
namespace DevExpress.XtraTreeList
{
public enum DragInsertPosition
{
None = ,
AsChild = ,
Before = ,
After =
}
}
DevExpress TreeList 拖动时中如何判断源节点作为目标节点的子节点还是兄弟节点的更多相关文章
- js 获取元素所有兄弟节点实例
比如一个ul里面有10个li,而第3个li上有特殊的样式(比如颜色为红色,其他为黑色).我想把其他所有li——不包括红的li——的颜色也设为红色,此时,就需要获得红li的所有兄弟节点. 兄弟,就是和你 ...
- jQuery获取元素的兄弟节点的几种方法
$('#id').siblings() //当前元素所有的兄弟节点 $('#id').prev() //当前元素前一个兄弟节点 $('#id').prevaAll() //当前元素之前所有的兄弟节点 ...
- jQuery获取父级、兄弟节点的方法
一.jQuery的父节点查找方法 $(selector).parent(selector):获取父节点 $(selector).parentNode:以node[]的形式存放父节点,如果没有父节点,则 ...
- jquery中选取兄弟节点的方法
$('#id').siblings() 当前元素所有的兄弟节点$('#id').prev() 当前元素前一个兄弟节点$('#id').prevaAll() 当前元素之前所有的兄弟节点$('#id'). ...
- 遍历DOM树,获取所有兄弟节点
获取兄弟节点的常用方法有: 方法 说明 siblings() 选取所有兄弟节点 next() 选取后面兄弟节点 nextAll() 选取所有后面的兄弟节点 nextUntil() 选取所有 ...
- jq获取兄弟节点
$('#id').siblings() 当前元素所有的兄弟节点$('#id').prev() 当前元素前一个兄弟节点$('#id').prevaAll() 当前元素之前所有的兄弟节点$('#id'). ...
- js学习笔记15----子节点和兄弟节点的操作
1.元素.firstChild : 只读属性,第一个子节点 标准下:会包含文本类型的子节点. 非标准下:只包含元素类型子节点. 元素.firstElementChild : 只读属性,第一个元素子节点 ...
- jquery如何获取某一个兄弟节点
$('#id').siblings() 当前元素所有的兄弟节点 $('#id').prev() 当前元素前一个兄弟节点 $('#id').prevaAll() 当前元素之前所有的兄弟节点 $('#id ...
- jQuery的父,子,兄弟节点查找方法
以下罗列一下jQery下节点查找的方法: jQuery.parent(expr) 找父亲节点.能够传入expr进行过滤,比方$("span").parent()或者$(" ...
随机推荐
- 阿里云盾SSL证书即将到期怎么办?
如果你也像我一样用了一个有效期限1年的DV证书,颁发厂商:Symantec.那当这个证书快到期的时候要怎么更换证书呢?1.证书安装环境是IIS82.下载重新购买的免费证书,对新证书进行重新先发.3.证 ...
- 流程与IT管理是未来IT行业发展的必经之路
流程与IT管理是未来IT行业发展的必经之路 PM圈子 百家号17-11-2411:30 本文由“光环国际”—中国项目管理PMP培训上市企业转载 IT部门的职责之所以能够从辅助部门发展成业务支撑部门,最 ...
- 如何查找redis使用的是哪个配置文件
ps -ef|grep redis 得到了进程号 xxxx 然后 ls -l /proc/xxxx/cwd ps:可以推广到其他进程,只要有pid,就能找到配置文件
- Python交互K线工具 K线核心功能+指标切换
Python交互K线工具 K线核心功能+指标切换 aiqtt团队量化研究,用vn.py回测和研究策略.基于vnpy开源代码,刚开始接触pyqt,开发界面还是很痛苦,找了很多案例参考,但并不能完全满足我 ...
- NGUI实现滑动屏幕的时候,进行环形旋转
在滑动屏幕的时候,上图中的内容饶圆中心旋转,并且箭头的方向保持不变 每个Item上挂载的脚本: using UnityEngine; public class ItemTest : MonoBehav ...
- java mvn:安装jar包
mvn install:install-file -Dfile=fastdfs-client-java-1.27-SNAPSHOT.jar(路径) -DgroupId=org.csource -Dar ...
- GT sport赛道详解 - Dragon Trail | 龙之径
参考:GT sport所有赛道简介 今天的心情变化挺大,从绝望放弃到豁然开朗. 前言:GT sport有个排位赛,是每位sim赛车手提升自己等级的唯一途径,其中一个排位赛就是龙之径II(逆时针跑),我 ...
- APP多开教程
https://bbs.feng.com/read-htm-tid-11793134.html 本教程原创,送给有需要的人.本人就为了多开百度云盘传数据,故多开两个百度云盘,亲测一周多没毛病.微信多开 ...
- 非阻塞tcp服务器与阻塞的tcp服务器对比
一般的tcp服务器(阻塞)是使用的如下 [erlang] gen_tcp传输文件原型 http://www.cnblogs.com/bluefrog/archive/2012/09/10/267904 ...
- Python3+Flask安装使用教程
一.环境配置 当前我的开发环境是Miniconda3+PyCharm.开发环境其实无所谓,自己使用Python3+Nodepad都可以.安装Flask库: pip install Flask 二.第一 ...