9.5. Обработка событий документа (Document Events)

Источник здесь.  [перевод не проверен] ;[Переводчик: Богданов Михаил]

    Объектные события документа используются, чтобы реагировать на окно документа. Когда события документа зарегистрированы, они связаны только с тем объектом документа, с которым зарегистрированы. Так если событие должно быть зарегистрировано во всех документах, вы должны использовать событие DocumentCreated объекта DocumentCollection для регистрации событий с каждым новым открытым чертежом.

Объект Document имеет следующие события:

BeginDocumentClose
    Происходит сразу после получения запроса на закрытие чертежа.

CloseAborted

    Происходит когда попытка закрытия чертежа прервана.

CloseWillStart

    Происходит после события BeginDocumentClose и до начала закрытия рисунка.

CommandCancelled

    Срабатывает, если команда отменена до завершения своей работы.

CommandEnded

    Срабатывает сразу после завершения работы.

CommandFailed

    Срабатывает, если команда не завершена и не отменена.

CommandWillStart

    Срабатывает сразу же после ввода команды, но до ее завершения.

ImpliedSelectionChanged

    Происходит, когда в набор предварительного выбора внесены изменения

LispCancelled

    Происходит при отмене вычисления ЛИСП выражения.

LispEnded

    Происходит после завершения вычисления ЛИСП выражения.

LispWillStart

    Происходит сразу после запроса AutoCAD’а вычислить ЛИСП выражение.

UnknownCommand

    Срабатывает немедленно, при вводе неизвестной команды в командной строке.

Включение событий объекта документа.

    В cледующем примере событие BeginDocumentClose запрашивает у пользователя, хочет ли он продолжить закрытие текущего чертежа. Выводится диалог с кнопками Да и Нет. Нажатие кнопки Нет, прерывает закрытие чертежа с помощью метода Veto аргумента, который возвращен событием.

Код VB.Net 

   1:  Imports Autodesk.AutoCAD.Runtime
   2:  Imports Autodesk.AutoCAD.ApplicationServices
   3:   
   4:  <CommandMethod("AddDocEvent")> _
   5:  Public Sub AddDocEvent()
   6:    '' Получаем текущий документ
   7:    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
   8:   
   9:    AddHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose
  10:  End Sub
  11:   
  12:  <CommandMethod("RemoveDocEvent")> _
  13:  Public Sub RemoveDocEvent()
  14:    '' Получаем текущий документ
  15:    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  16:   
  17:    RemoveHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose
  18:  End Sub
  19:   
  20:  Public Sub docBeginDocClose(ByVal senderObj As Object, _
  21:                              ByVal docBegClsEvtArgs As DocumentBeginCloseEventArgs)
  22:   
  23:    '' Показываем окно с предложением продолжить / отменить закрытие документа
  24:    If System.Windows.Forms.MessageBox.Show( _
  25:                        "The document is about to be closed." & _
  26:                        vbLf & "Do you want to continue?", _
  27:                        "Close Document", _
  28:                        System.Windows.Forms.MessageBoxButtons.YesNo) = _
  29:                        System.Windows.Forms.DialogResult.No Then
  30:        docBegClsEvtArgs.Veto()
  31:    End If
  32:  End If

Код C#

1: using Autodesk.AutoCAD.Runtime;
   2:  using Autodesk.AutoCAD.ApplicationServices;
   3:   
   4:  [CommandMethod("AddDocEvent")]
   5:  public void AddDocEvent()
   6:  {
   7:    // Получаем текущий документ
   8:    Document acDoc = Application.DocumentManager.MdiActiveDocument;
   9:   
  10:    acDoc.BeginDocumentClose += 
  11:        new DocumentBeginCloseEventHandler(docBeginDocClose);
  12:  }
  13:   
  14:  [CommandMethod("RemoveDocEvent")]
  15:  public void RemoveDocEvent()
  16:  {
  17:    // Получаем текущий документ
  18:    Document acDoc = Application.DocumentManager.MdiActiveDocument;
  19:   
  20:    acDoc.BeginDocumentClose -=
  21:        new DocumentBeginCloseEventHandler(docBeginDocClose);
  22:  }
  23:   
  24:  public void docBeginDocClose(object senderObj, 
  25:                               DocumentBeginCloseEventArgs docBegClsEvtArgs)
  26:  {
  27:    // Показываем окно с предложением продолжить / отменить закрытие документа
  28:    if (System.Windows.Forms.MessageBox.Show(
  29:                         "The document is about to be closed." +
  30:                         "\nDo you want to continue?",
  31:                         "Close Document",
  32:                         System.Windows.Forms.MessageBoxButtons.YesNo) ==
  33:                         System.Windows.Forms.DialogResult.No)
  34:    {
  35:        docBegClsEvtArgs.Veto();
  36:    }
  37:  }

 Код VBA / ActiveX

   1:  Private Sub AcadDocument_BeginDocClose(Cancel As Boolean)
   2:      ' Эта процедура обрабатывает событие BeginDocClose объекта 
Document
.
   3:   
   4:      If MsgBox("The document is about to be closed." & _
   5:                vbLf & "Do you want to continue?", vbYesNo, _
   6:                "Close Document") = vbNo Then
   7:   
   8:             ' Запрещаем закрывать документ
   9:             Cancel = True
  10:      End If
  11:  End Sub
Comments