列表框重置ListboxTop无视命令

3视图(30天)
AstroGuy1984
AstroGuy1984 2017年4月24日
评论道: 科里2020年9月18日
我写一个GUI使用2016(没有指南)。一个元素在这个GUI uicontrol列表框,用户可以选择多个元素。这个列表框内创建面板如下所示:
uicontrol (“父”selSeries,“风格”,列表框的,“最小值”0,“马克斯”1 e3,
“字形大小”8“单位”,“归一化”,“位置”,(0.02,0.02,0.94,0.94),
“标签”,“selectSeriesChoiceBox”,“回调”@selectSeries_Callback)
selSeries在哪一个面板内uitab对象在uitabgroup驻留在图中。
在回调,我做的第一件事是调用“旧”数据选择和使用一些逻辑,引用它的“新”选择。的目的是允许用户点击列表如清单,而无需使用CTRL或SHIFT多个选择。我使用get / setappdata完成这个,是我渴望的行为。
当我设置新值,然而,MATLAB(设计)会自动改变滚动条的位置。我想留住用户的滚动条的位置。所以我试着更新属性“ListboxTop”后设置新的列表框的值。这个过程没有错误,但它将被忽略。
函数selectSeries_Callback (hObject、事件)
%的逻辑来确定新值向量,newValue
userTop = hObject.ListboxTop;
hObject。值= newValue;
hObject。ListboxTop = userTop;
%其他代码
结束
我也试过的方法设置属性使用设置(hObject, ListboxTop, userTop)。
增加了神秘的行为是调试。如果我再次尝试设置的属性在壳内,列表框再次不理我没有错误。然而,如果我把所有属性的壳,(如得到(hObject)或点击“所有属性”),然后设置属性,它工作。
这给了我一个快速解决方案的想法尝试做这样的代码:
函数selectSeries_Callback (hObject、事件)
%的逻辑来确定新值
userTop = hObject.ListboxTop;
hObject。值= newValue;
tmp = (hObject);
hObject。ListboxTop = userTop;
%其他代码
结束
这没有解决我的问题。列表框又仍在底部位置,不设为我问。然而,如果我在tmp设置一个断点,然后F10通过这两条线,它的工作原理!
这意味着,我有一些微妙的我失踪的活动对象。可能正在加载断点时(或一些)?我也试着在一个暂停,看看可能需要跟上。
任何见解,可以提供解决这将不胜感激。谢谢!
4评论
科里
科里 2020年4月9日
我用matlab r2019b仍然有同样的问题。我跟踪的用户已经选择无需他们按住控制和如果我设置listboxtop离开回调函数之前它不工作,除非我一步通过该计划。

登录置评。

答案(2)

Prashant Arora
Prashant Arora 2017年4月27日
你好,
这似乎为我工作。我创建了一个uicontrol列表框,但在一个数字。
h = uicontrol (“父”gcf,“风格”,列表框的,“最小值”0,“马克斯”1 e3,
“字形大小”8“单位”,“归一化”,“位置”,(0.02,0.02,0.94,0.94),
“标签”,“selectSeriesChoiceBox”)
%添加一些字符串
h。字符串= repmat ({“你好”;“如何”;“是”;“你”5)};
然后我添加回调如下
函数selectSeriesChoiceBox(对象、事件)
newValue =对象。值+ 1;
userTop = object.ListboxTop;
对象。值= newValue;
对象。ListboxTop = userTop + 1;
结束
一件事,你可以尝试使用“drawnow”命令。这将更新MATLAB图,也许这就是失踪。

迈克尔Daenen
迈克尔Daenen 2020年9月18日
编辑:迈克尔Daenen 2020年9月18日
我找到了一个解决方案通过添加两个额外的命令。
h = uicontrol (“风格”,“列表”,);
暂停(0.1);
get (h,“ListboxTop”);
集(h,“ListboxTop”1);
1评论
科里
科里 2020年9月18日
我认为这个解决方案的关键是要求顶部(和数据)使用之前立即设置它。
也可以考虑使用drawnow代替暂停更快的执行。

登录置评。

类别

找到更多的在交互控制和回调帮助中心文件交换

下载188bet金宝搏

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!