2012-09-11 43 views
0

我寫了一個PowerPoint 2010插件,允許用戶創建形狀對。這些對是同步的(例如位置,顏色,文字...)。的對被存儲爲下面的類的對象:如何在標題主文件中查找佔位符?

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

如果形狀被改變,其中,有一對包含形狀,其它的形狀被更新。

可以在主佈局上定義對。同步在主設備上工作。如果該對由兩個佔位符組成,並且我基於主創建幻燈片,當然,新形狀不會同步。有沒有辦法找到形狀的主等價物,反之亦然?然後,算法將是:

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,如果該形狀不是佔位符。但這絕對不是一個好方法。

+0

這就像我在VBA中得到的一樣,如果VSTO與VSTO非常相似,那麼它會非常相似:http://stackoverflow.com/questions/2061303/get-layout-shape-corresponding- to-slide-shape/2066122 –

回答

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標籤值是否與第一個形狀相匹配。

+0

* Steve Rindsberg?只有1分?歡迎來到SO!我很榮幸給你你的第一分! +1 :-) –

+0

我已經想過使用標籤了。標籤是否從主幻燈片複製到正常幻燈片? –

+0

Nico,不,標籤不會從主幻燈片複製到常規幻燈片。另一方面,我不明白他們爲什麼需要成爲;如果您使用代碼創建形狀對,則可以在創建時「標記」這些形狀。 –

相關問題