2015-01-14 19 views
1

我正在使用GUIDE創建一個GUI,並在我的GUI中添加了一個滑塊。後來,我添加了一個偵聽器,以我的滑塊在不通知監聽器的情況下更改滑塊的值

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

在功能myCallback我做一些改變的對象我在一個軸上繪製。我還使這個對象可選,以便在用戶點擊對象後調用另一個回調。我現在想用剛剛被選中的對象的適當值初始化滑塊,但不調用函數myCallback

也就是說,我需要像

setWithoutCallingListener(handles.mySlider, ValueOfSelectedObject); 

這可能嗎?

+0

通常的方法是首先初始化,然後添加一個監聽器。 – Daniel

+0

好吧,這意味着我需要刪除監聽器,每次選擇不同的對象時再初始化和添加它們。滑塊對所有顯示的對象都有效。 – user1809923

回答

2

臨時停用偵聽器的最簡單方法是向句柄結構添加一個標誌。 例如,在初始化例程開始時,您設置了handles.isInitializing=true; guidata(hObject,handles);,並將if handles.isInitializing, return; end添加到偵聽器回調的開頭。請記住在初始化例程結束時將標誌設置爲false

或者,不要使用偵聽器,而是要讓所有UI元素回調調用函數updateUI(handles)(除了可能的輸入檢查;例如,您可能希望確保滑塊只能取整數值) (1)調整所有相互依賴的值(例如,如果你有一個滑塊和需要同步的編輯文本框),以及(2)產生你需要更新圖的任何過程。這具有如下優點:如果通過函數修改元素,UI元素回調不會觸發。

+0

感謝喬納斯,我結束了使用你提到的第一種方式。 – user1809923

相關問題