uicontextmenu
コンテキスト メニュー コンポーネントの作成
説明
は、現在の Figure にコンテキスト メニューを作成し、cm = uicontextmenuContextMenu オブジェクトを返します。Figure が存在しない場合は、MATLAB® が関数 figure を呼び出して Figure を作成します。
Figure でコンテキスト メニューが開くようにするには、次の手順も行わなければなりません。
同じ Figure 内の UI コンポーネントやグラフィックス オブジェクトにコンテキスト メニューを割り当てます。
コンテキスト メニュー内に少なくとも 1 つの子
Menuオブジェクトを作成します。
は、1 つ以上の名前と値の引数を使用して、cm = uicontextmenu(___,Name,Value)ContextMenu プロパティを指定します。たとえば、uicontextmenu("ContextMenuOpeningFcn",@myfunction) は、ユーザーがコンテキスト メニューを開いたときに myfunction を実行するコンテキスト メニューを作成します。このオプションは、前述の構文のすべての入力引数の組み合わせで使用できます。
例
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;
![]()
ボタンをもつ 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;
![]()
コンテキスト メニューを開くたびに、コマンド ウィンドウにメッセージが表示されるコンテキスト メニューを作成します。
Figure にライン プロットを作成します。その後、メニュー項目を 1 つ持つコンテキスト メニューを作成し、そのライン プロットに割り当てます。コンテキスト メニューが開くたびにコマンド ウィンドウに出力を表示するコールバック関数 ContextMenuOpeningFcn を作成します。
f = figure; cm = uicontextmenu(f); m = uimenu(cm,"Text","Menu1"); cm.ContextMenuOpeningFcn = @(src,event)disp("Context menu opened"); p = plot(1:10,"ContextMenu",cm);
コンテキスト メニューを表示するには、プロット ラインを右クリックします。コンテキスト メニューが開くと、コマンド ウィンドウに Context menu opened と表示されます。
![]()
R2023b 以降
ハイパーリンクを表示し、ユーザーがコンテキスト メニューを使用してリンクの URL をクリップボードにコピーできるようにするアプリを作成します。
hyperlinkApp.m という名前のファイルで、アプリを実装する関数を作成します。
UI Figure およびグリッド レイアウト マネージャーを作成してアプリをレイアウトします。
グリッド レイアウト マネージャーで 2 つのハイパーリンクを作成します。
[ハイパーリンクのコピー]メニュー項目をもつコンテキスト メニューを作成し、そのコンテキスト メニューを両方のハイパーリンクに割り当てます。copyHyperlinkという名前のコールバック関数を作成します。コールバック関数で、event.ContextObjectイベント データを使用して、右クリックされたHyperlinkオブジェクトにアクセスし、その URL をクリップボードにコピーします。関数をメニュー項目のMenuSelectedFcnコールバック プロパティに割り当てます。コールバックの詳細については、プログラムで作成したアプリ用のコールバックの作成を参照してください。
function hyperlinkApp fig = uifigure; g = uigridlayout(fig,[2, 1]); g.RowHeight = {'fit','fit'}; hlink1 = uihyperlink(g); hlink1.Text = "MathWorks Home"; hlink1.URL = "https://www.mathworks.com/"; hlink2 = uihyperlink(g); hlink2.Text = "MATLAB App Building"; hlink2.URL = "https://www.mathworks.com/products/matlab/app-designer.html"; cm = uicontextmenu(fig); m = uimenu(cm); m.Text = "Copy Hyperlink"; hlink1.ContextMenu = cm; hlink2.ContextMenu = cm; m.MenuSelectedFcn = @copyHyperlink; end function copyHyperlink(src,event) url = event.ContextObject.URL; clipboard("copy",url) end
R2023b より前: event.ContextObject イベント データを使用するのではなく、Figure の CurrentObject プロパティにクエリすることで、右クリックされた Hyperlink オブジェクトにアクセスするコールバック関数を作成します。
関数 hyperlinkApp を実行します。ハイパーリンクの 1 つを右クリックし、[ハイパーリンクのコピー] を選択してリンクの URL をコピーします。
![]()
R2023b 以降
テーブルを表示し、ユーザーがコンテキスト メニュー項目を使用して行を削除できるようにするアプリを作成します。ユーザーがテーブル データの行を右クリックしたときにのみ表示するコンテキスト メニュー項目をプログラムします。
tableApp.m という名前のファイルで、アプリを実装する関数を作成します。
ランダム データを使用して、UI Figure とテーブル UI コンポーネントを作成します。
[行の削除]メニュー項目をもつコンテキスト メニューを作成し、そのコンテキスト メニューをテーブルに割り当てます。コンテキスト メニューのアクションに応答する 2 つのコールバック関数を作成します。
deleteRow— 右クリックされたテーブル行にクエリし、その行を削除します。toggleVisibility— ユーザーがテーブル データの行を右クリックしたときに[行の削除]メニュー項目を表示し、それ以外のときにはその項目を非表示にします。
各コールバックで、
event.InteractionInformationコールバック イベント データを使用して、ユーザーがコンテキスト メニューを開くために右クリックしたテーブル内の位置に関する情報にアクセスします。関数
deleteRowをメニュー項目のMenuSelectedFcnコールバック プロパティに割り当て、関数toggleVisibilityをコンテキスト メニューのContextMenuOpeningFcnコールバック プロパティに割り当てます。コールバックの詳細については、プログラムで作成したアプリ用のコールバックの作成を参照してください。
function tableApp fig = uifigure; tbl = uitable(fig); tbl.Position = [20 20 400 300]; tbl.Data = randi(10,[10 4]); cm = uicontextmenu(fig); m = uimenu(cm); m.Text = "Delete Row"; tbl.ContextMenu = cm; m.MenuSelectedFcn = @deleteRow; cm.ContextMenuOpeningFcn = @(src,event)toggleVisibility(src,event,m); end function deleteRow(src,event) tbl = event.ContextObject; row = event.InteractionInformation.Row; tbl.Data(row,:) = []; end function toggleVisibility(src,event,m) row = event.InteractionInformation.Row; rowClicked = ~isempty(row); m.Visible = rowClicked; end
関数 tableApp を実行し、テーブルを右クリックします。コンテキスト メニューは、テーブル行を右クリックしたときにのみ表示されます。[行の削除] 項目を選択して、右クリックした行を削除します。
![]()
event.InteractionInformation プロパティに格納される特定のコールバック イベント データは、ユーザーがコンテキスト メニューを開くために右クリックした UI コンポーネントによって異なります。詳細については、Menu および ContextMenu のコールバック プロパティの説明を参照してください。
R2023b 以降
ツリー コンポーネントのコンテキスト メニューを作成します。ユーザーが右クリックしたツリー ノードのレベルに基づいて、コンテキスト メニュー アクションをカスタマイズします。
現在のフォルダー内の新規スクリプトに、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");
![]()
ユーザーがクリックして単一のツリー ノードまたはすべてのツリー ノードを展開できるメニュー項目を 1 つとサブメニューを 2 つ備えた、コンテキスト メニューを作成します。各サブメニューに対してコールバック関数 MenuSelectedFcn を指定し、ユーザーがメニュー オプションを選択すると実行されるようにします。
cm = uicontextmenu(fig); m1 = uimenu(cm,"Text","Expand..."); sbm1 = uimenu(m1,"Text","This Node", ... "MenuSelectedFcn",@expandSingle); sbm2 = uimenu(m1,"Text","All Nodes", ... "MenuSelectedFcn",@expandAll);
各ノードの ContextMenu プロパティを ContextMenu オブジェクトに設定することで、コンテキスト メニューを最上位のツリー ノードに割り当てます。
category1.ContextMenu = cm; category2.ContextMenu = cm; category3.ContextMenu = cm; category4.ContextMenu = cm;
ファイルの下部で、コールバック関数 expandSingle および expandAll を定義します。MATLAB がすべてのコールバック関数に渡すソースとイベント データを受け入れるように、関数を定義します。event.InteractionInformation プロパティおよび event.ContextObject プロパティを使用して、ユーザーがコンテキスト メニューを開くために右クリックした位置に関する情報にアクセスします。
function expandSingle(src,event) node = event.InteractionInformation.Node; expand(node) end function expandAll(src,event,t) n = event.ContextObject; t = ancestor(n,"uitree"); expand(t) end
スクリプトを保存して実行します。任意の最上位のツリー ノードを右クリックし、コンテキスト メニューを表示します。
![]()
入力引数
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: uicontextmenu(ContextMenuOpeningFcn=@myfunction) は、ユーザーがコンテキスト メニューを開いたときに myfunction を実行するコンテキスト メニューを作成します。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。
例: uicontextmenu("ContextMenuOpeningFcn",@myfunction) は、ユーザーがコンテキスト メニューを開いたときに myfunction を実行するコンテキスト メニューを作成します。
メモ
ここには一部のプロパティのみを示します。完全な一覧については、ContextMenu を参照してください。
コンテキスト メニューを開くコールバック関数。次の値のいずれかとして指定します。
関数ハンドル。
最初の要素が関数ハンドルである cell 配列。cell 配列内のその後の要素はコールバック関数に渡される引数です。
有効な MATLAB 式を含む文字ベクトル (非推奨)。MATLAB は、この式をベース ワークスペースで評価します。
コールバックのプロパティ値を関数ハンドル、cell 配列または文字ベクトルとして指定する方法の詳細については、コールバック関数の指定を参照してください。
このコールバック関数は、ユーザー操作に応答してコンテキスト メニューが開くときに実行されます。このコールバック関数を使用して、ユーザーが何を右クリックしたのかに基づいてコンテキスト メニューの外観をカスタマイズできます。
このコールバック関数は、ユーザーのアプリ操作に関する特定の情報にアクセスできます。MATLAB は、この情報を ContextMenuOpeningData オブジェクトに格納して、2 番目の引数としてコールバック関数に渡します。App Designer では、引数は event という名前です。ドット表記を使用して、オブジェクトのプロパティをクエリできます。たとえば、event.ContextObject は、コンテキスト メニューを開くためにユーザーが右クリックしたコンポーネントに関する情報を返します。
メモ
任意のコンテキスト メニューに対して ContextMenuOpeningFcn コールバックを指定できますが、コールバック イベント データの ContextMenuOpeningData オブジェクトは、コンテキスト メニューが以下の両方の条件を満たしている場合にのみ使用可能です。
コンテキスト メニューが
uifigureベースのアプリ (App Designer で作成されたアプリなど) に関連付けられている。AxesオブジェクトやLineオブジェクトなどのグラフィックス オブジェクトではなく、UI コンポーネント、または UI コンポーネントのみを含むコンテナーにコンテキスト メニューが関連付けられている。
次の表に、ContextMenuOpeningData オブジェクトのプロパティを示します。
| プロパティ | 値 |
|---|---|
ContextObject | アプリ ユーザーがコンテキスト メニューを開くために右クリックしたオブジェクト |
InteractionInformation | アプリ ユーザーがコンテキスト メニューを開くために右クリックしたコンポーネント内の位置に関する情報。この情報は、 たとえば、 |
Source | コールバックを実行するコンテキスト メニュー オブジェクト |
EventName | 'ContextMenuOpening' |
次の表に、InteractionInformation オブジェクトのプロパティを示します。プロパティは、アプリ ユーザーがコンテキスト メニューを開くために右クリックしたオブジェクトによって異なります。
ContextObject | InteractionInformation プロパティ | 値 |
|---|---|---|
| 任意 | Location |
|
ScreenLocation | プライマリ ディスプレイの左下隅を基準とした、ユーザーが右クリックした位置。
| |
Table | DisplayRow | ユーザーの右クリック位置に視覚的に表示されているテーブルの行。数値スカラーとして返されます。 ユーザーがテーブルを並べ替えていない場合、 |
DisplayColumn | ユーザーの右クリック位置に視覚的に表示されているテーブルの列。数値スカラーとして返されます。 ユーザーがテーブルを再配列していない場合、 | |
Row | ユーザーの右クリック位置に対応する元のテーブル データの行。数値スカラーとして返されます。 ユーザーがテーブルを並べ替えていない場合、 | |
Column | ユーザーの右クリック位置に対応する元のテーブル データの列。数値スカラーとして返されます。 ユーザーがテーブルを再配列していない場合、 | |
RowHeader | ユーザーがテーブルの行ヘッダーを右クリックしたかどうか。logical 0 (false) または logical 1 (true) として返されます。 | |
ColumnHeader | ユーザーがテーブルの列ヘッダーを右クリックしたかどうか。logical 0 (false) または logical 1 (true) として返されます。 | |
Tree | Node | 右クリックされたノード。 ユーザーが右クリックしたツリーの領域がノードに関連付けられていない場合、 |
Level | 右クリックされたノードのレベル。数値スカラーとして返されます。 ユーザーが右クリックしたツリーの領域がノードに関連付けられていない場合、 | |
ListBox | Item | 右クリックされたリスト ボックス項目のインデックス。数値スカラーとして返されます。 ユーザーが右クリックしたリスト ボックスの領域が項目に関連付けられていない場合、 |
コンテキスト メニューの子。空の 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;

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 つのメニュー項目をもつ必要があります。コンテキスト メニューを対話的に開くには、コンテキスト メニューに関連付けられているコンポーネントにフォーカスがあるときにキーボード ショートカット Shift+F10 を使用できます。
バージョン履歴
R2006a より前に導入ContextMenuOpeningFcn コールバックは、コールバックが UI コンポーネント上のコンテキスト メニューに関連付けられている場合に追加のイベント データをもちます。このデータを使用して、アプリでコンテキスト メニューをカスタマイズおよび共有します。
| イベント データ プロパティ | 説明 |
|---|---|
ContextObject | アプリ ユーザーがコンテキスト メニューを開くために右クリックしたオブジェクト |
InteractionInformation | アプリ ユーザーがコンテキスト メニューを開くために右クリックしたコンポーネント内の位置 (テーブルのセルなど) に関する情報 |
コンテキスト メニューを作成して Tree オブジェクトに割り当てた場合、そのコンテキスト メニューは、ツリー ノードを含む領域など、ツリーの任意の場所を右クリックしたときに表示されます。個別の各ツリー ノードではなくツリーにコンテキスト メニューを設定することで、ツリーのすべてのノードで単一のコンテキスト メニューを共有できます。
個別の TreeNode オブジェクトにコンテキスト メニューを設定した場合、Tree オブジェクトにコンテキスト メニューが割り当てられていても、ノードを右クリックすると、ツリー ノードのコンテキスト メニューが表示されます。
以前は、ツリー ノードの下のツリー部分を右クリックした場合にのみツリーのコンテキスト メニューが表示されていました。この動作を維持するには、ツリー ノードのない領域が右クリックされたときにのみコンテキスト メニューを表示する ContextMenuOpeningFcn コールバックを作成してください。
fig = uifigure; cm = uicontextmenu(fig,ContextMenuOpeningFcn=@hideMenu); m1 = uimenu(cm,Text="Menu Item"); t = uitree(fig,ContextMenu=cm); n1 = uitreenode(t); function hideMenu(src,event) if isprop(event.InteractionInformation,"Node") src.Visible = "off"; end end
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)