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


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

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

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

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


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