如何在标题母版中找到占位符?

时间:2012-09-11 14:34:28

标签: .net vsto powerpoint

我写了一个PowerPoint 2010插件,允许用户创建形状对。这些对是同步的(例如位置,颜色,文本......)。这些对存储为以下类的对象:

class Pair
{
     Shape LeftShape { get; set; }
     Shape RightShape { get; set; }
}

如果修改了Shape,其中有一对包含Shape,则会更新另一个形状。

可以在主布局上定义对。同步适用于主服务器。如果该对由两个占位符组成,并且我创建了一个基于主控的幻灯片,当然,新形状不会同步。有没有办法找到形状的主等效,反之亦然?然后算法将是:

 s1's modification is recognized
 if s1 is a placeholder
     find s1's equivalent in master -> m1
     look up the partner of m1 -> m2
     find the shape in the current slide that is based on m2 -> s2
     update s2

我查看了新形状的NameId属性。但它们与主形状的属性不同。

是的,如果一个形状是占位符,有没有一种很好的方法可以确定?我目前的方法是查询引发异常的PlaceholderFormat,如果形状没有占位符。但这绝对不是一个好方法。

1 个答案:

答案 0 :(得分:1)

  
    

可以在主布局上定义对。

  

我很好奇:怎么样?

Shape的.Type属性将指示它是占位符还是其他形状类型。

如果形状是msoPlaceholder(14),则它是占位符。在这种情况下,它的.PlaceholderFormat.Type属性告诉你它是哪种类型的占位符,如果它是一种可以容纳多种内容的类型,它的.PlaceholderFormat.ContainedType会告诉你它是否包含图表,对象,图片等等。

您可以考虑使用标记来表示对。要“标记”形状范围的成员,请使用当前选定的形状作为示例范围:

Dim oSh As Shape
For Each oSh In ActiveWindow.Selection.ShapeRange
    oSh.Tags.Add "MagicPair", "TagValue"
Next

要返回其中一对的另一半,请编写一个简单的函数,查看当前幻灯片上的每个形状,并检查其MagicPair标记值是否与第一个形状的值匹配。