2020-12-03 MATLAB App Designer—關(guān)于鼠標(biāo)右鍵的功能開發(fā)(1)
背景
在開發(fā)app的時(shí)候,想判斷某項(xiàng)目下設(shè)定好的路徑信息是否存在,如果存在則該路徑對(duì)應(yīng)的鼠標(biāo)右鍵選項(xiàng)可用,否則為不可用。

鼠標(biāo)右鍵生成
首先采用uimenu生成‘路徑’,在利用uimenu生成'路徑:原始數(shù)據(jù)','路徑:解壓數(shù)據(jù)','路徑:統(tǒng)計(jì)數(shù)據(jù)'等三個(gè)鼠標(biāo)右鍵(作為前者的Children)
函數(shù)
對(duì)此種情況研究出一個(gè)較為通用的Enable判斷函數(shù),亦可推廣到鼠標(biāo)右鍵的Enble的控制
? function [ Message ] = ifun_SetMenuEnable4Path(~,Handle,CurrentPathData)
? ? ? ? ? ? % 設(shè)置路徑右鍵的有效性 % 可針對(duì)單個(gè)路徑信息進(jìn)行判斷,亦可對(duì)整體路徑信息進(jìn)行判斷
? ? ? ? ? ? % 當(dāng)對(duì)整體判斷時(shí)要求
? ? ? ? ? ? % app % 輸入數(shù)據(jù)時(shí)必須輸入 app
? ? ? ? ? ? % Handle % 路徑右鍵句柄
? ? ? ? ? ? % CurrentPathData % 當(dāng)前項(xiàng)目路徑信息
? ? ? ? ? ? Num_Menu_Children = length(Handle.Children);
? ? ? ? ? ? if Num_Menu_Children? > 1? % 設(shè)置整個(gè)路徑右鍵(Parent、Children)有效性
? ? ? ? ? ? ? ? arrayfun(@(x)ifun_SetMenuEnable4Path_Single(Handle.Children(x),CurrentPathData), ...
? ? ? ? ? ? ? ? ? ? linspace(1,Num_Menu_Children,Num_Menu_Children),'Un',false); % 設(shè)置Children的Enable
? ? ? ? ? ? ? ? set(Handle,'Enable',max(cell2mat(arrayfun(@(x)Handle.Children(x).Enable=='on',... % 根據(jù)子右鍵確定父右鍵是否可用
? ? ? ? ? ? ? ? ? ? linspace(1,Num_Menu_Children,Num_Menu_Children),'Un',false))));
? ? ? ? ? ? ? ? Message = 1;
? ? ? ? ? ? elseif Num_Menu_Children? == 0 % 設(shè)置單個(gè)路徑右鍵的有效性
? ? ? ? ? ? ? ? [ Message ] = ifun_SetMenuEnable4Path_Single(Handle,CurrentPathData);
? ? ? ? ? ? else;Message = 'ifun_SetMenuEnable4Path的輸入?yún)?shù)數(shù)量錯(cuò)誤';disp(Message);
? ? ? ? ? ? end
? ? ? ? ? ? %%% 附屬函數(shù)
? ? ? ? ? ? function [ Message ] = ifun_SetMenuEnable4Path_Single(Menu_Path,CurrentPathData)
? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? ? ? Menu_Path_Enable = 'off'; % 預(yù)設(shè)不可用
? ? ? ? ? ? ? ? ? ? switch Menu_Path.Label % 根據(jù)Parent循環(huán)判斷其children的Enable % 僅針對(duì)一個(gè)項(xiàng)目
? ? ? ? ? ? ? ? ? ? ? ? case '路徑:原始數(shù)據(jù)' %
? ? ? ? ? ? ? ? ? ? ? ? ? ? if isfolder(CurrentPathData.RawDataPath)==1;Menu_Path_Enable = 'on';end
? ? ? ? ? ? ? ? ? ? ? ? case '路徑:解壓數(shù)據(jù)'
? ? ? ? ? ? ? ? ? ? ? ? ? ? if isfolder(CurrentPathData.UnzipDataPath)==1;Menu_Path_Enable = 'on';end
? ? ? ? ? ? ? ? ? ? ? ? case '路徑:統(tǒng)計(jì)數(shù)據(jù)' % 統(tǒng)計(jì)特征值存放地址
? ? ? ? ? ? ? ? ? ? ? ? ? ? if isfolder(CurrentPathData.FeaturePath)==1;Menu_Path_Enable = 'on';end
? ? ? ? ? ? ? ? ? ? ? ? case '路徑:結(jié)果數(shù)據(jù)' % 特征值分析數(shù)據(jù)存放地址
? ? ? ? ? ? ? ? ? ? ? ? ? ? if isfolder(CurrentPathData.ResultPath)==1;Menu_Path_Enable = 'on';end
? ? ? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? ? ? set(Menu_Path,'Enable',Menu_Path_Enable);Message =1;
? ? ? ? ? ? ? ? catch;Message = 'Label輸入錯(cuò)誤';disp(Message);
? ? ? ? ? ? ? ? end
? ? ? ? ? ? end
? ? ? ? end
函數(shù)使用說(shuō)明
(1)當(dāng)輸入函數(shù)ifun_SetMenuEnable4Path的Handle(右鍵句柄)含有Children時(shí),首先判斷其Children的Enable,在根據(jù)Children的Enable取最大值賦值給Handle的Enable
(2)當(dāng)輸入函數(shù)ifun_SetMenuEnable4Path的Handle(右鍵句柄)不含有Children時(shí),則僅判斷該句柄所對(duì)應(yīng)的Enable屬性
鼠標(biāo)右鍵控件的Enable屬性根據(jù)其回調(diào)結(jié)果來(lái)控制