Main Content

uicontextmenu

创建上下文菜单组件

说明

cm = uicontextmenu 在当前图窗中创建一个上下文菜单,并返回 ContextMenu 对象。如果图窗不存在,则 MATLAB® 调用 figure 函数以创建一个图窗。

要使该上下文菜单能够在图窗中打开,您还必须执行以下步骤:

  • 将该上下文菜单分配给同一图窗中的 UI 组件或图形对象。

  • 在该上下文菜单中创建至少一个子级 Menu 对象。

示例

cm = uicontextmenu(parent) 在指定的父图窗中创建上下文菜单。父级可以是使用 uifigurefigure 函数创建的图窗。

示例

cm = uicontextmenu(___,Name,Value) 创建一个上下文菜单,其中包含使用一个或多个名称-值参数指定的属性值。使用上述任一语法指定名称-值参数。

示例

全部折叠

在 UI 图窗中创建一个具有两个菜单项的上下文菜单。通过将图窗的 ContextMenu 属性设置为 ContextMenu 对象,将该上下文菜单分配给图窗本身。要查看上下文菜单,请右键点击图窗窗口中的任意位置。

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 图窗。然后,在该图窗中创建一个包含两个菜单项的上下文菜单,并将该上下文菜单分配给该按钮。要查看上下文菜单,请右键点击该按钮。

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 图窗。然后,创建一个树,其中包含四个顶层节点和一组嵌套节点。

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

创建一个上下文菜单,其中包含一个菜单项和两个子菜单,用户可以点击该上下文菜单来展开单个树节点或所有树节点。对于每个子菜单,指定当用户选择菜单选项时要执行的 MenuSelectedFcn 回调函数。将相关的 App 对象作为输入传递给每个函数,以便从回调函数中访问 App 数据。

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;

在文件的底部,定义 expandSingleexpandAll 回调函数。定义函数来接受 MATLAB 传递给所有回调函数的源和事件数据。

定义 expandSingle 函数来同时接受包含树的 UI 图窗对象,并使用图窗的 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".

创建这样一个上下文菜单,每次打开该上下文菜单时都会在命令行窗口中显示一条消息。

在传统图窗中创建一个线图。然后,创建包含一个菜单项的上下文菜单,并将该菜单分配给线图。创建一个 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.

输入参数

全部折叠

父图窗,指定为使用 uifigurefigure 函数创建的 Figure 对象。如果未指定父图窗,则 MATLAB 调用 figure 函数以创建一个图窗来用作父图窗。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: uicontextmenu("ContextMenuOpeningFcn",@myfunction)myfunction 指定为用户打开上下文菜单时执行的函数。

注意

此处所列的属性只是一部分。有关完整列表,请参阅 ContextMenu 属性

上下文菜单打开回调函数,指定为下列值之一:

  • 函数句柄。

  • 第一个元素是函数句柄的元胞数组。元胞数组中的后续元素是传递到回调函数的参数。

  • 包含有效 MATLAB 表达式的字符向量(不推荐)。MATLAB 在基础工作区计算此表达式。

有关将回调属性值指定为函数句柄、元胞数组或字符向量的详细信息,请参阅Specify a Callback Function

上下文菜单子级,以空的 GraphicsPlaceholderMenu 对象的向量形式返回。

不能使用 Children 属性添加或删除子级。可以使用此属性查看子级列表或对子菜单项重新排序。子级在此数组中的顺序与菜单项在打开的上下文菜单中出现的顺序相反。

例如,以下代码创建三个上下文菜单。当您在运行的 App 中打开上下文菜单时,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 对象。

提示

  • 要在运行的 App 中以交互方式显示一个上下文菜单,它必须:

    • 有至少一个菜单项。

    • 分配给同一图窗中的 UI 组件或图形对象。

  • 要以编程方式打开一个上下文菜单,请使用 open 函数。上下文菜单必须为使用 uifigure 函数创建的图窗的子级。要显示上下文菜单,它必须有至少一个用 uimenu 函数创建的菜单项。

版本历史记录

在 R2006a 之前推出