2012-08-03 43 views
2

1-下面的代碼按一個鍵顯示按壓key.Try它的屬性,並觀察結果。爲什麼塞汀的SetMode入軌禁用定製KeyPressFcn事件處理程序,回調

figure('Name','Press keys to put event data in Command Window',... 
     'KeyPressFcn',@(obj,evt)disp(evt)); 

你會看到這樣的輸出(在按下空格鍵例如)

Character: ' ' 
    Modifier: {1x0 cell} 
      Key: 'space' 

2-現在簡單地將下面的代碼行添加到上述(或清除工作區之前簡單地執行它)

cameratoolbar('SetMode','orbit'); 

現在按任意鍵並沒有任何反應!該控件將不再轉移到您的服裝回叫功能! (這裏:@(obj,evt)disp(evt))。

同樣的事情發生了WindowButtonDownFcn,WindowButtonUpFcn了。

如何我能解決這個問題?我想在執行cameratoolbar('SetMode','orbit')後能夠處理KeyPressFcn或WindowButtonDownFcn。

+0

是否'cameratoolbar(「SetMode」,「軌道」);'工作本身(而不在回調中)? – Phonon 2012-08-03 19:22:31

+0

沒錯,但問題是沒有cameratoolbar(「SetMode」,「軌道」),它是不會調用cameratoolbar後的工作KeyPressFcn(「SetMode」,「軌道」) – 2012-08-03 20:05:53

回答

1

我找到了答案:一旦cameratoolbar('SetMode','orbit')被調用,其中一個會發生:數字的句柄丟失或事件處理程序獲取其默認值。我不確定哪一個。因此,我們可以下面的代碼添加到重新分配丟失的處理程序回到我們自己的回調函數:

set(gcf,'KeyPressFcn',@(obj,evt)disp(evt)) 
+0

好找到!這真的是糟糕的設計。 – Phonon 2012-08-03 20:51:36

相關問題