动态地添加回调功能uimenu物品
6视图(30天)
显示旧的评论
编辑:
函数Fullfilename myRecentlyAccessedFiles(应用)
[~、名称、ext] = fileparts (Fullfilename);
文件=(名字ext);%创建文件名与扩展
tempfile =“temp.xlsx”;
如果~存在(tempfile“文件”)
uimenu (app.OpenrecentlyaccessedfileMenu“文本”,“没有文件> <”);
writecell ({”},tempfile);
返回;
其他的
tempfile writecell({文件Fullfilename},“写模式”,“添加”);
data = readcell (tempfile“文件类型”,“表格”);
[C ia ~] =独特(数据(:,2),“稳定”);
如果元素个数(ia) > 5
maxLimit = 5;
其他的
maxLimit =元素个数(ia);
结束
为我= 1:maxLimit
tmp = uimenu (app.OpenrecentlyaccessedfileMenu,“文本”char (C (i)),“MenuSelectedFcn”,@MenuSelected);
结束
结束
函数MenuSelected (src、事件)
%为每一个文件执行
结束
结束
通过这样做,每一次迭代后,“打开最近访问的文件”菜单给我适当的列表(screensot下面)
我需要打开的文件从子菜单中选择“打开最近访问的文件”。
然而,当我执行这个,无论文件选择,总是执行最后的代码文件列表中。
我有什么地方做的不对吗?
3评论
里克
2021年5月17日
你可以换
getappdata
和
setappdata
与你的应用程序的一个隐藏的属性。所有Matlab函数访问
大的
存储对象,因此它是一个坏主意。
难道不是最好的解决方案将这些名称存储在一个细胞向量?通过使用属性的回调使用文件可以很容易地将当前文件添加到列表,删除最老的如果超过最大计数或重新排序的元素数量如果文件已经在列表中。
接受的答案
杰夫•海斯
2021年5月17日
Shreedhar——循环中,变量
tmp
总是被覆盖
为我= 1:maxLimit
tmp = uimenu (app.OpenrecentlyaccessedfileMenu,“文本”char (C (i)),“MenuSelectedFcn”,@MenuSelected);
结束
所以这个局部变量总是指最后创建菜单项。我还没有测试,但是由于你的回调函数签名
函数MenuSelected (src、事件)
然后
src
输入参数应与被选中的菜单项对象相对应。在这种情况下,你可以改变你的代码
函数MenuSelected (src、事件)
setappdata (0,“accessByMainWindow”,“假”);
setappdata (0,“recentFile”,src.Text);% < - - - - -尽可能使用src
BrowseWindow_optimized_App ();% <——这个函数简单地加载我的文件
结束
我还没有测试这个但可能*工作。