在不通知侦听器的情况下更改滑块的值

Change value of slider without notifying listener

我正在使用 GUIDE 创建一个 GUI,并在我的 GUI 中添加了一个滑块。之后,我为我的滑块添加了一个监听器

myListener = addlistener(handles.mySlider,'Value','PostSet',@(src,evnt)myCallback(src,evnt, handles.figure1));

在函数 myCallback 中,我对绘制在轴上的对象做了一些更改。我还使该对象可选择,以便在用户单击该对象时调用另一个回调。我现在想用刚刚选择的对象的适当值初始化滑块,但不调用函数 myCallback.

也就是说,我需要这样的东西

setWithoutCallingListener(handles.mySlider, ValueOfSelectedObject);

这可能吗?

暂时停用侦听器的最简单方法是向句柄结构添加标志。 例如,在初始化例程的开头,您设置 handles.isInitializing=true; guidata(hObject,handles);,并将 if handles.isInitializing, return; end 添加到侦听器回调的开头。请记住在初始化例程结束时将标志设置为 false

或者,不使用侦听器,而是让所有 UI 元素回调调用函数 updateUI(handles)(除了潜在的输入检查;例如,您可能希望确保滑块只能采用整数值),它负责(1)调整所有相互依赖的值(例如,如果你有一个滑块和一个需要同步的编辑文本框),以及(2)产生你需要更新的任何进程剧情。这样做的好处是,如果您通过函数修改元素,则 UI 元素回调不会触发。