快捷搜索:

拖动时中如何判断源节点作为目标节点的子节点

日期:2019-09-17编辑作者:二战前线

多少个决断:

/// <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;
            }


        }

方案2:在移动进程中剖断S被挪动到T节点的岗位:T节点前、T节点后、T节点下,假若是活动到T节点下,那么禁止移动就可以。

 

1.原节点(倘使为:S)的父级即便不等于目的节点(假如为:T)的父节点,那么产生了跨级,即非同级移动。那么些论断很轻易。

方案1:在afterDrop事件中来判定父节点是不是一样,因为移动已经实现,父节点发什么了变动,依据决断结果然后再把节点苏醒回去。这种做法很low。

2.S、T是同拔尖的,可是S是运动到T下超级,这种气象下,移动进度中,S和T的父节点是一模一样的,不能够确定是还是不是跨级移动,那么咋做推断呢?

其一鲜明移动方向的枚举:

指标:只允许同级拖动。

下边贴出方案2判别方法:

 

 

namespace DevExpress.XtraTreeList
{
    public enum DragInsertPosition
    {
        None = 0,
        AsChild = 1,
        Before = 2,
        After = 3
    }
}

本文由澳门新普京发布于二战前线,转载请注明出处:拖动时中如何判断源节点作为目标节点的子节点

关键词:

百度统计的JS脚本原理分析

伸手一段js脚本。 加载完成时候出发一回呼吁,并传递参数 退出页面时候,发出三回呼吁,并传递参数,与地点相比...

详细>>

跨平台的

   发起的.NETCore开源组织号召,进展的速度是我自己也没有想到的,很多园友都积极参与(虽然有些人诚心砸场子,...

详细>>

如何看待唐家三少的自传体爱情小说

所以好奇这部剧的,可以看看,其实这部剧的细节再好好打磨一下,说不定可以有中国版《请回答1988》的感觉。 三、...

详细>>

能称为作家的却很少

问题: 第四个“中中原人民共和国互联网小说家村”授牌典礼在辽宁省马那瓜市举办,知名网络作家唐家三少受聘成...

详细>>