注册基于 COM 的事件 (.NET)
AutoCAD COM 自动化库提供了一些在 .NET API 中找不到的独特事件。注册 COM 库中的事件与使用 VB 或 VBA 初始化事件的方式不同。使用 VB.NET 语句或 C# 运算符将事件处理程序与事件重新组合在一起。事件处理程序需要引发事件时应在其中调用的过程的地址。AddHandler+= 注册基于 COM 的事件此示例演示如何使用 COM 互操作注册事件。该事件与 AutoCAD COM Automation 库的 Application 对象相关联。将命令加载到 AutoCAD 中后,在命令提示符下输入 AddCOMEvent,然后将 DWG 文件拖放到图形窗口中。将显示一个消息框,提示您继续。使用 RemoveCOMEvent 命令删除事件处理程序。BeginFileDropBeginFileDrop VB.NETImports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Interop Imports Autodesk.AutoCAD.Interop.Common '' Global variable for AddCOMEvent and RemoveCOMEvent commands Dim acAppCom As AcadApplication <CommandMethod("AddCOMEvent")> _ Public Sub AddCOMEvent() '' Set the global variable to hold a reference to the application and '' register the BeginFileDrop COM event acAppCom = Application.AcadApplication AddHandler acAppCom.BeginFileDrop, AddressOf appComBeginFileDrop End Sub <CommandMethod("RemoveCOMEvent")> _ Public Sub RemoveCOMEvent() '' Unregister the COM event handle RemoveHandler acAppCom.BeginFileDrop, AddressOf appComBeginFileDrop acAppCom = Nothing End Sub Public Sub appComBeginFileDrop(ByVal strFileName As String, _ ByRef bCancel As Boolean) '' Display a message box prompting to continue inserting the DWG file If System.Windows.Forms.MessageBox.Show("AutoCAD is about to load " & _ strFileName & vbLf & _ "Do you want to continue loading this file?", _ "DWG File Dropped", _ System.Windows.Forms.MessageBoxButtons.YesNo) = _ System.Windows.Forms.DialogResult.No Then bCancel = True End If End Sub C#using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Interop; using Autodesk.AutoCAD.Interop.Common; // Global variable for AddCOMEvent and RemoveCOMEvent commands AcadApplication acAppCom; [CommandMethod("AddCOMEvent")] public void AddCOMEvent() { // Set the global variable to hold a reference to the application and // register the BeginFileDrop COM event acAppCom = Application.AcadApplication as AcadApplication; acAppCom.BeginFileDrop += new _DAcadApplicationEvents_BeginFileDropEventHandler(appComBeginFileDrop); } [CommandMethod("RemoveCOMEvent")] public void RemoveCOMEvent() { // Unregister the COM event handle acAppCom.BeginFileDrop -= new _DAcadApplicationEvents_BeginFileDropEventHandler(appComBeginFileDrop); acAppCom = null; } public void appComBeginFileDrop(string strFileName, ref bool bCancel) { // Display a message box prompting to continue inserting the DWG file if (System.Windows.Forms.MessageBox.Show("AutoCAD is about to load " + strFileName + "\nDo you want to continue loading this file?", "DWG File Dropped", System.Windows.Forms.MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No) { bCancel = true; } } VBA/ActiveX 代码引用Public WithEvents ACADApp As AcadApplication Sub Example_AcadApplication_Events() ' Intialize the public variable (ACADApp) ' which will be used to intercept AcadApplication Events ' ' Run this procedure FIRST! Set ACADApp = ThisDrawing.Application End Sub Private Sub ACADApp_BeginFileDrop _ (ByVal FileName As String, Cancel As Boolean) ' This procedure intercepts an Application BeginFileDrop event. ' ' This event is triggered when a drawing file is dragged ' into AutoCAD. ' ' To trigger this example event: ' 1) Run the Example_AcadApplication_Events procedure to initialize ' the public variable (named ACADApp) linked to this event. ' ' 2) Drag an AutoCAD drawing file into the AutoCAD ' application from either the Windows Desktop ' or Windows Explorer ' ' Use the "Cancel" variable to stop the loading of the ' dragged file, and the "FileName" variable to notify ' the user which file is about to be dragged in. If MsgBox("AutoCAD is about to load " & FileName & vbCrLf _ & "Do you want to continue loading this file?", _ vbYesNoCancel + vbQuestion) <> vbYes Then Cancel = True End If End Sub 相关概念父主题: |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 )
GMT+8, 2024-6-27 16:03
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.