1. 项目背景
有个项目需求,也就是对下图选中的节点(uitreenode)采用代码进行checkBox的修改,将true改为false
修改前
修改后
结构树建立方法: % Tag % 用于定位句柄 % 'checkbox'% 设置当前控件可以设置checkbox % 参考链接:https://ww2.mathworks.cn/help/matlab/ref/matlab.ui.container.checkboxtree-properties.html
2. 获取选中节点
% BridgeCode % 选中节点的父节点 % Tag % Text % 用于查找定位想要的节点
3. 设置节点的CheckBox值
3.1 在已找到节点的情况下,在Tree_BridgeCodeInfo(树句柄)中的CheckedNodes属性中查找是否存在指定节点:
% Tree_BridgeCodeInfo(树句柄)中的CheckedNodes属性存在指定节点TimeStr,则CHeckBox值为true,否则为false;
CheckedNodes属性存储的是数组
3.2 由于CheckedNodes属性存储的是数组,故采用 arrayfun 函数,如下:
查找指定的TimeStr(Text为:'2021-11-25 23:00~2021-11-28 23:23(39/39)')在CheckedNodes属性的ID:
查找结果
3.3 删除找到的ID对应的数组数据来修改指定节点指定的 TimeStr(Text为:'2021-11-25 23:00~2021-11-28 23:23(39/39)')的CheckBox为false
% Tree_BridgeCodeInfo.CheckedNodes(cell2mat(arrayfun( @(x) strcmp(x.Tag,'TimeStr')==1 & strcmp(x.Text,TreeDataTable.TimeStr)==1,... Tree_BridgeCodeInfo.CheckedNodes,'UniformOutput',false)) | ... cell2mat(arrayfun( @(x) strcmp(x.Tag,'BridgeCode')==1 & strcmp(x.Text,TreeDataTable.BridgeCode)==1,... Tree_BridgeCodeInfo.CheckedNodes,'UniformOutput',false)) | ... cell2mat(arrayfun( @(x) strcmp(x.Tag,'Project')==1 & strcmp(x.Text,TreeDataTable.Project)==1,... Tree_BridgeCodeInfo.CheckedNodes,'UniformOutput',false)),:) = [];
3.4 效果图
修改后
4. 进阶版
以上适用于 节点(Text :WHL)的CHildren都选中的情况,但如果想对修改后的情况下,节点(Text: '2021-11-25 23:00~2021-11-25 23:23(39/39)')的CheckBox修改为false,则方法不同;
修改完后的Tree_BridgeCodeInfo.CheckedNodes属性为:
修改完后的Tree_BridgeCodeInfo.CheckedNodes
也就是说,只要找到节点(Text: '2021-11-25 23:00~2021-11-25 23:23(39/39)')并删除其在Tree_BridgeCodeInfo.CheckedNodes的数组就可以,不需要想之前还需要删除其之前的所有的父(到最高层节点),执行命令的例子如下:
%
执行效果
执行后的Tree_BridgeCodeInfo.CheckedNodes属性
By 卓越工作室 2021年5月3日00:15:23