使形状最顶层
Making a Shape top-most
在我的 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
成为您在文档中看到的最上面的东西(意思是它出现在所有其他东西之上)?
在 Word 中手动执行此操作,我 select 选项 "Bring Forward In Front of Text." 您应该尝试:
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
如果由于其他对象而单独使用此方法不起作用,请尝试一个接一个地使用:
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
这样做的原因是 MS Word 似乎将文本和其他对象视为具有不同的 Z 顺序。
我终于弄明白为什么这些方法不起作用了:
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);
Writing Word Macros, Second Edition 说得非常清楚:
The ZOrder method sets the z-order of a Shape object relative to other
objects. Note that the method does not set the absolute z-order.
因此绝对 Z 顺序取决于其他因素,例如 Shape
在这种情况下实际驻留的位置。
在我的 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
成为您在文档中看到的最上面的东西(意思是它出现在所有其他东西之上)?
在 Word 中手动执行此操作,我 select 选项 "Bring Forward In Front of Text." 您应该尝试:
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
如果由于其他对象而单独使用此方法不起作用,请尝试一个接一个地使用:
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
这样做的原因是 MS Word 似乎将文本和其他对象视为具有不同的 Z 顺序。
我终于弄明白为什么这些方法不起作用了:
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);
Writing Word Macros, Second Edition 说得非常清楚:
The ZOrder method sets the z-order of a Shape object relative to other objects. Note that the method does not set the absolute z-order.
因此绝对 Z 顺序取决于其他因素,例如 Shape
在这种情况下实际驻留的位置。