获取上下文菜单调用者的句柄

时间:2013-02-05 14:11:09

标签: matlab callback contextmenu

在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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

通过这个解决方案,我可以为两个“编辑文本”对象使用相同的上下文菜单。