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 のコンテキスト メニューの作成
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 コンポーネントのコンテキスト メニューの作成
ボタンをもつ 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
を参照してください。
ContextMenuOpeningFcn
— コンテキスト メニューを開くコールバック関数
''
(既定値) | 関数ハンドル | cell 配列 | 文字ベクトル
コンテキスト メニューを開くコールバック関数。次の値のいずれかとして指定します。
関数ハンドル。
最初の要素が関数ハンドルである 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 | 右クリックされたリスト ボックス項目のインデックス。数値スカラーとして返されます。 ユーザーが右クリックしたリスト ボックスの領域が項目に関連付けられていない場合、 |
Children
— コンテキスト メニューの子
空の GraphicsPlaceholder
配列 (既定値) | Menu
オブジェクトのベクトル
コンテキスト メニューの子。空の 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 より前に導入R2023b: コンテキスト メニューを開く際に使用されるアクションに関する情報へのアクセス
ContextMenuOpeningFcn
コールバックは、コールバックが UI コンポーネント上のコンテキスト メニューに関連付けられている場合に追加のイベント データをもちます。このデータを使用して、アプリでコンテキスト メニューをカスタマイズおよび共有します。
イベント データ プロパティ | 説明 |
---|---|
ContextObject | アプリ ユーザーがコンテキスト メニューを開くために右クリックしたオブジェクト |
InteractionInformation | アプリ ユーザーがコンテキスト メニューを開くために右クリックしたコンポーネント内の位置 (テーブルのセルなど) に関する情報 |
R2023b: ツリーのコンテキスト メニューはツリーの任意の場所を右クリックすると表示される
コンテキスト メニューを作成して 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 コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)