制作一个最上面的形状

本文关键字:一个 | 更新日期: 2023-09-27 18:09:13

在我的Word外接程序中,我有一个包含特定Section的Word Document对象。在这个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,使它成为你在文档中看到的最上面的东西(意思是,它出现在所有其他东西之上)?

制作一个最上面的形状

我终于明白为什么这些方法不起作用了:

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

问题是我在HeaderFooter部分中添加了Shape对象,但是在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);

我使用这段代码将其直接添加到我的文档中,然后对其应用z顺序,它实际上工作了。它出现在模板中所有其他对象的上方:

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

编写Word宏,第二版非常清楚地说明了这一点:

ZOrder方法设置Shape对象相对于其他对象的z轴顺序对象。请注意,该方法不设置绝对z轴顺序。

因此,绝对z轴顺序取决于其他因素,例如在这种情况下Shape实际驻留的位置。

在Word中手动操作,我选择"在文本前面显示"选项。你应该试试:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);

如果因为有其他对象而不能单独工作,请尝试依次使用:

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

这样做的原因是MS Word似乎将文本和其他对象视为具有不同的z轴顺序。

相关文章: