首页 > 编程语言 >C#实现treeview节点上下左右自由移动

C#实现treeview节点上下左右自由移动

时间:2023-01-05 11:32:53浏览次数:34  
标签:Index TreeNode C# ObjNode newnode Nodes treeview 上下左右 节点

以下是节点移动类NodeMove.cs源码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace NodeMove
{
class NodeMove
{
private void MovUp(TreeNode ObjNode)
{
//----节点的向上移动
if (ObjNode != null)
{
TreeNode newnode = new TreeNode();
//--------如果选中节点为最顶节点
if (ObjNode.Index == 0)
{
//-------------
}
else if (ObjNode.Index != 0)
{
newnode = (TreeNode)ObjNode.Clone();
//-------------若选中节点为根节点
if (ObjNode.Level == 0)
{
treeView1.Nodes.Insert(ObjNode.PrevNode.Index, newnode);
}
//-------------若选中节点并非根节点
else if (ObjNode.Level != 0)
{
ObjNode.Parent.Nodes.Insert(ObjNode.PrevNode.Index, newnode);
}
ObjNode.Remove();
ObjNode = newnode;
}

}
}

private void MovDown(TreeNode ObjNode)
{
//----节点的向下移动
if (ObjNode != null)
{
TreeNode newnode = new TreeNode();
//-------------如果选中的是根节点
if (ObjNode.Level == 0)
{
//---------如果选中节点为最底节点
if (ObjNode.Index == treeView1.Nodes.Count - 1)
{
//---------------
}
//---------如果选中的不是最底的节点
else
{
newnode = (TreeNode)ObjNode.Clone();
treeView1.Nodes.Insert(ObjNode.NextNode.Index + 1, newnode);
ObjNode.Remove();
ObjNode = newnode;

}
}
//-------------如果选中节点不是根节点
else if (ObjNode.Level != 0)
{
//---------如果选中最底的节点
if (ObjNode.Index == ObjNode.Parent.Nodes.Count - 1)
{
//-----------
}
//---------如果选中的不是最低的节点
else
{
newnode = (TreeNode)ObjNode.Clone();
ObjNode.Parent.Nodes.Insert(ObjNode.NextNode.Index + 1, newnode);
ObjNode.Remove();
ObjNode = newnode;
}
}

}
}

private void MovLeft(TreeNode ObjNode)
{
//-----节点向左移动(即成为原父节点的同级节点)
if (ObjNode != null)
{
TreeNode newnode = new TreeNode();
//-----如果接点是根节点
if (ObjNode.Parent == null)
{
//---------
}
//-----如果选中节点不是根节点
else
{
newnode = (TreeNode)ObjNode.Clone();
//-----如果选中的节点是第一级子节点
if (ObjNode.Level == 1)
{
treeView1.Nodes.Insert(ObjNode.Parent.Index + 1, newnode);
}
else
{
ObjNode.Parent.Parent.Nodes.Insert(ObjNode.Parent.Index + 1, newnode);
}
ObjNode.Remove();
ObjNode = newnode;

}
}

}

private void MovRight(TreeNode ObjNode)
{
//-----节点的向右移动(即成为上一个同级节点的最后一个子节点)
if (ObjNode != null)
{
TreeNode newnode = new TreeNode();
//-----如果节点是叶子节点
if (ObjNode.Nodes.Count == 0 && ObjNode.PrevNode == null)
{
//--------
}
//-----如果节点是第一个根节点
else if (ObjNode.Parent == null && ObjNode.Index == 0)
{
//--------
}
//-----
else
{
newnode = (TreeNode)ObjNode.Clone();
ObjNode.PrevNode.Nodes.Insert(ObjNode.PrevNode.Nodes.Count, newnode);
ObjNode.Remove();
ObjNode = newnode;
}
}
}
}
}

标签:Index,TreeNode,C#,ObjNode,newnode,Nodes,treeview,上下左右,节点
From: https://blog.51cto.com/kenkao/5989787

相关文章

  • C#实现文件二进制存储
    privatestaticBinaryFormatterTransfer=newBinaryFormatter();publicintBinaryFileSav(){//-----二进制文件写入并存储......
  • C#实现TreeView向XML的绝对转换类
    从第一次接触XML开始就想写一个能实现tree和XML灵活转换的类了。写这个类大概用去了将近半天的时间,花的时间有些长了。呵呵。。好在收获颇多,熟练了XML的读写类,对C#中的forea......
  • 用hardhat 做ERC20转帐时报了 Nonce too high. Expected nonce to be 6 but got 11. N
    https://github.com/scaffold-eth/scaffold-eth/issues/476InMetamask,ensureyouareonyourdev/testaccountthen:clickontheavatarcircletoprightInthe......
  • mysql 5.7 增加regexp_replace函数
    CREATEDEFINER=`root`@`%`FUNCTION`regexp_replace`(ori_strLONGTEXT,patternVARCHAR(1000),repl_strVARCHAR(1000))RETURNSlongtextCHARSETutf8mb4DETERMI......
  • React的useLayoutEffect和useEffect执行时机有什么不同
    我们先看下React官方文档对这两个hook的介绍,建立个整体认识useEffect(create,deps):该Hook接收一个包含命令式、且可能有副作用代码的函数。在函数组件主体内(这......
  • React循环DOM时为什么需要添加key
    一、React渲染流程和更新流程react渲染流程:jsx->虚拟dom->真实domreact更新流程:props/state改变->render函数重新执行->生成新的虚拟dom树->新旧虚拟dom树进......
  • 校招前端二面常考react面试题(边面边更)
    高阶组件高阶函数:如果一个函数接受一个或多个函数作为参数或者返回一个函数就可称之为高阶函数。高阶组件:如果一个函数接受一个或多个组件作为参数并且返回一个组件就......
  • 如何在Java程序中合并和拆分Excel文档
    当我们需要储存或者计算大量数据时,常常会使用到Excel文档。一般情况下,一个工作簿中可以存在多个工作表以储存不同类别的数据内容。在分类整理文档时,我们不免会对Excel文档......
  • 前端一面常考react面试题
    类组件(Classcomponent)和函数式组件(Functionalcomponent)之间有何不同类组件不仅允许你使用更多额外的功能,如组件自身的状态和生命周期钩子,也能使组件直接访问store......
  • postgresql/lightdb的 is distinct from、is not distinct from
    在postgresql/lightdb开发过程中有时会用到is distinct from和isnotdistinctfrom这个功能。isdistinctfrom功能描述A和B的数据类型、值不完全相同返回tru......