找回密码
 立即注册

QQ登录

只需一步,快速开始

ffff666666

注册会员

5

主题

11

帖子

167

积分

注册会员

积分
167
ffff666666
注册会员   /  发表于:2018-11-30 17:30  /   查看:2708  /  回复:1
本帖最后由 ffff666666 于 2018-11-30 17:49 编辑
  1. namespace DragAndDrop
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         public Form1()
  6.         {
  7.             InitializeComponent();
  8.             c1TreeView1.AllowDrop = true;
  9.             c1TreeView2.AllowDrop = true;
  10.             c1TreeView1.EnableDragDrop = true;
  11.             c1TreeView2.EnableDragDrop = true;
  12.             c1TreeView1.ItemDrag += C1TreeView_ItemDrag;
  13.             c1TreeView2.ItemDrag += C1TreeView_ItemDrag;
  14.             c1TreeView1.DragEnter += C1TreeView_DragEnter;
  15.             c1TreeView2.DragEnter += C1TreeView_DragEnter;
  16.             c1TreeView1.DragDrop += C1TreeView_DragDrop;
  17.             c1TreeView2.DragDrop += C1TreeView_DragDrop;
  18.         }

  19.         private C1TreeNode oldTN;

  20.         private void C1TreeView_DragDrop(object sender, DragEventArgs e)
  21.         {
  22.             //第三步

  23.             var treeView = (C1TreeView)sender;

  24.             // get dropped data
  25.             var distanceNodes = (C1TreeNode[])e.Data.GetData(typeof(C1TreeNode[]));
  26.             var distanceNode = distanceNodes[0];

  27.             var pos = (DragDropPosition)e.Data.GetData(typeof(DragDropPosition));

  28.             if (pos == DragDropPosition.Inner)
  29.             {
  30.                
  31.                 distanceNode.ParentCollection.Remove(distanceNode);
  32.                 treeView.Nodes.Add(oldTN);
  33.                 MessageBox.Show("no");               
  34.                 return;
  35.             }

  36.         }

  37.         private void C1TreeView_DragEnter(object sender, DragEventArgs e)
  38.         {
  39.             //第二步
  40.             e.Effect = DragDropEffects.Move;

  41.             //获取拖动之前的节点
  42.             var distanceNodes = (C1TreeNode[])e.Data.GetData(typeof(C1TreeNode[]));
  43.             oldTN = distanceNodes[0];
  44.         }

  45.         private void C1TreeView_ItemDrag(object sender, C1.Win.TreeView.C1TreeViewItemDragEventArgs e)
  46.         {
  47.             //第一步
  48.             DoDragDrop(e.DraggedData, DragDropEffects.Move);
  49.         }

  50.         private void Form1_Load(object sender, EventArgs e)
  51.         {
  52.             for (int i = 0; i < 5; i++)
  53.             {
  54.                 c1TreeView1.Nodes.Add("Node" + i);
  55.                 c1TreeView2.Nodes.Add("Node" + i * 100);
  56.                 for (int j = 0; j < 5; j++)
  57.                 {
  58.                     c1TreeView1.Nodes[i].Nodes.Add("Node" + (i * 10 + j));
  59.                     c1TreeView2.Nodes[i].Nodes.Add("Node" + (i * 100 + j));
  60.                 }
  61.             }
  62.         }
  63.     }
  64. }
复制代码


如上面的代码,借用treeview的DragAndDrop的示例;如果是这样inner拖动的,就需要把移动过去的删掉,然后再在tree后面新增一个新的,通过这种方式来禁止往子节点的拖动,有没有简单的方法呢?

评分

参与人数 1金币 +500 收起 理由
JeffryLI + 500 很给力!

查看全部评分

1 个回复

倒序浏览
JeffryLI
葡萄城公司职员   /  发表于:2018-12-3 12:06:59
沙发
没有,您的这个方式就是我之前的给您的思路
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部