我正在使用 VSTO 开发一个 word 插件。在涉及的 Word 文档表面上有几个 MacroButton 字段。为了解决字段的双击事件,我在模板 (MyTestProject.dotm) 中使用了 VBA 宏。
当域代码隐藏时,它显示为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
出现选中:
如果我关闭表单并立即TESTTAG: Test1
再次双击标签,而不单击其他任何地方,TPS_TestTag()
则MyTestProject.dotm
不会执行。如果我再次双击标签,VBA 将执行并显示对话框。如果我再次关闭对话框并继续双击,对话框将不会显示,在下一次尝试 - 对话框显示。同样的行为继续。
另一方面,当使用该form.Show()
方法显示 Windows 窗体时,不会出现此问题。
您可以在 VSTO 项目中使用以下方法AddInUtilities.cs
来复制此问题。
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
如何解决这个问题?