Main Content

uicontextmenu

コンテキスト メニュー コンポーネントの作成

説明

cm = uicontextmenu は、現在の Figure にコンテキスト メニューを作成し、ContextMenu オブジェクトを返します。Figure が存在しない場合は、MATLAB® が関数 figure を呼び出して Figure を作成します。

Figure でコンテキスト メニューが開くようにするには、次の手順も行わなければなりません。

  • 同じ Figure 内の UI コンポーネントやグラフィックス オブジェクトにコンテキスト メニューを割り当てます。

  • コンテキスト メニュー内に少なくとも 1 つの子 Menu オブジェクトを作成します。

cm = uicontextmenu(parent) は、指定された親 Figure にコンテキスト メニューを作成します。親には、関数 uifigure または関数 figure のいずれかで作成された Figure を指定できます。

cm = uicontextmenu(___,Name,Value) は、1 つ以上の名前と値の引数を使用して指定されたプロパティ値をもつコンテキスト メニューを作成します。前述の構文のいずれかを使用して、名前と値の引数を指定します。

すべて折りたたむ

UI Figure に 2 つのメニュー項目をもつコンテキスト メニューを作成します。ContextMenu オブジェクトに figure の ContextMenu プロパティを設定して、figure 自体にコンテキスト メニューを割り当てます。コンテキスト メニューを表示するには、Figure ウィンドウの任意の場所を右クリックします。

fig = uifigure;

cm = uicontextmenu(fig);
m1 = uimenu(cm,'Text','Menu1');
m2 = uimenu(cm,'Text','Menu2');

fig.ContextMenu = cm;

Context menu with two options: "Menu1" and "Menu2"

ボタンをもつ UI Figure を作成します。次に、Figure 内に 2 つのメニュー項目をもつコンテキスト メニューを作成し、そのコンテキスト メニューをボタンに割り当てます。コンテキスト メニューを表示するには、ボタンを右クリックします。

fig = uifigure;
btn = uibutton(fig);

cm = uicontextmenu(fig);
m1 = uimenu(cm,"Text","Option 1");
m2 = uimenu(cm,"Text","Option 2");

btn.ContextMenu = cm;

Context menu for a button with two options: "Option 1" and "Option 2"

ツリー コンポーネントのコンテキスト メニューを作成します。コンテキスト メニューをツリー内の最上位ノードすべてに割り当てます。

現在のフォルダー内の新規スクリプトに、UI figure を作成します。次に、4 つの最上位ノードと入れ子ノードのセットをもつツリーを作成します。

fig = uifigure;

t = uitree(fig,"Position",[20 200 175 100]);

category1 = uitreenode(t,"Text","Runners");
r1 = uitreenode(category1,"Text","Joe");
r2 = uitreenode(category1,"Text","Linda");

category2 = uitreenode(t,"Text","Cyclists");
c1 = uitreenode(category2,"Text","Rajeev");

category3 = uitreenode(t,"Text","Hikers");
h1 = uitreenode(category3,"Text","Jack");

category4 = uitreenode(t,"Text","Swimmers");
s1 = uitreenode(category4,"Text","Logan");

Tree with four collapsed top-level nodes

ユーザーがクリックして単一のツリー ノードまたはすべてのツリー ノードを展開できるメニュー項目を 1 つとサブメニューを 2 つ備えた、コンテキスト メニューを作成します。各サブメニューに対してコールバック関数 MenuSelectedFcn を指定し、ユーザーがメニュー オプションを選択すると実行されるようにします。関連するアプリ オブジェクトを入力として各関数に渡し、コールバック関数内からアプリ データにアクセスします。

cm = uicontextmenu(fig);
m1 = uimenu(cm,"Text","Expand...");

sbm1 = uimenu(m1,"Text","This Node", ...
    "MenuSelectedFcn",{@expandSingle,fig});
sbm2 = uimenu(m1,"Text","All Nodes", ...
    "MenuSelectedFcn",{@expandAll,t});

各ノードの ContextMenu プロパティを ContextMenu オブジェクトに設定することで、コンテキスト メニューを最上位のツリー ノードに割り当てます。

category1.ContextMenu = cm;
category2.ContextMenu = cm;
category3.ContextMenu = cm;
category4.ContextMenu = cm;

ファイルの下部で、コールバック関数 expandSingle および expandAll を定義します。MATLAB がすべてのコールバック関数に渡すソースとイベント データを受け入れるように、関数を定義します。

関数 expandSingle を定義して、ツリーを含む UI figure オブジェクトも受け入れるようにし、また、Figure の CurrentObject プロパティを使用して、コンテキスト メニューを表示するためにクリックされたツリー ノードを特定するようにします。次に、ノードを展開します。

ツリー オブジェクトも受け入れるように関数 expandAll を定義し、ツリー内のすべてのノードを展開します。

function expandSingle(src,event,f)
node = f.CurrentObject;
expand(node)
end

function expandAll(src,event,t)
expand(t)
end

スクリプトを保存して実行します。任意の最上位のツリー ノードを右クリックし、コンテキスト メニューを表示します。

A context menu associated with the "Cyclists" node. The "Expand" menu option is highlighted, and there is a submenu with options "This Node" and "All Nodes".

コンテキスト メニューを開くたびに、コマンド ウィンドウにメッセージが表示されるコンテキスト メニューを作成します。

従来の Figure を使用し、ライン プロットを作成します。その後、メニュー項目を 1 つ持つコンテキスト メニューを作成し、そのライン プロットに割り当てます。コンテキスト メニューが開くたびにコマンド ウィンドウに出力を表示するコールバック関数 ContextMenuOpeningFcn を作成します。

f = figure;
p = plot(1:10);

cm = uicontextmenu(f);
m = uimenu(cm,"Text","Menu1");
cm.ContextMenuOpeningFcn = @(src,event)disp("Context menu opened");

p.ContextMenu = cm;

コンテキスト メニューを表示するには、プロット ラインを右クリックします。コンテキスト メニューが開くと、コマンド ウィンドウにも Context menu opened というメッセージが表示されます。

The context menu with a menu item called "Menu1" displays on the plot line.

入力引数

すべて折りたたむ

親 Figure。関数 uifigure または関数 figure で作成された Figure オブジェクトとして指定します。親 Figure を指定しない場合は、MATLAB で関数 figure が呼び出されて親となる Figure が作成されます。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: uicontextmenu("ContextMenuOpeningFcn",@myfunction) は、ユーザーがコンテキスト メニューを開くときに実行される関数として myfunction を指定します。

メモ

ここでは、プロパティの一部だけを紹介しています。完全な一覧については、ContextMenu のプロパティ を参照してください。

コンテキスト メニューを開くコールバック関数。次の値のいずれかとして指定します。

  • 関数ハンドル。

  • 最初の要素が関数ハンドルである cell 配列。cell 配列内のその後の要素はコールバック関数に渡される引数です。

  • 有効な MATLAB 式を含む文字ベクトル (非推奨)。MATLAB は、この式をベース ワークスペースで評価します。

コールバックのプロパティ値を関数ハンドル、cell 配列または文字ベクトルとして指定する方法の詳細については、コールバック関数の指定を参照してください。

コンテキスト メニューの子。空の GraphicsPlaceholder または Menu オブジェクトのベクトルとして返されます。

Children プロパティを使用して子の追加や削除を行うことはできません。このプロパティは、子のリストの表示や子メニュー項目の並べ替えに使用します。この配列の子の順序は、開いたコンテキスト メニューでのメニュー項目表示順序の逆になります。

たとえば、このコードは 3 つのコンテキスト メニューを作成します。実行中のアプリでコンテキスト メニューを開くと、最初のメニュー項目として Menu1 が表示されます。

fig = uifigure;
cm = uicontextmenu(fig);
m1 = uimenu(cm,'Text','Menu1');
m2 = uimenu(cm,'Text','Menu2');
m3 = uimenu(cm,'Text','Menu3');
fig.ContextMenu = cm;
Context menu with three menu items.

cm.Children は、メニュー項目のリストを逆順で返します。

cm.Children
ans = 

  3×1 Menu array:

  Menu    (Menu3)
  Menu    (Menu2)
  Menu    (Menu1)

HandleVisibility プロパティが 'off' に設定されているオブジェクトは Children プロパティにリストされません。

子をこのリストに追加するには、別の Menu オブジェクトの Parent プロパティをこの ContextMenu オブジェクトに設定します。

ヒント

  • 実行中のアプリでコンテキスト メニューを対話的に表示するには、次を満たさなければなりません。

    • 少なくとも 1 つのメニュー項目をもつ。

    • 同じ Figure の UI コンポーネントまたはグラフィックス オブジェクトに割り当てられている。

  • コンテキスト メニューをプログラムによって開くには、関数 open を使用します。コンテキスト メニューは、関数 uifigure を使用して作成された Figure の子でなければなりません。コンテキスト メニューを表示するには、関数 uimenu を使用して作成された、少なくとも 1 つのメニュー項目をもつ必要があります。

バージョン履歴

R2006a より前に導入