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调用上下文菜单的句柄?

4

2 回答 2

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
于 2013-02-05T15:51:42.103 回答
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

使用此解决方案,我能够为两个“编辑文本”对象使用相同的上下文菜单。

于 2013-06-14T11:34:43.093 回答