在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
句柄?
答案 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
通过这个解决方案,我可以为两个“编辑文本”对象使用相同的上下文菜单。