matlab listbox慢,MATLAB GUIDE gui listbox间歇性地消失,看似过时的错误

这篇博客详细记录了作者在使用MATLAB R2010a版本时遇到的一个GUI列表框填充后消失的问题。问题表现为在编辑图形后,列表框会消失并显示警告信息。作者通过调试发现,当查询列表框选择时可能返回空结果,导致了这一异常。为了解决这个问题,作者编写了一个集中处理函数`ensure_listbox_ok`,用于检查和修正列表框的选择值,确保其始终有效。经过调整后的代码在作者的环境中正常工作。
摘要由CSDN通过智能技术生成

我正在使用GUIDE构建一个简单的MATLAB gui.我有一个项目列表框.大多数情况下,它按预期工作,但有时(通常在我使用GUIDE编辑图形后)填充列表框会导致它消失,以及此消息:

Warning: single-selection listbox control requires a scalar Value

Control will not be rendered until all of its parameter values are valid

这种行为无法调试!当我单步执行时,它按预期工作(我怀疑它是一种线程竞赛或其他东西).此外,在相同条件下重新启动MATLAB环境后,它通常会消失.

在此错误中找到的所有文档都涉及MATLAB的先前/古代版本(我使用的是R2010a).

任何有关此主题的想法或信息将不胜感激!

编辑:感谢米哈伊尔,我似乎已经解决了这个问题.我在这里发布我的代码以供将来参考.

经过大量的调试打印和疯狂点击之后,我发现有时候当您询问列表框选择的内容时,会得到一个空的结果.这个问题和其他问题使事情变得混乱.我把所有的写作交互都放到了一个集中的函数中,然后我写了一些测试代码,以确保事情保持原样.

请注意,这已经在我自己的环境(在R2010a上)进行了测试,而不是广泛的.此外,代码有点多余,但无论如何它让我感觉很好. (即.countcount不能小于0 …)

function ensure_listbox_ok(handles)

%check to make sure it does not suck - ask what it has

thestrings = get(handles.listbox_files, 'String');

selection = get(handles.listbox_files, 'Value');

itemcount = length(thestrings);

betterselection = selection;

if(itemcount <= 0)

betterselection = 1;

else

if(selection > itemcount)

betterselection = itemcount;

end

end

%never use zero!!!! even if 1 is out of bounds.

if(isempty(betterselection) || betterselection <= 0)

betterselection = 1;

end

%uncomment for debug logging

%display(['Was: ' num2str(selection) ', cleaned: ' num2str(betterselection)]);

%update if we are out of bounds.

if(isempty(selection) || betterselection ~= selection)

set(handles.listbox_files, 'Value', betterselection);

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值