2020-12-03 MATLAB App Designer—关于鼠标右键的功能开发(1)
背景
在开发app的时候,想判断某项目下设定好的路径信息是否存在,如果存在则该路径对应的鼠标右键选项可用,否则为不可用。

鼠标右键生成
首先采用uimenu生成‘路径’,在利用uimenu生成'路径:原始数据','路径:解压数据','路径:统计数据'等三个鼠标右键(作为前者的Children)
函数
对此种情况研究出一个较为通用的Enable判断函数,亦可推广到鼠标右键的Enble的控制
function [ Message ] = ifun_SetMenuEnable4Path(~,Handle,CurrentPathData)
% 设置路径右键的有效性 % 可针对单个路径信息进行判断,亦可对整体路径信息进行判断
% 当对整体判断时要求
% app % 输入数据时必须输入 app
% Handle % 路径右键句柄
% CurrentPathData % 当前项目路径信息
Num_Menu_Children = length(Handle.Children);
if Num_Menu_Children > 1 % 设置整个路径右键(Parent、Children)有效性
arrayfun(@(x)ifun_SetMenuEnable4Path_Single(Handle.Children(x),CurrentPathData), ...
linspace(1,Num_Menu_Children,Num_Menu_Children),'Un',false); % 设置Children的Enable
set(Handle,'Enable',max(cell2mat(arrayfun(@(x)Handle.Children(x).Enable=='on',... % 根据子右键确定父右键是否可用
linspace(1,Num_Menu_Children,Num_Menu_Children),'Un',false))));
Message = 1;
elseif Num_Menu_Children == 0 % 设置单个路径右键的有效性
[ Message ] = ifun_SetMenuEnable4Path_Single(Handle,CurrentPathData);
else;Message = 'ifun_SetMenuEnable4Path的输入参数数量错误';disp(Message);
end
%%% 附属函数
function [ Message ] = ifun_SetMenuEnable4Path_Single(Menu_Path,CurrentPathData)
try
Menu_Path_Enable = 'off'; % 预设不可用
switch Menu_Path.Label % 根据Parent循环判断其children的Enable % 仅针对一个项目
case '路径:原始数据' %
if isfolder(CurrentPathData.RawDataPath)==1;Menu_Path_Enable = 'on';end
case '路径:解压数据'
if isfolder(CurrentPathData.UnzipDataPath)==1;Menu_Path_Enable = 'on';end
case '路径:统计数据' % 统计特征值存放地址
if isfolder(CurrentPathData.FeaturePath)==1;Menu_Path_Enable = 'on';end
case '路径:结果数据' % 特征值分析数据存放地址
if isfolder(CurrentPathData.ResultPath)==1;Menu_Path_Enable = 'on';end
end
set(Menu_Path,'Enable',Menu_Path_Enable);Message =1;
catch;Message = 'Label输入错误';disp(Message);
end
end
end
函数使用说明
(1)当输入函数ifun_SetMenuEnable4Path的Handle(右键句柄)含有Children时,首先判断其Children的Enable,在根据Children的Enable取最大值赋值给Handle的Enable
(2)当输入函数ifun_SetMenuEnable4Path的Handle(右键句柄)不含有Children时,则仅判断该句柄所对应的Enable属性
鼠标右键控件的Enable属性根据其回调结果来控制