在 Microsoft Visio 2013 x64 中,新创建的自定义列表形状无法使用。

5

目标:

首先,我要说一下我的目标是什么,然后在下一个(描述)部分中描述我为实现目标所做的事情。

我想从“插入”选项卡中“图表部件”部分的“平面容器”中创建一个自定义列表主形状。然后,我想创建另一个主形状,可以用作创建的自定义列表主形状的成员形状。

换句话说,我想像将成员和分隔符主形状附加到UML模板的类主形状一样,将我的创建的主形状添加到我的自定义列表主形状中。

因此,我在实现我的目标时遇到了一些问题,在下面的部分中进行了描述。


描述:

我已经在“Visio Stencil (.vssx)”文件中创建了一些新的主形状,如下所示:

New Created Master Shapes with used Master Shape

图1 - 使用主形状创建的新主形状

  1. 属性主形状(绿色框):从UML类模板(蓝色框)的成员主形状创建。
  2. 对象主形状(红色框):从“插入”选项卡中“图表部件”部分的平面容器创建。

属性主形状被创建为在对象主形状中用作成员形状,就像成员主形状在UML模板的类主形状中使用一样。

Class Master Shape with its Initial Members

图2 - 具有其初始成员的类主形状

从成员主形状创建的属性主形状已更改如下:

  • 我给它添加了一个 Shape Data(图3)。

    属性主形状的“形状数据”对话框

    图3 - 属性主形状的“形状数据”对话框

  • 我给它添加了一个 Data Graphic Item(图4)。

    属性主形状的“数据图形”和“数据图形项”对话框

    图4 - 属性主形状的“数据图形”和“数据图形项”对话框

  • 我在 ShapeSheet 窗口的“用户定义单元格”部分更改了“User.MemberName”公式,如下所示(图5):

    =MID(SUBSTITUTE(TRIM(SHAPETEXT(TheText)),"[",""),1,FIND(" ",SUBSTITUTE(TRIM(SHAPETEXT(TheText)),"[",""))-1)

    而不是:

    =SHAPETEXT(TheText)

    属性主形状的“形状工作表”窗口

    图5 - 属性主形状的“形状工作表”窗口

由“Plain Container”创建的“Object 主形状”已更改如下:

  • 我更改了 ShapeSheet 窗口中“用户定义单元格和事件部分”的单元格内容,如图6:

    更改内容后的 ShapeSheet 窗口的“用户定义单元格和事件部分”的单元格

    图6 - 更改内容后的 ShapeSheet 窗口的“用户定义单元格和事件部分”的单元格

    而不是:

    更改前 ShapeSheet 窗口中“用户定义单元格和事件部分”的单元格内容

    图7 - 更改前 ShapeSheet 窗口中“用户定义单元格和事件部分”的单元格内容


问题:

第一个问题:

为什么将 Property 主形状实例添加到 Object 主形状实例时不能像将 Member 主形状实例添加到 UML 模板的 Class 主形状实例一样正确排列和放置(图8)?

对比UML模板的类主形状和对象主形状实例以及属性主形状实例,以及其初始成员

图8 - 对比UML模板的类主形状和对象主形状实例以及属性主形状实例,以及其初始成员

第二个问题:

为什么对象主形状的实例在附加到页面后没有添加其初始成员,就像在将类主形状的实例添加到页面后添加初始成员一样(图9)?

对比UML模板的类主形状和对象主形状实例

图9 - 对比UML模板的类主形状和对象主形状实例

我已经添加了以下公式来达到这个目标; 但是我认为它不起作用:

=IF(LISTMEMBERCOUNT()=0,DOCMD(2270),0)

第三个问题:

为什么对象主形状的实例没有显示插入属性主形状实例的栏,就像在类主形状的实例中显示栏以插入其成员一样(图10)?

对比UML模板的类主形状和对象主形状实例,以显示插入相关成员的栏

图10 - 对比UML模板的类主形状和对象主形状实例,以显示插入相关成员的栏

第四个问题:

为什么对象主形状的实例接受所有主形状的实例,而不仅仅是属性主形状的实例,相反,UML模板的类主形状只接受UML模板的成员和分隔符主形状的实例(图11)?

对比对象主形状的实例接受所有主形状的实例,与UML模板的类主形状只接受UML模板的成员和分隔符主形状的实例

图11 - 对比对象主形状的实例接受所有主形状的实例,与UML模板的类主形状只接受UML模板的成员和分隔符主形状的实例

图11 - 比较一个接受所有主控形状实例的对象主控形状实例和只接受UML Stencil成员和分隔符主控形状实例的类主控形状实例

我在ShapeSheet窗口的“用户定义单元格”部分中为“User.msvSDListItemMaster”设置了=USE("Property"),但我认为它没有发挥作用。

第5个问题:

为什么不能像将UML模板的成员和分隔符主控形状的连接实例添加到UML模板的类主控形状实例(图12)中一样,在对象主控形状实例的属性主控形状上添加实例时不显示插入成员的选项?

比较接受所有主控形状实例的对象主控形状和一个属性主控形状实例与UML模板的类主控形状及其成员,以显示插入���员的选项

图12 - 比较接受所有主控形状实例的对象主控形状和一个属性主控形状实例与UML模板的类主控形状及其成员,以显示插入成员的选项

第6个(最后的)问题:

为什么对象主控形状实例的行为和操作类似于容器,即使我已将其/它们的主控对象更改为列表?

1个回答

2

第一个问题的答案:

这个问题通常出现在没有注意到"Category"这个词上。在大多数情况下,人们不关注该单词,并使用"Shape Master Name"而不是"Shape Category";然而,它们彼此不同。

在我的情况下,我正在为User.msvSDContainerRequiredCategories(类别名称的分号分隔列表。其他形状必须至少有一个匹配名称才能作为容器成员允许。)和User.msvSDListRequiredCategories(类别名称的分号分隔列表。其他形状必须至少有一个匹配名称才能作为列表成员允许。)输入形状主名称Property而不是形状类别User.msvShapeCategories = Member

比较"Shape Master Name"与"Shape Category"

图1 - 比较"Shape Master Name"与"Shape Category"


第二个问题的答案:

为解决此问题,我们必须注意两件事情

首先,我们必须添加我们想要在实例化主形状后自动添加它们的形状。因此,我们必须为我们想要添加的每个形状添加名称为User.msvSDListItemMaster[Index]的行(用于创建Insert命令的主形状的名称或UniqueID。该值必须放置在USE()函数内部。)

正如您所看到的,我只想添加一个形状。因此,我必须将User.msvSDListItemMaster行的名称更改为User.msvSDListItemMaster1如果我想在实例化时添加更多形状,则必须添加另一行,例如User.msvSDListItemMaster2User.msvSDListItemMaster3等。

第二个也是最后一个,我们必须向"Events"部分的"EventDrop"单元格添加公式。正如您所看到的,我已将其添加到我的自定义列表形状中,如此处此处所述:

指定插入形状
有几种方法可以将形状添加到列表中:拖放形状、单击出现在列表边缘附近的蓝色插入三角形或右键单击现有成员并插入形状。单击插入三角形和右键单击以插入形状都使用User.msvSDListItemMaster单元格来确定要添加到列表中的形状。主控件的名称放置在USE()函数中的引号中(例如,USE(“List member master”))。如果在User.msvSDListItemMaster中未指定形状,则在插入形状时,Visio将复制列表中相邻的形状。
还可以在首次将列表放置在页面上时自动填充列表中的某些成员形状。为此,请将以下公式放入列表的EventDrop单元格中,重复一次DOCMD(2270)以添加每个成员:
IF(LISTMEMBERCOUNT()= 0,DOCMD(2270)+ DOCMD(2270)+ DOCMD(2270),0)
2270是在列表项之前插入项目的命令(visUiCmds.visCmdListInsertBefore)。也可以使用2271,在列表项之后插入项目的命令(visUiCmds.visCmdListInsertAfter)。
第3个问题的答案:
如果第1个问题的问题解决了,这个问题就会解决。
第4个问题的答案:
如果第一个问题的问题解决了,这个问题也会得到解决。如此处此处所述,列表具有自己的单元格来控制列表成员身份。使用User.msvSDListRequiredCategoriesUser.msvSDListExcludedCategories单元格限制哪些形状可以成为列表成员。因为列表也是容器,因此可能存在形状成为列表的容器成员的情况。标准的User.msvSDContainerRequiredCategoriesUser.msvSDContainerExcludedCategories单元格决定此行为。默认情况下,Visio将尝试将形状添加到列表作为列表成员,但如果失败,它可能会尝试将其添加为容器成员。列表成员和容器成员之间的区别在于,只有列表成员将由列表安排并影响其大小。形状设计人员应管理两组成员身份单元格以确保正确的结果。最好同时使用User.msvSDListRequiredCategoriesUser.msvSDContainerRequiredCategories行以获得最佳效率。第五个问题的答案是:“如果第一个问题的问题解决了,这个问题也会得到解决。”最后一个问题的答案在这里这里

Custom Lists

Any shape that has a value of "List" for the User.msvStructureType cell is treated by Visio as a list. A list orders and arranges its member shapes automatically. Note that lists are also considered to be containers, and they have similar capabilities such as automatically moving, copying, or deleting member shapes. All of the previously mentioned container cells apply to list shapes.

Table 1. ShapeSheet container properties

User.msvSDContainerMargin

      The distance between the container boundary and member shapes.

User.msvSDContainerResize

      The automatic-resize behavior for the shape:
  • 0 = No automatic resize.

  • 1 = Expand as needed.

  • 2 = Always fit to contents.

User.msvSDContainerStyle

      A one-based index value for the current visual style of the container.

User.msvSDContainerStyleCount

      The total number of visual styles that the container supports.

User.msvSDHeadingStyle

      A one-based index value for the current visual style of the container heading.

User.msvSDHeadingStyleCount

      The total number of visual styles that the container heading supports.

User.msvSDContainerLocked

      A Boolean value that prevents membership changes in the container.

User.msvSDContainerRequiredCategories

      A semicolon-delimited list of category names. Other shapes must have at least one matching name to be allowed as container members.

User.msvSDContainerExcludedCategories

      A semicolon-delimited list of category names. Other shapes with at least one matching name are disallowed as container members.

User.msvSDContainerNoHighlight

      A Boolean value that suppresses the container highlighting when member shapes are selected or added to the container.

User.msvSDContainerNoRibbon

      A Boolean value that hides the Container Tools contextual tab in the ribbon for this container.

User.msvSDContainerHeadingEdge

      A string that designates the location of the interior of the container from the perspective of the container heading. Must be "Left", "Right", "Top", or "Bottom".

User.msvSDMembersOnHiddenLayer

      A Boolean value that determines whether Visio severs container relationships when the container or member is placed on a hidden layer. If True, Visio allows relationships to exist on the hidden layer. If False, Visio severs the relationships.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接