«ScreenUpdating = False» Не работает для верхних и нижних колонтитулов

#.net #vb.net #ms-word #vsto #add-in

#.net #vb.net #ms-word #vsto #надстройка

Вопрос:

Я создаю надстройку Word с использованием VSTO (в VB), и у меня довольно досадная проблема. Я хочу отключить обновление экрана, пока я удаляю все элементы управления содержимым в каждой истории моего документа. Итак, я делаю следующее:

 Application.ScreenUpdating = False

 'loop through all open documents
For Each thisDoc As Word.Document In gbl_docList

   'loop through all stories in each doc
    For Each thisStoryRange As Word.Range In thisDoc.StoryRanges 

        thisDoc.Activate() 'active this doc so we can work on it
        thisStoryRange.Select() 'select the range

        'remove all Content Controls
        For Each thisCC As Microsoft.Office.Interop.Word.ContentControl In thisStoryRange.ContentControls
            thisCC.Delete() 'remove this CC
        Next 'next CC

    Next 'next story

Next 'next doc

Application.ScreenUpdating = True
  

Однако всякий раз, когда Word перебирает истории верхнего или нижнего колонтитулов, он начинает открывать панель внизу экрана и показывать ее пользователю, что вызывает неудобное мерцание. Если нет верхних и нижних колонтитулов, все работает отлично.

ВОПРОСЫ:

  1. Кто-нибудь сталкивался с этой проблемой? Есть предложения?

  2. В качестве альтернативного решения, есть ли какой-либо способ свернуть / скрыть документ Word в Word, но оставить окно Word открытым? Мне удалось найти способы минимизировать / скрыть все Word.

Ответ №1:

Я могу подтвердить, что, особенно в более поздних версиях Office, параметр обновления экрана не работал по-разному (вы заметите, что элементы управления лентой продолжают обновляться, например, с полужирного на обычный, в зависимости от выбранного текста в вашей процедуре или, как вы делали при обработке верхних и нижних колонтитулов)

Я сообщил об этом еще в 2014 году, и проблема была предоставлена команде Office, но (насколько я видел) так и не была решена. У меня в архиве до сих пор хранится почта с репро и даже видео с этим. Воспроизведение было основано на этом демонстрационном коде:

https://msdn.microsoft.com/en-us/library/office/ff197438 (v=office.15).aspx

Единственная альтернатива — либо свернуть MS Word перед обработкой и восстановить его размер по завершении, либо сделать MS Word полностью невидимым (вы можете показывать диалоговое окно во время обработки с некоторым прогрессом, если это отнимает много времени) и восстановить видимость по завершении.