Заблокируйте текстовый документ и откройте модальное диалоговое окно над документом.

В приложении Windows Forms мне нужно открыть текстовый документ и скрыть основную форму, а над словом «документ» мне нужно открыть модальный диалог. Когда отображается модальное диалоговое окно, слово должно быть отключено, что означает, что пользователь не может прокручивать, масштабировать или писать что-либо в документе. Документ будет управляться модальным диалогом.

Теперь я использую функцию из user32.dll, с помощью которой я устанавливаю родительский процесс для модального диалогового окна, так что, когда я скрою основную форму, модальное диалоговое окно останется видимым.

[DllImport("user32.dll")]
public static extern IntPtr SetParent(IntPtr child, IntPtr newParent);

Проблема в том, что если я открою модальное диалоговое окно с помощью Show() или ShowModal(), у меня все еще будет доступ к текстовому документу, а если я открою его с помощью ShowDialog(), форма будет как бы интегрирована в документ, и я не могу щелкнуть по ней или сфокусироваться Это.

Может ли кто-нибудь сказать мне, как я могу заблокировать текстовый документ и по-прежнему иметь доступ к модальному диалоговому окну?

Есть ли Office.Interop.Word функция, которая может помочь?


person lucian    schedule 11.10.2011    source источник


Ответы (3)


Я думаю, что лучшим решением было бы написать Word-Addin, но это потребует много работы и может оказаться невозможным для вас в данный момент.

Я думаю, что вторым лучшим решением было бы скрыть Word, когда вы показываете модальный диалог.

person GolezTrol    schedule 12.10.2011
comment
Я не могу скрыть слово, потому что с помощью некоторых кнопок в форме мне нужно изменить, выделить или переместить текст текстового документа. Я думал показать документ в PrintPreview, я спрятал линейки и полосы прокрутки. Но я не знаю, что еще деактивировать, чтобы пользователь не мог щелкнуть или что-то сделать с документом. И да, создание Word-AddIn с функциональностью модальной формы - это большая работа. Я пытаюсь найти более простое решение, если оно есть. - person lucian; 12.10.2011
comment
Я понимаю. Интересно, почему это будет такой проблемой, если кто-то отредактирует документ. Было бы больно, если бы они это сделали? Если да, то почему? Возможно, вы сможете это исправить, чтобы пользователь мог просто редактировать документ, пока форма открыта, если они этого захотят. - person GolezTrol; 12.10.2011

То, что вы описываете, не подходит ... для достижения желаемого вам необходимо реализовать надстройку Office вместо приложения WinForms ... для пошагового руководства, включая исходный код того, как это сделать, см. http://msdn.microsoft.com/en-us/library/bb157892.aspx

РЕДАКТИРОВАТЬ - согласно комментариям:

Другой вариант - отобразить документ Word в формате PDF и отобразить его ... для редактирования документа Word вы можете использовать OpenXML от MS (бесплатно) и / или Aspose.Words (коммерческая) или аналогичная библиотека ...

person Yahia    schedule 12.10.2011
comment
Я искал более быстрое решение, но, возможно, у меня нет выбора. Я думал показать документ в PrintPreview и отключить некоторые функции пользователя. Например, я удалил функциональность клавиши Escape (которая выходила из режима PrintPreview), я удалил линейки и полосы прокрутки, но я не знаю, как удалить весь доступ пользователей, например, прокрутку вниз или масштабирование документа. И делать это было бы так безопасно, потому что я мог бы что-то пропустить, потому что есть множество вещей, которые можно сделать, и их сложно идентифицировать и блокировать. - person lucian; 12.10.2011
comment
Я не вижу более быстрого решения - по крайней мере, это было бы безопасно ... другой вариант - создать PDF-файл и показать его вместо словарного документа ... и отредактировать текстовый документ в скрытом Word или через библиотеку например OpenXML или Aspose.Words. - person Yahia; 12.10.2011

Да, документ можно заблокировать под формой с помощью слова vbModal:

Sub AutoOpen()
    frmIntro.Show vbModal
End Sub
person fred hebbert    schedule 12.11.2020
comment
Более того, документ может быть скрыт до тех пор, пока открывающаяся форма не будет закрыта: ActiveWindow.Visible = False в Sub AutoOpen, а затем ActiveWindow.Visible = True, когда форма закрыта. - person fred hebbert; 13.11.2020