2

C# の Microsoft Word ドキュメントの DocumentBeforeClose イベントにイベントを接続しました。

this.Application.DocumentBeforeClose +=
                new MSWord.ApplicationEvents4_DocumentBeforeCloseEventHandler(Application_DocumentBeforeClose);

いくつかのロジックが true の場合、Cancel フラグを true に設定して、ドキュメントが閉じないようにします。ただし、イベントが発生し、Cancel フラグが true に設定されていても、ドキュメントは閉じられます。

これはバグですか?

4

1 に答える 1

2

私はついにそれを理解しました。また、イベント ハンドラーを実際の Word ドキュメント (Microsoft.Office.Tools.Word.Document) オブジェクトにもフックする必要がありました。(Tools.Word.Document と Interop.Word.Document は頭痛の種です...)

this.Application.DocumentBeforeClose += new Interop.Word.ApplicationEvents4_DocumentBeforeCloseEventHandler(Application_DocumentBeforeClose);

Application_DocumentBeforeClose(Interop.Word.Document document, ref bool Cancel)
{
  // Documents is a list of the active Tools.Word.Document objects.
  if (this.Documents.ContainsKey(document.FullName))
  {
    // I set the tag to true to indicate I want to cancel.
    this.Document[document.FullName].Tag = true;
  }
}

public MyDocument() 
{
  // Tools.Office.Document object
  doc.BeforeClose += new CancelEventHandler(WordDocument_BeforeClose);
}

private void WordDocument_BeforeClose(object sender, CancelEventArgs e)
{
  Tools.Word.Document doc = sender as Tools.Word.Document;

  // This is where I now check the tag I set.
  bool? cancel = doc.Tag as bool?;
  if (cancel == true)
  {
    e.Cancel = true;
  }
}

アプリケーション ロジックはすべて Application クラス コードで実行されるため、Close イベントをキャンセルすることを MyDocument クラス イベントに示す方法が必要でした。そのため、タグ オブジェクトを使用してフラグを保存します。

于 2012-09-28T13:41:18.097 に答える