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

时间:2015-01-14 13:15:07

标签: matlab events listener matlab-guide

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

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

在函数myCallback中,我对在轴上绘制的对象进行了一些更改。我还使这个对象可选,这样一旦用户点击对象就会调用另一个回调。我现在想用刚刚选中的对象初始化滑块,但不调用函数myCallback

也就是说,我需要像

这样的东西
setWithoutCallingListener(handles.mySlider, ValueOfSelectedObject);

这可能吗?

1 个答案:

答案 0 :(得分:2)

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

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