我設計了一個用戶界面,我希望讓某些按鍵在用戶界面中啓動某些操作。我試着爲圖的keypressfcn回調函數定義一個函數,但是如果任何其他UI元素是活動元素,則調用該元素的keypressfcn(這是空的)。我怎樣才能捕捉整個圖形的按鍵,而不必爲UI中的所有子元素分配相同的keypressfcn函數句柄?傳遞給父項的Matlab事件
3
A
回答
3
我發現WindowKeyPressFcn回調做我想要的。這是圖的一個屬性,但要小心,它確實如它所說 - 它捕獲按鍵,而這是活動圖形(不管活動元素是什麼)。考慮一下,如果你真的想要這個,例如當一個編輯元素有焦點時,WindowKeyPressFcn會在輸入時觸發。
2
恐怕你得定義每一個uicontrol
的KeyPressFcn
。考慮一下:如果你設計的是Matlab,你將如何同時保持選項打開,以便用戶爲不同的uicontrols
分配不同的按鍵功能,同時還允許它們只爲所有的uicontrols
使用一個主功能?
每個新的uicontrol
將必須知道你想要這樣做,這相當於分配它的KeyPressFcn
。
做到這一點,最簡單的方法是寫一些通用的功能,像
function KeyPressFcnFwd(obj,event)
prn = get(obj, 'parent')
fcn = get(prn, 'KeyPressFcn');
fcn(prn,event);
end
,然後這樣定義uicontrols:
button = uicontrol(...
'style', 'pushbutton', ...
...
'KeyPressFcn', @KeyPressFcnFwd);
做它像這樣會讓一些單選按鈕按鍵呼叫它的父母的KeyPressFcn
,這是一個無線電組,然後將呼叫轉發給它的母公司的KeyPressFcn
,這是一個uipanel,然後將呼叫轉發給它的父母的KeyPressFcn
,最後是你的數字KeyPressFcn
。
簡而言之:無論您的uicontrol
是多麼深的嵌套,呼叫將始終被轉發到數字。
如果定義了此功能在創建「主」圖中的函數嵌套功能,你可以做到這一切有點更有效:
function main %# toplevel function
...
mainFig = figure(...) %# your main figure
...
%# nested function
function KeyPressFcnFwd(obj,event)
fcn = get(mainFig, 'KeyPressFcn');
fcn(mainFig,event);
end
...
%# Function to build the GUI
%# can be a subfunction, nested function or external function
populateMainWin(mainFig, @KeyPressFcnFwd);
...
end
,這樣你就沒有調用KeyPressFcn
的整棵樹的開銷。
在的情況下可能有很多的樣板(這是一個很好的候選人),我通常定義一些速記像
function handle = uibutton(parent, text, varargin)
handle = uicontrol(...
'parent', parent, ...
'style' , 'pushbutton', ...
'units' , 'normalized', ...
'string', text, ...
'KeyPressFcn', @KeyPressFcnFwd, ...
varargin{:});
end
讓我的代碼保持可讀。
相關問題
- 1. 將MouseWheel事件從子項傳遞給父項
- 2. 如何將鼠標事件從父項傳遞給子項iframe
- 3. 將listview子項事件傳遞給父項
- 4. 將事件傳遞給父視圖?
- 5. 將事件傳遞給父節點
- 6. 將子選項卡內容中的「事件」傳遞給父TabActivity
- 7. 如何識別哪個事件通過nextResponder傳遞給父項?
- 8. 將彈出的值傳遞給父項
- 9. 如何將TouchUpInside事件傳遞給UIButton,而不將它傳遞給父視圖?
- 10. 反應 - 將ref傳遞給父項
- 11. 如何將值傳遞給父項tabgroupactivity?
- 12. 將事件傳遞給UIScrollView
- 13. Console.ReadLine()傳遞給C#事件
- 14. 如何將事件傳遞給父窗口小部件
- 15. 在MFC的CStatic中消耗事件並將它們傳遞給父項
- 16. 如何在Android上將視圖的onClick事件傳遞給其父項?
- 17. 如何將控件從子項傳遞給父項
- 18. NodeJS事件是否傳遞給它們的父函數?
- 19. 將onclick事件的父窗體傳遞給javascript函數
- 20. 從用戶控件中選擇的傳遞值傳遞給父項
- 21. Matlab滑塊將值傳遞給事件處理函數
- 22. 如何將文件名傳遞給MATLAB?
- 23. 將子組件的變量值傳遞給父項
- 24. 將一個事件從子元素傳遞給曾祖父
- 25. 將UICollectionView觸發事件傳遞給其父母UITableViewCell
- 26. 在Backbone.js中,如何阻止事件傳遞給父視圖?
- 27. 將觸摸事件傳遞給父視圖
- 28. 如何將checkbox onclick事件傳遞給父級onclick?
- 29. 如何將ListView onClick事件傳遞給父視圖
- 30. 將事件從孩子傳遞給父母