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

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

本文转载:http://dengzebo.blog.163.com/blog/static/18867406201032141932204/

img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
      #region "控制树节点移动,向左右下上"
         ///   <summary>
        
///  通过Ctrl+键盘移动选定的树节点
        
///   </summary>
        
///   <param name="TreeView1"> 要编辑的TreeView控件 </param>
        
///   <param name="eKeys"> The  <see cref="System.Windows.Forms.KeyEventArgs"/> KeyEventArgs为按键事件提供数据 </param>
         public  void MoveSelectNode(TreeView TreeView1, KeyEventArgs eKeys)
        {
             try
            {
                 if (TreeView1.SelectedNode ==  null)
                {
                     return;
                }

                 try
                {
                     if (eKeys.KeyCode == Keys.Up && eKeys.Control ==  true)
                    {
                        TreeNode TN =  new TreeNode();
                        TN = TreeView1.SelectedNode;
                        TreeNode TempNode = (TreeNode)TreeView1.SelectedNode.Clone();
                         if (TreeView1.SelectedNode.PrevNode ==  null)
                        {
                             return;

                        }
                         if (TN.Parent ==  null)
                        {
                            TreeView1.Nodes.Insert(TN.Index -  1, TempNode);
                        }
                         else
                        {
                            TN.Parent.Nodes.Insert(TN.Index -  1, TempNode);
                        }

                        TreeView1.SelectedNode.Remove();
                        TreeView1.SelectedNode = TempNode;
                    }

                     else  if (eKeys.KeyCode == Keys.Down && eKeys.Control ==  true)
                    {
                        TreeNode TN =  new TreeNode();
                        TN = TreeView1.SelectedNode;
                        TreeNode TempNode = (TreeNode)TreeView1.SelectedNode.Clone();
                         if (TreeView1.SelectedNode.NextNode ==  null)
                        {
                             return;
                        }
                         if (TN.Parent ==  null)
                        {
                            TreeView1.Nodes.Insert(TN.Index +  2, TempNode);
                        }
                         else
                        {
                            TN.Parent.Nodes.Insert(TN.Index +  2, TempNode);
                        }
                        TreeView1.SelectedNode.Remove();
                        TreeView1.SelectedNode = TempNode;
                    }
                     else  if (eKeys.KeyCode == Keys.Left && eKeys.Control ==  true)
                    {
                        TreeNode TN =  new TreeNode();
                        TN = TreeView1.SelectedNode;
                        TreeNode TempNode = (TreeNode)TreeView1.SelectedNode.Clone();
                         if (TreeView1.SelectedNode.Parent ==  null)
                        {
                             return;
                        }
                         else
                        {
                             if (TreeView1.SelectedNode.Parent.Parent ==  null)
                            {
                                TreeView1.Nodes.Add(TempNode);
                            }

                             else
                            {
                                TN.Parent.Parent.Nodes.Add(TempNode);
                            }
                        }
                        TN.Remove();
                        TreeView1.SelectedNode = TempNode;
                    }
                     else  if (eKeys.KeyCode == Keys.Right && eKeys.Control ==  true)
                    {
                        TreeNode TN =  new TreeNode();
                        TN = TreeView1.SelectedNode;
                        TreeNode TempNode = (TreeNode)TreeView1.SelectedNode.Clone();
                         if (TreeView1.SelectedNode.NextNode ==  null)
                        {
                             return;
                        }
                        TN.NextNode.Nodes.Insert( 0, TempNode);
                        TN.Remove();
                        TreeView1.SelectedNode = TempNode;
                    }
                }
                 catch
                {

                }

            }
             catch
            { }

        }

         #endregion

 

目录
相关文章
|
6月前
|
SQL 运维 Java
蚂蚁 Flink 实时计算编译任务 Koupleless 架构改造
本文介绍了对Flink实时计算编译任务的Koupleless架构改造。为解决进程模型带来的响应慢、资源消耗大等问题,团队将进程模型改为线程模型,并借助Koupleless的类加载隔离能力实现版本和包的隔离。通过动态装配Plugin及其Classpath,以及Biz运行时仅对依赖Plugin可见的设计,大幅优化了编译任务的性能。结果表明,新架构使编译耗时降低50%,吞吐量提升5倍以上。
蚂蚁 Flink 实时计算编译任务 Koupleless 架构改造
|
6月前
|
存储 编解码 搜索推荐
文生图架构设计原来如此简单之社区与共享机制
工作流共享是文生图应用社区建设的核心功能,它使用户能够分享创作经验和技巧,形成知识共享生态。工作流序列化与存储设计需要解决复杂工作流的高效表示问题。
136 10
|
6月前
|
存储 算法 数据可视化
【二叉树遍历入门:从中序遍历到层序与右视图】【LeetCode 热题100】94:二叉树的中序遍历、102:二叉树的层序遍历、199:二叉树的右视图(详细解析)(Go语言版)
本文详细解析了二叉树的三种经典遍历方式:中序遍历(94题)、层序遍历(102题)和右视图(199题)。通过递归与迭代实现中序遍历,深入理解深度优先搜索(DFS);借助队列完成层序遍历和右视图,掌握广度优先搜索(BFS)。文章对比DFS与BFS的思维方式,总结不同遍历的应用场景,为后续构造树结构奠定基础。
267 10
|
6月前
|
Go 索引 Perl
【LeetCode 热题100】【二叉树构造题精讲:前序 + 中序建树 & 有序数组构造 BST】(详细解析)(Go语言版)
本文详细解析了二叉树构造的两类经典问题:通过前序与中序遍历重建二叉树(LeetCode 105),以及将有序数组转化为平衡二叉搜索树(BST,LeetCode 108)。文章从核心思路、递归解法到实现细节逐一拆解,强调通过索引控制子树范围以优化性能,并对比两题的不同构造逻辑。最后总结通用构造套路,提供进阶思考方向,帮助彻底掌握二叉树构造类题目。
280 9
|
6月前
|
文字识别 网络协议 开发工具
GitHub封锁?推荐5个国产的Git仓库替代平台
近日,GitHub对中国区IP的部分限制引发了广泛关注。未登录用户被拒,已登录用户功能受限,南北网络环境差异更显“内卷”。为应对这一挑战,本文推荐了多个国产Git平台:Gitee(码云)、GitCode(CSDN旗下)、CODING(腾讯系)、CodeUP(阿里云支持)及微信代码管理工具。这些平台功能全面、稳定性强,是开发者迁移项目的理想选择。通过同步代码、配置CI/CD流水线等简单步骤,可确保项目平稳过渡。此次事件提醒我们,掌握核心技能与支持国产平台同样重要!
3121 11
|
6月前
|
人工智能 供应链 监控
数字化转型具体应该从哪里入手?——生成式AI时代的战略行动框架
本文探讨生成式AI技术对数字化转型的深远影响,从战略认知、技术赋能、组织能力三个维度构建转型框架。强调需突破传统技术工具论,将AI视为战略伙伴;从数据驱动转向知识进化;由组织变革拓展至生态重构。同时提出具体实施路径,包括场景优先级排序、人机协作设计及技术债务管理,并结合培生认证项目阐述其在能力基准建立、战略合作与创新生态接入的战略价值,助力企业实现持续进化与价值创造的本质回归。
|
6月前
|
算法 Go
【LeetCode 热题100】深入理解二叉树结构变化与路径特性(力扣104 / 226 / 114 / 543)(Go语言版)
本博客深入探讨二叉树的深度计算、结构变换与路径分析,涵盖四道经典题目:104(最大深度)、226(翻转二叉树)、114(展开为链表)和543(二叉树直径)。通过递归与遍历策略(前序、后序等),解析每题的核心思路与实现方法。结合代码示例(Go语言),帮助读者掌握二叉树相关算法的精髓。下一讲将聚焦二叉树构造问题,欢迎持续关注!
138 10
|
6月前
|
人工智能 搜索推荐 算法
职业教育会被完全取代吗?—技术革命下人类教育本质的坚守与进化
本文探讨生成式AI对职业教育的影响,从技术革命重塑教育形态、职业教育的不可替代性及AI与职业教育的共生关系三方面分析。尽管AI能颠覆知识获取和技能培养方式,但职业教育在身体在场体验、价值塑造和复杂问题解决上仍具独特价值。未来,AI将推动职业教育向思维训练、个性化学习和教育公平方向进化,形成人机协同的新生态,强调人性温度、思维深度与价值高度的教育新形态。
|
C++
C++ PCL SACSegmentationFromNormals setAxis 轴向的选择
C++ PCL SACSegmentationFromNormals setAxis 轴向的选择
228 2
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之在进行数据同步作业时,有什么方法可以用于检查源端和目标端的数据一致性
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
116 0