Ale*_*dru 7 .net c# ms-word office-addins word-addins
在我的Word加载项中,我有一个Document包含特定内容的Word 对象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;
Run Code Online (Sandbox Code Playgroud)
我的问题是一些Word文档模板有图像或其他东西出现在我的形状之上.最初,我认为设置Z顺序足以解决这个问题:
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
Run Code Online (Sandbox Code Playgroud)
它没.所以我的问题是,我怎样才能绝对设置我的Z顺序Shape,或者换句话说,我还需要做些什么来设置才能Shape让它成为你在文档中看到的最顶层的东西(意思是,它出现在所有其他事物之上)?
我终于弄清楚为什么这些方法不起作用:
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
Run Code Online (Sandbox Code Playgroud)
问题是我Shape在一个HeaderFooter部分中添加了我的对象,但显示在它上面的形状是在Document.Z排序仅与您的对象所在的同一部分内的其他形状有关(无论您的对象是在实际文档中,页眉,页脚等).
因此,而不是此代码将形状添加到特定部分:
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;
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
Run Code Online (Sandbox Code Playgroud)
我使用这段代码直接将它添加到我的文档中,然后对它应用Z-ordering,它实际上有效.它出现在我的模板的一部分上面的所有其他对象之上:
var shape = document.Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0) as Shape;
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
Run Code Online (Sandbox Code Playgroud)
编写Word宏,第二版非常明确地说明了这一点:
ZOrder方法设置Shape对象相对于其他对象的z顺序.请注意,该方法不设置绝对z顺序.
因此,绝对Z顺序取决于其他因素,例如Shape在这种情况下实际存在的位置.