Я создаю простой MATLAB gui, используя GUIDE. У меня есть список элементов. Большую часть времени, это работает, как ожидалось, но иногда (как правило, после того, как я изменить фигуру с экскурсоводом) наполнении ListBox заставляет его исчезнуть вместе с этим сообщением:MATLAB GUIDE gui listbox периодически исчезает с кажущейся устаревшей ошибкой
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).
Любые идеи или информация по этому вопросу были бы очень признательны!
EDIT: спасибо Михаилу, я, кажется, решил проблему. Я отправляю свой код здесь для дальнейшего использования.
После много отладочной печати и дикого щелчка, я обнаружил, что иногда, когда вы запрашиваете список, что выбрано, вы получаете пустой результат. Эта и другие проблемы заставляли вещи уходить. Я переместил все свои письменные взаимодействия в список в централизованную функцию, и я написал несколько тестовых кодов для обеспечения того, чтобы все оставалось так, как должно.
Обратите внимание, что это было проверено в моей собственной среде (на 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
Привет, Михаил, спасибо за ответ! Мне все еще нужна дополнительная информация. Вы говорите, что список по умолчанию пуст, но НЕ должен быть пустым ... как это работает? Почему это работает для меня иногда, но не все время? Почему я не могу отладить эту ошибку? Я вполне уверен, что следую всем рекомендациям по этому uicontrol, и все же SOMETIMES падает на меня, в одинаковых условиях. Спасибо за помощь! – eli
Благодарим вас за отличные советы. Вы, очевидно, очень опытны в этом. Вы указали мне в правильном направлении, и теперь я делаю список вещей более тщательно. Я отправляю еще один ответ с моим кодом, но вы получаете приз =) – eli