动态地添加回调功能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 ();% <——这个函数简单地加载我的文件
结束
我还没有测试这个但可能*工作。

更多的答案(0)

类别

找到更多的在使用应用程序开发应用程序设计师帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的