Я разрабатываю надстройку для слов с помощью VSTO. На поверхности документа Word есть несколько полей MacroButton. Чтобы обратиться к событиям двойного щелчка полей, я использую макрос VBA в шаблоне (MyTestProject.dotm).
Это структура одного из полей: ![enter image description here](https://i.stack.imgur.com/q4ZKz.png)
Когда коды полей скрыты, отображается как TESTTAG: Test1
.
При двойном щелчке по сценарию TESTTAG: Test1
, указанному ниже в пределах аргументов MyTestProject.dotm
:
Public Sub TPS_TestTag()
Set addIn = Application.COMAddIns("MyVSTO")
Set automationObject = addIn.Object
automationObject.HandleClickEvents
End Sub
У меня есть следующий метод в AddInUtilities.cs
моего проекта VSTO:
public void HandleClickEvents()
{
using (MyProject.Application app = new MyProject.Application())
{
app.ExecuteMacroClickEvents();
}
}
В методе app.ExecuteMacroClickEvents()
я form.ShowDialog()
метод для отображения модальной Windows формы.
При первом двойном щелчке по TESTTAG: Test1
появляется моя форма. Затем появляется TESTTAG: Test1
:
![enter image description here](https://i.stack.imgur.com/JotSF.png)
Если я закрою форму и сразу же дважды дважды щелкните тег TESTTAG: Test1
, не нажимая нигде иначе TPS_TestTag()
в пределах MyTestProject.dotm
не выполняется. Если я снова дважды щелкну по тегу, VBA выполнится и покажет диалоговое окно. Если я снова закрою диалоговое окно и продолжу выполнять двойной щелчок, диалоговое окно не будет отображаться, в следующей попытке отобразится диалоговое окно. Это же поведение продолжится.
С другой стороны, при использовании метода form.Show()
для отображения Windows Форма, в которой проблема не возникает.
Вы можете использовать описанный ниже метод в AddInUtilities.cs
в проекте VSTO, чтобы повторить эту проблему.
public void HandleClickEvents()
{
Form objForm = new Form();
objForm.Width = 300;
objForm.Height = 300;
//objForm.Show(); /* This doesn't give the issue */
objForm.ShowDialog(); /* This gives the issue */
}
Теперь мой вопрос:
Мне действительно нужно использовать метод objForm.ShowDialog()
, чтобы показать диалоговое окно, и в то же время мне нужно, чтобы диалоговое окно появлялось при каждом двойном - нажмите на поле TESTTAG: Test1
MacroButton без сбоев.
Обновление
При повторном тестировании обнаружилось, что после двойного щелчка документ находится в режиме, подобном «неактивному». Когда я щелкаю один раз в каком-либо месте документа, я снова могу дважды щелкнуть. Я попробовал приведенные ниже коды в классе AddInUtilities, а также в методе TPS_TestTag()
VBA. Но ни один из них не сработал.
object word = System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
wordApp = (Word.Application)word;
wordApp.ActiveDocument.Activate(); //or
wordApp.ActiveDocument.ActiveWindow.ActivePane.Selection.Select();
VB код
Public Sub TPS_TestTag()
Set addIn = Application.COMAddIns("MyVSTO")
Set automationObject = addIn.Object
automationObject.HandleClickEvents
Word.ActiveDocument.Activate
End Sub
Как это решить?