递归法选取树子节点 + 控件拖放

未解决问题标记法:让悬而未决的工程问题可控可接力 在软件工程中,技术债务与悬而未决的问题普遍存在。如何与这些“未解决”共处,往往比强行修复更具现实意义。代码注释不仅是给机器看的指令,更是留给后来者的沟通媒介。当面对偶发超时、潜在竞态等棘手问题时,记录“已尝试的失败路径”和“当前规避策略”,比留下一个空洞的TODO或FIXME更有价值。这种标记实践,本质上是一种风险管理和知识传承机制,它能帮助团队止损、实现高效接力,并建立信任。通过结构化的注释模板、未决问题清单和清晰的责任分工,团队可以将看似危险的不确定性问题,转化为可控、可追踪的工程资产,从而提升系统的可 阅读详情

递归法选取树子节点 + 控件拖放

适合N层树,通用

.pas

unit treeRecursion;
{
 标题: 递归法选取树子节点 + 控件拖放
 作者: vigor
 时间: 2004.3.26
}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    ListBox1: TListBox;
    Splitter1: TSplitter;
    procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure AddSelectedChildrenToListbox(tree : TTreeView;startNode :TTreeNode;listBox :TListBox);
  end;

var
  Form1: TForm1;
  g_startNode : TTreeNode;

implementation

{$R *.dfm}
{
拖放控件
准备条件:
      源控件    DragKind :=dkDrag; DragCursor :=crDefalt; DragMode :=  dmManual;
      目标控件
实施步骤:
      1. 开始拖动操作 onMouseDown BeginDrag  ( 源控件 )
      2. 接收拖动项目 OnDragOver             (目标控件)
      3. 放下拖动项目 OnDragDrop             (目标控件)
      4. 终止拖动操作 OnEndDrag             ( 源控件 )
}

procedure TForm1.AddSelectedChildrenToListbox(tree: TTreeView;
                      startNode: TTreeNode; listBox: TListBox);
var
   curParent : TTreeNode;
begin
   if not(tree.Selected.HasChildren) then
   begin
      if listBox.Items.IndexOf(Trim(tree.Selected.Text)) = -1 then
         listBox.Items.Add(Trim(tree.Selected.Text));
   end
   else
   begin
      tree.Selected := tree.Selected.GetNext;
      while tree.Selected<>nil do
      begin
         curParent :=tree.Selected;

         AddSelectedChildrenToListbox(tree,tree.Selected,listBox);
         tree.Selected := curParent.getNextSibling;
      end;
   end;
end;

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   if Button = mbLeft then
   begin
      g_startNode := TreeView1.GetNodeAt(X,Y);
      if Assigned(g_startNode) then
         TreeView1.BeginDrag(True);
   end;
end;

procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
   if Source = TreeView1 then
      Accept := True;
end;
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
   if Source = TreeView1 then
   begin
      AddSelectedChildrenToListbox(treeview1,g_startNode,listbox1);
   end;
end;

end.

.dfm

object Form1: TForm1
  Left = 210
  Top = 148
  Width = 602
  Height = 480
  Caption = '递归法选取树子节点+ 控件拖放'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Splitter1: TSplitter
    Left = 273
    Top = 0
    Height = 446
  end
  object TreeView1: TTreeView
    Left = 0
    Top = 0
    Width = 273
    Height = 446
    Align = alLeft
    DragCursor = crMultiDrag
    Indent = 19
    ReadOnly = True
    TabOrder = 0
    OnMouseDown = TreeView1MouseDown
    Items.Data = {
      020000001D0000000000000000000000FFFFFFFFFFFFFFFF0000000003000000
      04B2E9D1AF270000000000000000000000FFFFFFFFFFFFFFFF00000000000000
      000ED1A7D4D3B7D1C3F7CFB8B2E9D1AF270000000000000000000000FFFFFFFF
      FFFFFFFF00000000000000000ECAD5B7D1C8D5B1A8B1EDB2E9D1AF2100000000
      00000000000000FFFFFFFFFFFFFFFF000000000300000008CDB3BCC6B2E9D1AF
      250000000000000000000000FFFFFFFFFFFFFFFF00000000030000000CB2BFC3
      C5CDB3BCC6B2E9D1AF270000000000000000000000FFFFFFFFFFFFFFFF000000
      00030000000EB2BFC3C5CDB3BCC6B2E9D1AFD2BB230000000000000000000000
      FFFFFFFFFFFFFFFF00000000000000000AB2BFC3C5B8DFBCB6D2BB2300000000
      00000000000000FFFFFFFFFFFFFFFF00000000000000000AB2BFC3C5B8DFBCB6
      B6FE230000000000000000000000FFFFFFFFFFFFFFFF00000000000000000AB2
      BFC3C5B8DFBCB6C8FD270000000000000000000000FFFFFFFFFFFFFFFF000000
      00000000000EB2BFC3C5CDB3BCC6B2E9D1AFB6FE270000000000000000000000
      FFFFFFFFFFFFFFFF00000000020000000EB2BFC3C5CDB3BCC6B2E9D1AFC8FD23
      0000000000000000000000FFFFFFFFFFFFFFFF00000000000000000AB2BFC3C5
      B8DFBCB6CBC4230000000000000000000000FFFFFFFFFFFFFFFF000000000200
      00000AB2BFC3C5B8DFBCB6CEE5230000000000000000000000FFFFFFFFFFFFFF
      FF00000000000000000AB2BFC3C5B3ACBCB6D2BB230000000000000000000000
      FFFFFFFFFFFFFFFF00000000000000000AB2BFC3C5B3ACBCB6B6FE2500000000
      00000000000000FFFFFFFFFFFFFFFF00000000000000000CC4EABCB6CDB3BCC6
      B2E9D1AF290000000000000000000000FFFFFFFFFFFFFFFF0000000000000000
      10B2BFC3C5C4EABCB6CDB3BCC6B2E9D1AF210000000000000000000000FFFFFF
      FFFFFFFFFF000000000300000008D3A6CAD5B4A6C0ED21000000000000000000
      0000FFFFFFFFFFFFFFFF000000000300000008D3A6CAD5B3F5CABC2100000000
      00000000000000FFFFFFFFFFFFFFFF000000000000000008CAD6B6AFB3F5CABC
      210000000000000000000000FFFFFFFFFFFFFFFF000000000300000008C5FAC1
      BFC9FAB3C9270000000000000000000000FFFFFFFFFFFFFFFF00000000000000
      000EB0B4B0E0BCB6C5FAC1BFC9FAB3C9270000000000000000000000FFFFFFFF
      FFFFFFFF00000000000000000EB0B4CBDEC9E1C5FAC1BFC9FAB3C92700000000
      00000000000000FFFFFFFFFFFFFFFF00000000000000000EB0B4CCD8D5F7C5FA
      C1BFC9FAB3C9210000000000000000000000FFFFFFFFFFFFFFFF000000000000
      000008D7D4B6AFB3F5CABC210000000000000000000000FFFFFFFFFFFFFFFF00
      0000000000000008D3A6CAD5B5F7D5FB210000000000000000000000FFFFFFFF
      FFFFFFFF000000000000000008D3A6CAD5BCC7D5CB}
  end
  object ListBox1: TListBox
    Left = 276
    Top = 0
    Width = 318
    Height = 446
    Align = alClient
    DragMode = dmAutomatic
    ItemHeight = 13
    TabOrder = 1
    OnDragDrop = ListBox1DragDrop
    OnDragOver = ListBox1DragOver
  end
end

树父节点递归获取树子节点 java实现树父节点递归获取树子节点 工具类,以后再项目中直接用即可 立即下载

相关推荐

VXLAN技术详解

VXLAN(虚拟可扩展局域网)是一种Overlay二层虚拟化技术,通过MAC-in-UDP封装在IP网络上构建大规模虚拟二层网络。核心组件包括VTEP(隧道端点)、24位VNI(支持1600万个虚拟网络)和VXLAN网关。相比VLAN,VXLAN具有超大规模扩展、跨三层互联、支持虚拟机无缝迁移等优势,适用于云数据中心多租户隔离、跨数据中心互联等场景。其基于IP路由的封装方式无需改造物理网络,为现代云网络提供了弹性、安全的虚拟化解决方案。

kjkdd的博客 594

JS获取子节点、父节点和兄弟节点的若干种方式

一、js获取子节点的方式1.通过获取dom方式直接获取子节点其中test的父标签id的值,div为标签的名字。getElementsByTagName是一个方法。返回的是一个数组。在访问的时候要按数组的形式访问。var a = document.getElementById("test").getElementsByTagName("div"); 2.通过childNodes获取子节点使用child

laok_的博客 29万+

别再手动算了!用Excel函数一键搞定AQI和首要污染物分析(附完整公式模板)

本文介绍如何利用Excel函数自动化计算AQI和首要污染物分析,大幅提升数据处理效率。通过构建标准化输入模板、智能计算IAQI、自动判定AQI与首要污染物,并生成可视化仪表盘,帮助环保工作者快速完成每日监测报告。

weixin_30443075的博客 344

JS获取子节点、父节点、兄弟节点

//创建元素节点 var a=document.createElement(&amp;quot;div&amp;quot;); var b=document.createElement(&amp;quot;div&amp;quot;); var c=document.createElement(&amp;quot;div&amp;quot;); //创建文本节点

Yayou_com的博客 3292

实战指南:如何用DCCRN模型提升语音增强效果(附代码示例)

本文提供了基于DCCRN模型进行语音增强的实战指南。通过深入解析复数网络如何协同处理语音的幅度与相位信息,并附有完整的PyTorch代码实现,帮助开发者从数据准备、模型搭建到训练调优,构建高效的实时语音增强系统,有效提升嘈杂环境下的语音清晰度。

weixin_29054245的博客 478

工业相机的检测原理课件(建议收藏)

本课件为各位工程师详细介绍了工业相机的视觉检测原理 ,旨在为工程师调试工业相机的视觉检测原理时提供理论性指导。

Bamboo265925的博客 498

js 递归获取子节点所有父节点,深度遍历获取第一个子树

前端需求。 递归 深度优先遍历算法 // 查找一个节点的所有父节点 familyTree (arr1, id) { var temp = [] var forFn = function (arr, id) { for (var i = 0; i < arr.length; i++) { var item = arr[i] ...

程序员石磊 8303

粒子群优化与蚁群算法求解多旅行商问题

它要求在给定一组城市和旅行商之间的距离矩阵的情况下,找到一条最优的路径方案,使得所有旅行商可以分别从起始城市出发,途径其他城市,并最终回到起始城市,同时总旅行距离达到最小。这两种算法都是基于群体智能的优化算法,在求解组合优化问题时具有较好的性能表现。假设有n个城市需要被m个旅行商访问,城市间的距离由距离矩阵D表示,其中D(i,j)表示第i个城市到第j个城市的距离。粒子群优化算法是一种基于群体智能的优化算法,其中的粒子代表了潜在的解,并通过模拟粒子在解空间中的移动来搜索最优解。一、多旅行商问题建模。

m0_47037246的博客 553

数据结构系列--树

“递归背后栈的内部机制。” 之前所说过的数据结构都是一对一,即一个位于该数据结构中的数据它有一个前驱和一个后继(或者没有)。而在树中一个节点只有一个前驱,但是却有多个后继。树虽然是非线性的逻辑结构但是它依然可以用线性结构来存储。 树 树(英语:tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,根朝上,而叶朝下的。它具有以下的特点...

qq_36400704的博客 352

基于lstm+gru+transformer的电池寿命预测健康状态预测-完整数据代码

基于lstm+gru+transformer的电池寿命预测健康状态预测-完整数据代码

880

基于深度学习DNN LSTM网络的光伏发电量预测 完整代码数据 可直接运行

基于深度学习DNN LSTM网络的光伏发电量预测 完整代码数据 可直接运行

2079

细侃那些悬而未决的数学趣味谜题

十个悬而未决的数学趣味谜题 译者:July 二零一一年二月二十六日参考文献:Mathematical Puzzles,by Peter Winkler。此书豆瓣读书地址:http://book.douban.com/subject/2483910/---------------------------------------- ...

dinongxu8804的博客 730

OpenClaw + Antigravity + 飞书完整部署教程

在 Linux 服务器上部署 OpenClaw,使用 Antigravity 本地代理 AI 模型,并接入飞书实现 24 小时在线 AI 助手。

Maynor的博客 1787

词汇积累之形同虚设、悬而未决、外宽内忌极简理解

词汇积累之形同虚设、悬而未决、外宽内忌极简理解

weixin_52173250的博客 911

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

win7各种悬而未决的小问题

这里总结一下我使用win7时遇到的各种悬而未决的小问题,希望有解决的能给我支个招

cmsmdn的专栏 517

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

悬而未决的问题

提出: 昨天客户那边说有些机器上程序不能继续执行了,而且不能提示错误出来, 分析: 当时我就考虑: 如果aspx出错了,也会跳转到出错页面, 如果javascrip脚本出错了,也会弹出出错信息。 我苦苦跟踪了很久,发现错误还是在于Javascrip脚本。 执行到这样一句话,它不能做下去: datFile = fso.OpenTextFile(filename...

weixin_34220834的博客 202

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[双语阅读]金球奖提名揭晓 《悬而未决》领跑

"Up in the Air" leads Golden Globes with 6 nodsGeorge Clooney and Vera Farmiga in the dramatic comedy "Up in the Air." The movie got six Golden Globe nominations on Tuesday, December 1

张彤的专栏 683

悬而未决的环境问题

现在用的Web环境里面经常会出现*.dll未找到的问题,问题出现有规律。 修改后编译一次就会出现web站点中dll找不到,但是再次重新编译后,问题消失。重装了系统还是有此问题,查找了一些相关问题,一般归结为两种解决方案,重新安装iis(aspnet_regiis -i)或者调整项目内部的project结构。前一种做法只会对出现dll找不到时候有效,下次修改后编译还会出现相同问题。后一种做法的理由是

485

[openstack swift]4 悬而未决的问题和几点考虑

******************转载请注明出处!********** 最后更新:2011年8月3日20:51:36 4 悬而未决的问题和几点考虑 4.1如何避免SDC? SDC全称Silent Data Corruption。正如AMD给出的解释:“SDC occurs when incorrect data is delivered by a computing syst

预则立 不预则废 5264

悬而未决:如何巧妙解决ERP中BOM的交叉问题

 悬而未决:如何巧妙解决ERP中BOM的交叉问题实例:某一层二级BOM被上层的很多产品引用到(为了方便起见,大家最初肯定都是如此做的)问题1:此二级BOM中的某些物料要进行升级或更换,但只针对某些上层产品(并非全部)。解决:这种情况下,特别是在多层复杂的结构时,只能采取将二级BOM拆分为二种情况下的BOM,分别对应不同的上层产品!问题2:此二级BOM中的某些物料要进行升级或更换,但

寻找甘当科学家的女人/男人 2569

有感于一个悬而未决的问题

我们新开启了一个项目。项目仍然使用tomcat作为容器发布,但是这次出现了高CPU占用的情况,当然使用了ssl证书,但是我们仍然遵照了生产其他tomcat的配置方式,使用的是apr(最初是nio,导致cpu资源无法释放)。这个tomcat还出现过几次假死。也在发现假死后把堆栈都输出以发现情况具体在哪里。但是,都没有解决。 由于是我在摆弄部署的事,研发leader跟我确认配置是否正确,把问题告诉了我...

汇渊科技 1045

悬而未决的数学问题

1.XORShift与梅森旋转素数法的原理及其应用

幸福安康! 563

悬而未决的题目

今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。 区间dp,代码来自preeee...

Nerdant 250

悬而未决的一些问题

有好多问题花费了时间,但是一直未能解决,先记下来,有机会或者有需求了,再去解决。

要把所有那些负面的信息当做对自身行为的评价,而不是对自身价值的评判。 283
上一篇: C# Programming guidlines
下一篇: [转贴]一个真实的故事,使我这个曾经邪恶的心为之颤栗-
Vigorcsdn
博客等级 码龄23年 0粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值