Но на самом деле с документом все в порядке. В тот момент, когда вы нажимаете на клавиатуру, чтобы ввести любую букву, буква появляется, и с этого момента документ ведет себя нормально. Если вы нажмете Ctrl+Home, курсор начнет мигать в начале документа и начнет вести себя нормально. Вы даже можете нажимать кнопки на ленточной панели, и многие действия приведут к тому, что документ снова станет доступным. Даже простые действия, такие как увеличение или уменьшение документа, решат проблему.
Поэтому мне кажется, что когда документ открывается, «фокус» перемещается туда, куда не следует, и любые из этих действий вернут его в более разумное место в документе, после чего пользователь сможет снова с ним взаимодействовать.
После некоторого расследования я обнаружил, что документы-нарушители, похоже, имеют одну общую функцию. : в них есть сноски.
Код, который мы используем для открытия документа, кажется довольно простым:
Мы создаем объект Word.Application и используйте его метод Open, чтобы открыть документ (код VB)
Код: Выделить всё
oDoc = oWApp.Documents.Open()
Код: Выделить всё
oWapp.Visible = True
oWApp.Activate()
Код: Выделить всё
If oWapp.ActiveWindow.View.SplitSpecial = Microsoft.Office.Interop.Word.WdSpecialPane.wdPaneNone Then
If oWapp.ActiveWindow.ActivePane.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdWebView Then
oWapp.ActiveWindow.ActivePane.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdPrintView
End If
Else
If oWapp.ActiveWindow.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdWebView Then
oWapp.ActiveWindow.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdPrintView
End If
End If
Код: Выделить всё
oWapp.ActiveDocument.Activate()
Когда я делаю это с документом без сносок, все ведет себя как всегда. Документ открывается и активируется, и пользователь может сразу же прокрутить и щелкнуть тело документа. Пока что похоже, что это влияет только на документы со сносками.
На данный момент я внес одно незначительное изменение, которое, кажется, позволяет избежать проблемы... но оно некрасиво. Мне не нравится полагаться на спящий поток, чтобы что-то работало, поэтому я запрограммировал его так, чтобы он делал это только тогда, когда в документе действительно есть сноски или концевые сноски. У нас пока нет возможности протестировать это на машине клиента. Вместо простой активации активного документа мы теперь добавляем код для проверки сносок или концевых сносок и приостанавливаем поток на секунду. После активации документа мы программно эмулируем нажатие пользователем Ctrl+Home. Я не могу выразить, как сильно я ненавижу эту мешанину.
Код: Выделить всё
Try
Dim bSleptAlready As Boolean = False
If DirectCast(oWapp.ActiveDocument, Microsoft.Office.Interop.Word.Document).Footnotes IsNot Nothing Then
If DirectCast(oWapp.ActiveDocument, Microsoft.Office.Interop.Word.Document).Footnotes.Count > 0 Then
bSleptAlready = True
System.Threading.Thread.Sleep(1000)
End If
End If
If Not bSleptAlready Then
If DirectCast(oWapp.ActiveDocument, Microsoft.Office.Interop.Word.Document).Endnotes IsNot Nothing Then
If DirectCast(oWapp.ActiveDocument, Microsoft.Office.Interop.Word.Document).Endnotes.Count > 0 Then
bSleptAlready = True
System.Threading.Thread.Sleep(1000)
End If
End If
End If
oWapp.ActiveDocument.Activate()
If bSleptAlready Then
DirectCast(oWapp, Microsoft.Office.Interop.Word.Application).Selection.HomeKey(Unit:=Microsoft.Office.Interop.Word.WdUnits.wdStory)
DirectCast(oWapp, Microsoft.Office.Interop.Word.Application).ActiveWindow.ActivePane.VerticalPercentScrolled = 0
End If
Catch ex As Exception
End Try
- Является ли кто-нибудь знает, что об этом сообщалось как о проблеме с недавним обновлением Microsoft Word? (Я также задавал этот вопрос Microsoft, и если они дадут мне ответ, я опубликую его здесь)
- Если кто-нибудь сталкивался с этим раньше, есть ли способ программно обнаружить наличие сносок и выполнить какие-либо программные действия, чтобы избежать этой проблемы? Мы советовали людям «просто нажмите Ctrl+Home», но, видимо, даже такая простая инструкция для некоторых не под силу.
Подробнее здесь: https://stackoverflow.com/questions/791 ... they-hit-c