Я написал AddIn для Word (C #, VSTO). Если я открою файл Word в запущенном Word-экземпляре (Office 2016 Professional Plus), регистрируется событие DocumentOpen. Но если я запускаю Word через Doubleclick для Wordfile, событие будет игнорироваться.
Я пытался поместить код функции Ribbon_Load
в функцию ThisAddIn_Startup
в классе ThisAddIn.cs
. Но поведение остается тем же: событие DocumentOpen не вызывается, когда Word запускается с помощью двойного щелчка по файлу Word.
Вот мой воспроизводимый пример:
Класс LAS-Vorlagen.cs
:
using System;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Interop.Word;
namespace LAS_Word_Vorlagen
{
[ComVisible(true)]
public class LAS_Vorlagen : Office.IRibbonExtensibility
{
private Office.IRibbonUI ribbon;
public LAS_Vorlagen()
{
}
public string GetCustomUI(string ribbonID)
{
return GetResourceText("LAS_Word_Vorlagen.LAS-Vorlagen.xml");
}
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
this.ribbon = ribbonUI;
// Event-Listener registration
// Globals.ThisAddIn.Application.DocumentOpen += new Word.ApplicationEvents4_DocumentOpenEventHandler(MessageBox_Show_At_Loading_Document);
}
public void MessageBox_Show_At_Loading_Document(Document doc)
{
MessageBox.Show("DocumentOpen-Event raised!");
}
private static string GetResourceText(string resourceName)
{
Assembly asm = Assembly.GetExecutingAssembly();
string[] resourceNames = asm.GetManifestResourceNames();
for (int i = 0; i < resourceNames.Length; ++i)
{
if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0)
{
using (StreamReader resourceReader = new StreamReader(asm.GetManifestResourceStream(resourceNames[i])))
{
if (resourceReader != null)
{
return resourceReader.ReadToEnd();
}
}
}
}
return null;
}
}
}
Вот класс ThisAddIn.cs
:
using Word = Microsoft.Office.Interop.Word;
namespace LAS_Word_Vorlagen
{
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
// Event-Listener registration
LAS_Vorlagen test = new LAS_Vorlagen();
Globals.ThisAddIn.Application.DocumentOpen += new Word.ApplicationEvents4_DocumentOpenEventHandler(test.MessageBox_Show_At_Loading_Document);
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
#region Von VSTO generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new LAS_Vorlagen();
}
}
}
И, наконец, XML-конфигурация LAS-Vorlagen.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab id="TabAddIns_LAS" label ="LAS-Vorlagen">
</tab>
</tabs>
</ribbon>
</customUI>