2016-09-28 10 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; 

Моя проблема заключается в том, что некоторые шаблоны документов Слово есть изображения или другие вещи, которые появляются над верхней частью моей формы. Первоначально я подумал, что установить порядок Z будет достаточно, чтобы исправить это:

shape.ZOrder(MsoZOrderCmd.msoBringToFront); 

Это не так. Итак, мой вопрос: как я могу полностью установить порядок Z моего Shape, или, другими словами, что еще мне нужно сделать, чтобы установить, чтобы сделать мой Shape таким, чтобы он стал самым большим, что вы видите в документ (что означает, что он появляется прежде всего из других вещей)?

ответ

8

я, наконец, понял, почему эти методы не работали:

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

Проблема заключалась в том, что я добавил мой 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); 

Я использовал этот код, чтобы добавить его в свой документ непосредственно, а затем применить 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-порядок объекта Shape относительно другого объектов. Обратите внимание, что метод не устанавливает абсолютный z-порядок.

Таким образом, абсолютный Z-порядок зависит от других факторов, например, где Shape находится в этом случае.

4

Выполнение этого вручную в Word, я выбираю вариант «Вперед перед текстом». Вы должны попробовать:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);

Если это само по себе не работает из-за других объектов, попробуйте использовать один за другим:

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

Причиной для этого является то, что MS Word, кажется, лечить Текст и другие объекты имеют разные Z-ордеры.

+0

Я пробовал это, и он не работает. – Alexandru

+0

Я скажу это также, даже в канонических книгах, таких как следующее, автор явно заявляет, как * Метод ZOrder устанавливает z-порядок объекта Shape относительно других объектов. Обратите внимание, что метод не устанавливает абсолютный z-порядок. *: Https://www.safaribooksonline.com/library/view/writing-word-macros/9781565927254/apbs02.html Ваш ответ не работает, и он не является канонический ответ. – Alexandru

+0

@Alexandru Возможно, ваша ссылка действительно отвечает на ваш вопрос, потому что Z-порядок бессмыслен, если несколько объектов не являются частью Z-порядка. Если ваша фигура не является последней, чтобы получить команду Z-order, похоже, что в interop не существует способа, чтобы переопределить это. Без сомнения, это по дизайну. Удачи найти канонический ответ, так как ваши собственные ссылки показывают нечто иное, чем то, что вы хотите. – vbnet3d