2013-02-05 41 views
2

在matlab中,如果我的上下文菜單的句柄爲cxmenu_Options,該句柄鏈接到不同的三個uicontrol對象。獲取調用菜單的句柄

裏面的上下文菜單回調函數:

代碼演示:

function demoOnContextMenus 
hFigure = figure; 
hControl = uicontrol(    ... 
    'Parent' , hFigure   , ... 
    'Style' , 'Edit'    , ... 
    'Position' , [200 200 180 40] , ... 
    'Tag' , 'IamControl'  , ... 
    'String' , 'UI-Control'); 

hCxMenu = uicontextmenu(   ... 
    'Tag' , 'IamMenu'  , ... 
    'Callback',@CxMenuCallback); 

set(hControl,'UIContextMenu',hCxMenu); 

    function CxMenuCallback(objectHandle,eventData) 
     tag = get(gcbo,'tag'); 
     helpdlg(tag); 
    end 
end 

我怎樣才能得到uicontrol其上下文菜單已經從所謂的處理?

回答

2

有訪問手柄兩種方式:

gco返回當前選擇的對象的句柄。因此tag = get(gco,'tag')將返回IamControl

或者,你可以直接通過句柄回調(如果層次結構變得更加複雜,因爲gco只會給你的最終鏈的頂層手柄):

handleToPass = hControl; 

hCxMenu = uicontextmenu(   ... 
    'Tag' , 'IamMenu'  , ... 
    'Callback',@(oh,evt)CxMenuCallback(oh,evt,handleToPass)); 

set(hControl,'UIContextMenu',hCxMenu); 

    function CxMenuCallback(objectHandle,eventData,handleOfCaller) 
     tag = get(handleOfCaller,'tag'); 
     helpdlg(tag); 
    end 
+0

'gcbo'將導致**上下文菜單**的句柄! –

+0

@SamehKamal:對不起。你能舉個小例子嗎? – Jonas

+0

代碼示例已添加到quesiton –

0

使用Matlab的指導環境我找到了另一種方法來確定調用者。

命令gco(獲取當前對象)只是完成了這項工作。

在我的情況下,上下文菜單提供了打開在Windows資源管理器中的「編輯文本」對象中指定的路徑的選項。

function open_in_browser_Callback(hObject, eventdata, handles) 

cur_obj=gco; 

cur_path=get(cur_obj,'String') 
if(~isempty(cur_path)) 
    winopen(cur_path); 
end 

使用此解決方案,我可以爲兩個「編輯文本」對象使用相同的上下文菜單。