2016-09-28 109 views
7

W dodatku do programu Word mam obiekt Word Document, który zawiera określony obiekt Section. W tym Section, ja dołączania Shape:Tworzenie najlepszego kształtu

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; 

Mój problem jest, że niektóre szablony dokumentów Worda mają obrazy lub inne rzeczy, które pojawiają się na szczycie mojej kondycji. Początkowo myślałem, że ustawienie kolejności Z wystarczyłoby, aby to naprawić:

shape.ZOrder(MsoZOrderCmd.msoBringToFront); 

Nie udało się. Moje pytanie brzmi: jak mogę absolutnie ustawić kolejność Z mojego Shape, lub innymi słowy, co jeszcze musiałbym zrobić, aby ustawić, aby mój Shape był taki, aby stał się najważniejszą rzeczą, jaką widzisz w dokument (co oznacza, że ​​pojawia się ponad wszystkimi innymi rzeczami)?

Odpowiedz

8

I w końcu zorientowali się, dlaczego te metody nie działały:

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

Problem polegał na tym, że dodałam mój Shape obiekt w sekcji HeaderFooter, ale kształt, który został wyświetlania na wierzchu została zdefiniowana w Document. Kolejność Z jest tylko względna w stosunku do innych kształtów w obrębie tej samej sekcji, w której znajduje się obiekt (czy obiekt znajduje się w rzeczywistym dokumencie, nagłówku, stopce itp.).

Więc zamiast tego kodu, aby dodać kształt do konkretnej sekcji:

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); 

Kiedyś ten kod, aby dodać go do mojego dokumentu bezpośrednio, a następnie zastosować Z-order na to, i to rzeczywiście działa. Okazało się przede wszystkim z innymi przedmiotami, które były częścią mojego szablonu:

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 Zjednoczone Ten doskonale jasno:

Sposób ZOrder ustawia kolejności z obiektu Shape w stosunku do innych obiektów. Zauważ, że metoda nie ustawia bezwzględnej kolejności Z.

Tak więc bezwzględna kolejność Z zależy od innych czynników, takich jak gdzie w tym przypadku znajduje się Shape.

4

Robiąc to ręcznie w programie Word, wybieram opcję "Przenieś do przodu przed tekstem". Należy starać:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);

Jeśli sam nie działa z powodu innych obiektów, można użyć jednego po drugim:

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

Powodem tego rozwiązania jest to, że MS Word wydaje się leczyć Tekst i inne obiekty mają różne Z-zamówienia.

+0

Próbowałem, i to nie działa. – Alexandru

+0

Powiem to również, nawet w książkach kanonicznych, takich jak poniższe, autor wyraźnie stwierdza, w jaki sposób * Metoda ZOrder ustawia kolejność z obiektu Shape względem innych obiektów. Zauważ, że metoda nie ustawia bezwzględnej kolejności z. *: Https://www.safaribooksonline.com/library/view/writing-word-macros/9781565927254/apbs02.html Twoja odpowiedź nie działa, ani nie jest odpowiedź kanoniczna. – Alexandru

+0

@Alexandru Być może twój link faktycznie odpowiada na twoje pytanie, ponieważ kolejność Z jest bez znaczenia, bez wielu obiektów, które są częścią porządku Z. O ile twój kształt nie jest ostatnim, który otrzymał polecenie Z-order, nie wydaje się, aby wbudowany w niego interop zastąpił to. Bez wątpienia jest to zgodne z projektem. Życzymy powodzenia w znalezieniu odpowiedzi kanonicznej, ponieważ twoje własne linki pokazują coś innego, niż chcesz. – vbnet3d

Powiązane problemy