【MATLAB App Designer】對于uitreenode的CheckBox值進行修改
1. 項目背景
有個項目需求,也就是對下圖選中的節(jié)點(uitreenode)采用代碼進行checkBox的修改,將true改為false


結構樹建立方法:
%?Tag % 用于定位句柄
%?'checkbox'% 設置當前控件可以設置checkbox??
% 參考鏈接:https://ww2.mathworks.cn/help/matlab/ref/matlab.ui.container.checkboxtree-properties.html
2. 獲取選中節(jié)點
?%?BridgeCode % 選中節(jié)點的父節(jié)點
%?Tag? %?Text? % 用于查找定位想要的節(jié)點
3. 設置節(jié)點的CheckBox值
3.1 在已找到節(jié)點的情況下,在Tree_BridgeCodeInfo(樹句柄)中的CheckedNodes屬性中查找是否存在指定節(jié)點:
%?Tree_BridgeCodeInfo(樹句柄)中的CheckedNodes屬性存在指定節(jié)點TimeStr,則CHeckBox值為true,否則為false;

3.2 由于CheckedNodes屬性存儲的是數(shù)組,故采用 arrayfun 函數(shù),如下:
查找指定的TimeStr(Text為:'2021-11-25 23:00~2021-11-28 23:23(39/39)')在CheckedNodes屬性的ID:

3.3 刪除找到的ID對應的數(shù)組數(shù)據(jù)來修改指定節(jié)點指定的 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. 進階版
以上適用于?節(jié)點(Text :WHL)的CHildren都選中的情況,但如果想對修改后的情況下,節(jié)點(Text:?'2021-11-25 23:00~2021-11-25 23:23(39/39)')的CheckBox修改為false,則方法不同;
修改完后的Tree_BridgeCodeInfo.CheckedNodes屬性為:

也就是說,只要找到節(jié)點(Text:?'2021-11-25 23:00~2021-11-25 23:23(39/39)')并刪除其在Tree_BridgeCodeInfo.CheckedNodes的數(shù)組就可以,不需要想之前還需要刪除其之前的所有的父(到最高層節(jié)點),執(zhí)行命令的例子如下:
%?


By 卓越工作室 2021年5月3日00:15:23