我正在使用 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 <= 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