欢迎光临散文网 会员登陆 & 注册

【MATLAB App Designer】对于uitreenode的CheckBox值进行修改

2021-05-03 00:10 作者:-何其-  | 我要投稿

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

【MATLAB App Designer】对于uitreenode的CheckBox值进行修改的评论 (共 条)

分享到微博请遵守国家法律