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;

创建一个上下文菜单,其中包含适合树组件的动作。将该上下文菜单分配给树中的顶层树节点。

在 UI 图窗中,创建一个树,其中包含四个顶层节点和一组嵌套节点。

fig = uifigure;

tree = uitree(fig,'Position',[20 200 175 100]);

category1 = uitreenode(tree,'Text','Runners');
r1 = uitreenode(category1,'Text','Joe');
r2 = uitreenode(category1,'Text','Linda');

category2 = uitreenode(tree,'Text','Cyclists');
c1 = uitreenode(category2,'Text','Rajeev');

category3 = uitreenode(tree,'Text','Hikers');
h1 = uitreenode(category3,'Text','Jack');

category4 = uitreenode(tree,'Text','Swimmers');
s1 = uitreenode(category4,'Text','Logan');

创建一个包含三个菜单项的上下文菜单。对于最后一个菜单项,创建四个子菜单。

cm = uicontextmenu(fig);
m1 = uimenu(cm,'Text','Expand All');
m2 = uimenu(cm,'Text','Collapse All');
m3 = uimenu(cm,'Text','Scroll To...');

sbm1 = uimenu(m3,'Text','Runners');
sbm2 = uimenu(m3,'Text','Cyclists');
sbm3 = uimenu(m3,'Text','Hikers');
sbm4 = uimenu(m3,'Text','Swimmers');

然后,通过将每个节点的 ContextMenu 属性设置为 ContextMenu 对象,将上下文菜单分配给顶层树节点。

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

右键点击任一顶层树节点可查看上下文菜单。

此时,代码仍未完成。右键点击时会出现上下文菜单,但选择菜单项没有任何效果。要完成菜单项行为的实现,请创建 MenuSelectedFcn 回调函数。

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

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

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: 'ContextMenuOpeningFcn',@myfunction 即将 myfunction 指定为用户与上下文菜单交互时要执行的函数。

此处所列的属性只是一个子集,要查看完整列表,请参阅 ContextMenu 属性

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

  • 函数句柄。

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

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

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

上下文菜单子级,以空的 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 之前推出