我正在使用指南构建一个简单的Matlab图形用户界面。我有一个物品清单。大多数情况下,它按预期工作,但有时(通常在我用指南编辑图形后)填充列表框会导致它与此消息一起消失:

Warning: single-selection listbox control requires a scalar Value

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

这种行为不利于调试!当我跨过时,它会像预期的那样工作(我怀疑它是一种线程竞赛或其他什么)。此外,在相同的条件下,它通常在重新启动matlab环境后消失。

在这个错误上找到的所有文档都引用了以前的/古老版本的matlab(我使用的是r2100a)。

任何关于这个主题的想法或信息都将非常感谢!

编辑:多亏了米哈伊尔,我似乎解决了这个问题。我在这里发布我的代码以备将来参考。

经过大量的调试打印和疯狂的点击之后,我发现有时当您询问列表框所选内容时,会得到一个空的结果。这和其他问题使事情变得一团糟。我将所有的编写交互都移到了列表框中,并编写了一些测试代码,以确保事情按它们应该的方式进行。

请注意,这已经在我自己的环境中进行了测试(在R2010A上),并且没有广泛测试。另外,代码有点多余,但它还是让我感觉很好。(I.

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

Logo

一站式 AI 云服务平台

更多推荐