3

と を使用した Microsoft Word アドインがVSTOありc#ます。

ドキュメントごとに、ドキュメントの ShutDown イベントを使用して親オブジェクトのクリーンアップを行い、BeforeClose イベントを使用して親オブジェクトのクローズ前の検証を行います。私の検証では、ドキュメントを保存する必要があり、BeforeClose イベントでそれを実行しようとします。

ドキュメントが一度も保存されていない場合は、[名前を付けて保存] ダイアログが表示されます。ユーザーが [キャンセル] をクリックすると、 aCOMExceptionがスローされ、それを適切にキャッチします。次に、Save/Don't Save/Cancelダイアログが表示されます (通常、変更が保存されていない状態で閉じようとしているドキュメントに対して表示されます)。ユーザーが最初の [名前を付けて保存] ダイアログから保存した場合、または 2 番目の保存ダイアログから保存した場合、ShutDownイベントは正しく発生します。ただし、ユーザーが 2 番目のダイアログで [保存しない] をクリックすると、ShutDown イベントは発生しません。

private void WordDocument_BeforeClose(object sender, System.ComponentModel.CancelEventArgs e)
{
  try
  {
    this.WordDocument.Save();
  }
  catch (System.Runtime.InteropServices.COMException a)
  {
    log.Error(a.Message);
  }
}

private void WordDocument_Shutdown(Object sender, EventArgs e)
{
  // Parent cleanup.
}
4

0 に答える 0