我正在使用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上)进行了测试,没有经过广泛的测试。另外,代码有点多余,但是无论如何它让我感觉很好。 (即itemcount不能小于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 itemcount) betterselection = itemcount; end end %never use zero!!!! even if 1 is out of bounds. if(isempty(betterselection) || betterselection 0。如果属性min > max ,则列表框(而不是Popup)可以是多选,在这种情况下, value可以是数组(这也意味着为空),并且空string不会引起问题。 阅读MATLAB帮助以获取uicontrol属性string, value, min, max, listboxtop
实践中
- 您说它是在使用GUIDE编辑后显现的。 GUIDE在后台创建代码。编辑完旧代码后,有时仍保留在后面。
- 有时,MATLAB对一条语句中的顺序很敏感,即set(hlist, 'value', 2, 'string', {'aa','bb'})天真地将value设置为2直到string足够长并且使uicontrol无效。
- MATLAB是有缺陷的,每年每两次新版本都会删除旧的并带来新的错误。如果您确定调试模式无法正常运行,那么这是MATLAB支持的一种情况。我有与m代码,p代码和编译后的exe相同的代码-相同的代码表现不同,主要在于GUI的工作方式。
更多&回答...