2016-09-28 69 views
7

在我的Word加載項中,我有一個Word Document對象,其中包含特定的Section。在這種Section,我追加Shape使形狀最頂級

var shape = section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range) as Shape; 

我的問題是,一些Word文檔模板有出現在我的形狀的頂部圖像或其他東西。最初,我認爲設置Z順序足以解決這個問題:

shape.ZOrder(MsoZOrderCmd.msoBringToFront); 

它沒有。所以我的問題是,我怎樣才能絕對設置我的Shape的Z順序,換句話說,我還需要做些什麼才能使我的Shape成爲您看到的最頂級的東西文件(這意味着它出現在所有其他事物之上)?

回答

8

我終於想通了,爲什麼這些方法都不能正常工作:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText); 
shape.ZOrder(MsoZOrderCmd.msoBringToFront); 

的問題是,我添加了一個HeaderFooter部分中我Shape對象,但是這是在顯示它的頂部的形狀中定義Document。 Z排序只與您的對象所在的同一節中的其他形狀有關(無論您的對象是否位於實際文檔,頁眉,頁腳等中)。

所以不是這個代碼將形狀添加到特定部分:

​​

我用這個代碼,將其直接添加到我的文檔,然後Z排序適用於它,它實際工作。看來以上所有這一切都是我的模板的一部分,其他的對象:

var shape = document.Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0) as Shape; 
shape.ZOrder(MsoZOrderCmd.msoBringToFront); 

Writing Word Macros, Second Edition美國,這一完全清楚:

的ZORDER方法將形狀對象相對於一個的z以其他 對象。請注意,該方法不會設置絕對z順序。

因此,絕對Z順序取決於其他因素,例如Shape實際上駐留在這種情況下。

4

在Word中手動執行此操作,我選擇「在文本前面前移」選項。你應該嘗試:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);

如果這本身並不能因爲其他對象的工作,嘗試使用一前一後:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText); 
shape.ZOrder(MsoZOrderCmd.msoBringToFront); 

之所以這樣做這是微軟Word似乎對待文本和其他對象具有不同的Z順序。

+0

我試過了,它不起作用。 – Alexandru

+0

我也會這樣說,即使在如下的規範書籍中,作者也明確指出了* ZOrder方法如何設置Shape對象相對於其他對象的z順序。請注意,該方法不會設置絕對z順序。*:https://www.safaribooksonline.com/library/view/writing-word-macros/9781565927254/apbs02.html您的答案不起作用,它也不是規範的答案。 – Alexandru

+0

@Alexandru也許你的鏈接實際上回答你的問題,因爲Z順序沒有意義,沒有多個對象成爲Z順序的一部分。除非你的形狀是接收Z-order命令的最後一個形狀,否則似乎沒有任何內置到interop的方式來覆蓋它。毫無疑問,這是設計。祝你好運找到一個規範的答案,因爲你自己的鏈接顯示的東西不同於你想要的東西。 – vbnet3d