C# TreeView树节点上下移动

摘要:
");this.Focus();return;}foldermodel=newfolder();TreeNodenode=Tv_tree.SelectedNode;//选中的节点model.folderId=node.Tag.ToString();model.TheOrder=node.Name.ToString();if//下一个节点为Null时返回{return;}folderdownModel=newfolder();TreeNodedowNode=node.NextNode;downModel.folderId=dowNode.Tag.ToString();downModel.TheOrder=dowNode.Name;boolflag=folderOperation.MoveUp;if{stringtheOrder=node.Name;node.Name=dowNode.Name;dowNode.Name=theOrder;TreeNodenewNode=dowNode.Clone();//克隆下一个节点及其所有的子节点if{Tv_tree.Nodes.Insert;//在原节点的位置插入下一个节点的值}else{node.Parent.Nodes.Insert;}dowNode.Remove();//删除掉选中节点的下一个节点Tv_tree.SelectedNode=node;//重新选中}else{return;}}stringsql=string.Format;stringsql1=string.Format;//////节点的展开和折叠/////////privatevoidtvDocInfo_AfterExpand{if{TreeViewtree=sender;tree.AfterCheck-=newTreeViewEventHandler;//折叠其他同级节点TreeNodeparentNode=e.Node.Parent;if(parentNode!=e.Node)tn.Collapse();}}}}节点拖拽,必须设置TreeView的AllowDrop属性为True;[csharp]viewplaincopyprint?
  1. ///<summary>
  2. ///上移
  3. ///</summary>
  4. ///<paramname="sender"></param>
  5. ///<paramname="e"></param>
  6. privatevoidtsbMoveUp_Click(objectsender,EventArgse)
  7. {
  8. if(Tv_tree.SelectedNode==null)
  9. {
  10. MessageBox.Show("请选择需要移动的的节点!");
  11. this.Focus();
  12. return;
  13. }
  14. foldermodel=newfolder();
  15. TreeNodenode=Tv_tree.SelectedNode;//获得选中节点的值
  16. model.folderId=node.Tag.ToString();
  17. model.TheOrder=node.Name.ToString();
  18. if(node.PrevNode==null)//选中节点的上一个节点为Null则返回
  19. {
  20. return;
  21. }
  22. folderupModel=newfolder();
  23. TreeNodeupNode=node.PrevNode;//获得选中节点的上一个节点
  24. upModel.folderId=upNode.Tag.ToString();
  25. upModel.TheOrder=upNode.Name;
  26. boolflag=folderOperation.MoveUp(model,upModel);//将两个节点的排序编号互换
  27. if(flag)//如果执行成功
  28. {
  29. stringtheOrder=node.Name;
  30. node.Name=upNode.Name;
  31. upNode.Name=theOrder;
  32. TreeNodenewNode=(TreeNode)node.Clone();//克隆选中的节点
  33. if(node.Parent==null)
  34. {
  35. Tv_tree.Nodes.Insert(upNode.Index,newNode);//在选中节点的上一个节点的地方插入本节点
  36. }
  37. else
  38. {
  39. node.Parent.Nodes.Insert(upNode.Index,newNode);
  40. }
  41. node.Remove();
  42. Tv_tree.SelectedNode=newNode;
  43. }
  44. else
  45. {
  46. return;
  47. }
  48. }
  49. ///<summary>
  50. ///下移
  51. ///</summary>
  52. ///<paramname="sender"></param>
  53. ///<paramname="e"></param>
  54. privatevoidtsbMoveDown_Click(objectsender,EventArgse)
  55. {
  56. if(Tv_tree.SelectedNode==null)
  57. {
  58. MessageBox.Show("请选择需要移动的的节点!");
  59. this.Focus();
  60. return;
  61. }
  62. foldermodel=newfolder();
  63. TreeNodenode=Tv_tree.SelectedNode;//选中的节点
  64. model.folderId=node.Tag.ToString();
  65. model.TheOrder=node.Name.ToString();
  66. if(node.NextNode==null)//下一个节点为Null时返回
  67. {
  68. return;
  69. }
  70. folderdownModel=newfolder();
  71. TreeNodedowNode=node.NextNode;
  72. downModel.folderId=dowNode.Tag.ToString();
  73. downModel.TheOrder=dowNode.Name;
  74. boolflag=folderOperation.MoveUp(model,downModel);
  75. if(flag)
  76. {
  77. stringtheOrder=node.Name;
  78. node.Name=dowNode.Name;
  79. dowNode.Name=theOrder;
  80. TreeNodenewNode=(TreeNode)dowNode.Clone();//克隆下一个节点及其所有的子节点
  81. if(node.Parent==null)
  82. {
  83. Tv_tree.Nodes.Insert(node.Index,newNode);//在原节点的位置插入下一个节点的值
  84. }
  85. else
  86. {
  87. node.Parent.Nodes.Insert(node.Index,newNode);
  88. }
  89. dowNode.Remove();//删除掉选中节点的下一个节点
  90. Tv_tree.SelectedNode=node;//重新选中
  91. }
  92. else
  93. {
  94. return;
  95. }
  96. }
  97. stringsql=string.Format("updatefoldersettheorder='{0}'wherefolderid='{1}'",model.TheOrder,upModel.folderId);
  98. stringsql1=string.Format("updatefoldersettheorder='{0}'wherefolderid='{1}'",upModel.TheOrder,model.folderId);
  1. ///<summary>
  2. ///节点的展开和折叠
  3. ///</summary>
  4. ///<paramname="sender"></param>
  5. ///<paramname="e"></param>
  6. privatevoidtvDocInfo_AfterExpand(objectsender,TreeViewEventArgse)
  7. {
  8. if(e.Node.Parent==null)
  9. {
  10. TreeViewtree=(TreeView)sender;
  11. tree.AfterCheck-=newTreeViewEventHandler(this.tvDocInfo_AfterExpand);
  12. //折叠其他同级节点
  13. TreeNodeparentNode=e.Node.Parent;
  14. if(parentNode!=null)
  15. {
  16. foreach(TreeNodetninparentNode.Nodes)
  17. {
  18. if(tn!=e.Node)
  19. tn.Collapse();
  20. }
  21. }
  22. else
  23. {
  24. foreach(TreeNodetnintree.Nodes)
  25. {
  26. if(tn!=e.Node)
  27. tn.Collapse();
  28. }
  29. }
  30. }
  31. }

节点拖拽,必须设置TreeView的AllowDrop属性为True;

    1. privatePointPosition=newPoint(0,0);
    2. privatevoidtreeView1_ItemDrag(objectsender,ItemDragEventArgse)
    3. {
    4. DoDragDrop(e.Item,DragDropEffects.Move);
    5. }
    6. privatevoidtreeView1_DragEnter(objectsender,DragEventArgse)
    7. {
    8. if(e.Data.GetDataPresent(typeof(TreeNode)))
    9. e.Effect=DragDropEffects.Move;
    10. else
    11. e.Effect=DragDropEffects.None;
    12. }
    13. privatevoidtreeView1_DragDrop(objectsender,DragEventArgse)
    14. {
    15. TreeNodemyNode=null;
    16. if(e.Data.GetDataPresent(typeof(TreeNode)))
    17. {
    18. myNode=(TreeNode)(e.Data.GetData(typeof(TreeNode)));
    19. }
    20. else
    21. {
    22. MessageBox.Show("error");
    23. }
    24. Position.X=e.X;
    25. Position.Y=e.Y;
    26. Position=tvType.PointToClient(Position);
    27. TreeNodeDropNode=this.tvType.GetNodeAt(Position);
    28. if(FunctionsUI.CreateQuestionDialog("是否要将"+myNode.Text+"移动"+DropNode.Text+"类别下?")==DialogResult.OK)
    29. {
    30. //1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身
    31. if(DropNode!=null&&DropNode.Parent!=myNode&&DropNode!=myNode)
    32. {
    33. TreeNodeDragNode=myNode;
    34. //将被拖拽节点从原来位置删除。
    35. myNode.Remove();
    36. //在目标节点下增加被拖拽节点
    37. DropNode.Nodes.Add(DragNode);
    38. }
    39. //如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下
    40. if(DropNode==null)
    41. {
    42. TreeNodeDragNode=myNode;
    43. myNode.Remove();
    44. tvType.Nodes.Add(DragNode);
    45. }
    46. }
    47. }

免责声明:文章转载自《C# TreeView树节点上下移动》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Docker学习笔记二:Docker设置镜像源MySQL分区下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)C# WinForm开发系列 TreeView

包含异步加载树,带拖动,多选,动画效果等控件(文章及相关代码搜集自网络,仅供参考学习,版权属于原作者! ). 1.我的资源管理器 2.支持Animation效果的树控件 翻译Stu-Smith著Customizable Tree Control with Animation Supportivanx译 For MSPROJECT.CN 简介本文实现一个全定...

WPF中TreeView控件的使用案例

WPF总体来说还是比较方便的,其中变化最大的主要是Listview和Treeview控件,而且TreeView似乎在WPF是一个备受指责的控件,很多人说他不好用。我这个demo主要是在wpf中使用TreeView控件实现图片查看功能,简单的Grid布局、TreeView控件添加图标、TreeView控件的一些事件、显示统计、还有就是读取文件操作。 效果图:...

C#实现树型结构TreeView节点拖拽的简单功能(转)

本文摘抄博客园里面的牛人吉日嘎啦。http://www.cnblogs.com/jirigala 例子程序运行效果如何下:   当然在节点拖拽时,需要注意几个事情: 1:拖拽时总需要有提示信息比较好,防止误操作后找不到被托摘到哪里去了。 2:父亲节点总不能拖拽到自己的子节点上,那不是死循环或者乱了辈份了不是? 为了让TreeView支持拖拽功能,需要注意...

通过键盘方向键控制TreeView节点的移动

本文转载:http://dengzebo.blog.163.com/blog/static/18867406201032141932204/ View Code #region"控制树节点移动,向左右下上"///<summary>///通过Ctrl+键盘移动选定的树节点///</summary>///<paramname=...

C# TreeView 建立、遍历树(递归)

刚接触treeview这个功能,恶补了几天,博主总结下实现的功能以备用,希望能帮到需要的亲~~ C#gui程序中建立树状结构、遍历树状结构、树状结构节点选中联动(选中父节点时,自动选中其全部子节点,取消选中的某子节点,取消其相应的所有父节点的选中),读取选中节点信息。 0.最初的父节点建立ParentNode = tv_user.Nodes.Add(OUn...

微软Blazor组件发布,DevExpress v19.1.8中可用:Charts新功能

点击获取DevExpress v19.2.3最新完整版试用下载 DevExpress UI for Blazor在v19.1.8中可用,此次更新发布包括DevExpress Blazor组件的主要功能增强:新的数据网格、图表、TreeView和Tabs。本文将先为大家介绍事件源检测、图表、标签等功能,迎下载最新版试用体验>> TreeView...