2

matlab で、異なる 3 つのオブジェクト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

ハンドルにアクセスするには、次の 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

このソリューションにより、2 つの「テキストの編集」オブジェクトに対して同じコンテキスト メニューを使用することができました。

于 2013-06-14T11:34:43.093 に答える