CAD_二次开发中使用事件_第1页
CAD_二次开发中使用事件_第2页
CAD_二次开发中使用事件_第3页
CAD_二次开发中使用事件_第4页
CAD_二次开发中使用事件_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 9 9 章 使用事件第 9 9 章 使用事件 事件是 AutoCAD 发出的通知或消息,通知用户有关任务的当前状态,或就发生的某件事警告用户。例如,保存图形时会触发 BeginSave 事件,当打开图形、启动命令以及系统变量被修改时会触发另外的事件。有了这项信息,用户可以编写子例程或事件处理程序,使用这些事件来跟踪处理特定图形所用的时间。 本节主题 了解AutoCAD中的事件 事件处理的原则 注册和解除注册事件 处理应用程序事件 处理文档事件 处理 DocumentCollection 事件 处理对象事件 用.NET注册COM基础事件 9.1了解AutoCAD中的事件第9 章 使用事件9.

2、19.1了解AutoCADAutoCAD中的事件在 AutoCAD 中有许多不同的事件类型。下面是一些普通的事件类型: Application - 事件响应 AutoCAD 的关闭、系统变量的修改、双击前以及进入和离开模型状态。 Database - 事件响应保存图形,对象的添加,删除或修改,块引用的插入,附加和修改外部图形(Xrefs)。也有文档层的事件用于系统变量的修改。 Document - 事件响应图形的关闭,AutoCAD 命令的发出,发出 AutoLISP 命令或语句以及修改系统变量。 DocumentCollection - 事件响应文件的创建和销毁,文档的激活或失活,以及文档锁

3、定模式的修改。 Editor - 事件响应用户的输入请求被修改时。 9.19.1了解AutoCADAutoCAD中的事件 Graphics - 事件响应视图的创建和销毁,以及视图配置的修改。 Plotting - 事件响应于打印一个布局。 Publishing - 事件响应于布局的发布。 Runtime - 事件响应于模型的加载和卸载,以及变量已修改或正在修改。 Windows - 事件响应于状态栏、托盘项目、面板和信息中心的修改。 用于响应事件的子例程称为事件处理程序,每次触发指定给它们的事件时,都会自动执行这些程序。事件中包含的信息会通过参数被返回,像 SystemVariableChan

4、ging 事件中的系统变量名,它会通过事件处理程序的 SystemVariableChangingEventArgs 对象被传递出来。 9.2事件处理的原则第9 章 使用事件9.29.2事件处理的原则需要记住的是,事件只是提供了 AutoCAD 内部发生的状态或动作信息。虽然事件处理程序可以响应这些事件,但触发事件处理程序时,AutoCAD 通常都是正处在处理命令的执行过程中。因此,如果要使事件处理程序在涉及 AutoCAD 及其数据库时提供安全的操作,则需要对事件处理程序进行一些限制。 不要依赖事件发生的顺序。 编写事件处理程序时,请不要依赖用户所认为的事件发生顺序。例如,如果用户发出 OP

5、EN 命令,则事件 CommandWillStart, DocumentCreateStarted, DocumentCreated, 和 CommandEnded 将全部被触发。但它们的发生顺序可能并不是这样。唯一可以确定大多数事件都是成对出现的,你 beginning 和 Ending 事件。9.29.2事件处理的原则 不要依赖操作的顺序。 如果用户删除 object1,然后再删除 object2,这时请不要依赖这样的事实,即先收到 object1 的 ObjectErased 事件,然后收到 object2 的事件。实际上用户可能会先收到 object2 的 ObjectErased 事

6、件。 不要试图从事件处理程序中执行任何交互式函数。 试图从事件处理程序中执行交互式函数可能会造成严重问题,因为触发事件时 AutoCAD 可能仍在处理命令。因此,应始终在事件处理程序中避免在命令提示符下请求用户输入,也不要请求选择对象和 SendStringToExecute 方法。 9.29.2事件处理的原则 不要从事件处理程序中启动对话框。 对话框和交互式函数一样,也会干涉 AutoCAD 的当前操作。消息框和警告框不被认为是交互的,因而可以安全地发出;但在事件处理程序中像 EnterModal, LeaveModal, DocumentActivated 和 DocumentToBeDe

7、activated 事件中发出消息框则会导致顺序混乱。 可以向数据库中的任何对象写入数据,但发出事件的对象除外。 显然,导致触发事件的任何对象可能仍在 处于打开状态,并用于当前正在执行的操作。因此,要避免从对象的事件处理程序将任何信息再写入到该对象。然而,用户可以安全地从触发事件的对象读取信息。9.29.2事件处理的原则 不要从事件处理程序中执行任何触发相同事件的操作。 如果在事件处理程序中执行触发该相同事件的相同操作,会导致无限循环。例如,用户不该尝试从 ObjectOpenedForModify 事件中打开对象;否则,AutoCAD 将不断打开对象。 请记住,AutoCAD 显示模式对话框

8、时,不会触发任何事件。 9.3注册和解除注册事件第9 章 使用事件9.39.3注册和解除注册事件 用记在可以响应事件前,事件必须在 AutoCAD 中注册。通过创建一个新的合适的类型的事件处理程序注册事件,然后将它指定给你想注册的事件的对象。一旦事件完成,最好是注册它,以尽量减小和其它反应器的冲突以及减少 AutoCAD 需要维护事务处理程序所使用的内存和 CPU 时间。 注册事件 用户通过为事件追加一个事件处理程序来注册。事件处理程序对象需要一个必须在用户工程中定义的过程。大多数事件处理程序需要一个接受两个参数的过程,一个参数的类型为 Object 而另一个表示事件的返回参数。注册事件使用

9、VB.NET 的 AddHandler 语句或 C# 的 += 运算符。9.39.3注册和解除注册事件 下面代码注册一个名为 appSysVarChanged 的过程与 SystemVariableChangedEventHandler 对象类型的 SystemVariableChanged 事件相关联。appSysVarChanged 过程接受两个参数: Object 和 SystemVariableChangedEventArgs。SystemVariableChangedEventArgs 对象返回事件被注册后修改的系统变量的名字。 Application.SystemVariableC

10、hanged += new SystemVariableChangedEventHandler(appSysVarChanged)9.39.3注册和解除注册事件 解除注册事件 事件的解除注册是通过从事件中移除分配给它的事件处理程序来完成的。用户利用与向事件注册事件处理程序相同的语法,来解除事件的注册,只是使用的语句或运算符有所不同,必须使用 VB.NET 的 RemoveHandler 语句或C#的-=运算符。9.39.3注册和解除注册事件 下面代码从对象类型为 SystemVariableChangedEventHandler 的 SystemVariableChanged 事件中解除注册名

11、为 appSysVarChanged 的过程。 Application.SystemVariableChanged += new SystemVariableChangedEventHandler(appSysVarChanged)9.4 处理应用程序事件第9 章 使用事件9.4 9.4 处理应用程序事件 应用程序对象事件用于响应应用程序窗口。一旦应用程序事件被注册,它就一直会存在,直到 AutoCAD 被关闭或事件解除注册。 下面的事件可用于应用程序对象: BeginCustomizationMode 仅在 AutoCAD 进入自定义模式时触发。 BeginDoubleClick 当鼠标双击

12、时触发。 BeginQuit 仅在 AutoCAD 进程结束前触发。9.4 9.4 处理应用程序事件 DisplayingCustomizeDialog 仅在自定义对话框显示前触发。 DisplayingDraftingSettingsDialog 仅在草图设置对话框显示前触发。 DisplayingOptionDialog 仅在选项对话框显示前触发。 EndCustomizationMode 当 AutoCAD 退出自定义模式时触发。 EnterModal 仅在模型对话框显示前触发。9.4 9.4 处理应用程序事件 Idle 当 AutoCAD 发送信息时触发。 LeaveModal 当模型

13、对话框关闭时触发。 PreTranslateMessage 仅在通过 AutoCAD 转换一个信息时触发。 QuitAborted 当尝试终止正在关闭的 AutoCAD 时触发。 QuitWillStart 在 BeginQuit 事件后,开始关闭前触发。9.4 9.4 处理应用程序事件 SystemVariableChanged 当尝试修改系统变量完成时触发。 SystemVariableChanging 仅在尝试修改系统变量前触发。 启用应用程序对象事件 本例演示如何用 BeginQuit 事件注册事件处理程序。一旦注册完,AutoCAD 完全关闭前会显示一个对话框。 9.4 启用应用程序

14、对象事件 .cs9.5处理文档事件第9 章 使用事件9.59.5处理文档事件 文档对象事件用于响应文档窗口。当文档事件被注册后,它仅关联与之关联的文档对象。所以如果一个事件需要和每个文档注册,就应该使用 DocumentCollection 对象的 DocumentCreated 事件注册事件给每个新的或打开的图形。 下列事件可用于文档对象: BeginDocumentClose 仅在收到关闭图形的请求后触发。 CloseAborted 当尝试终止关闭图形时触发。9.59.5处理文档事件 CloseWillStart 在 BeginDocumentClose 事件后,开始关闭图形前触发。 Co

15、mmandCancelled 当命令在完成前被取消时触发。 CommandEnded 命令完成后马上触发。 CommandFailed 当命令未能完成并没有取消时触发。 CommandWillStart 命令发出后,在它完成前马上触发。9.59.5处理文档事件 ImpliedSelectionChanged 当当前 Pickfirst 选择集设置修改时触发。 LispCancelled 当 LISP 表达式计算取消时触发。 LispEnded 在 LISP 表达式计算完成时触发。 LispWillStart 当 AutoCAD 接收到 LISP 表达式的计算请求后马上触发。 UnknownCo

16、mmand 当在命令提示符中输入未知命令时马上触发。9.59.5处理文档事件 启动文档对象事件 本例使用 BeginDocumentClose 事件提示用户是否想继续关闭当前图形。一个有 Yes 和 No 按扭的消息框会被显示。点击 No 后使用事件处理程序返回的参数的 Veto 方法终止文档的关闭。 9.5 启动文档对象事件 .cs9.6处理 DocumentCollection 事件第9 章 使用事件9.69.6处理 DocumentCollection DocumentCollection 事件 DocumentCollection 对象事件用于响应在应用程序中打开文档。Document

17、Collection 事件不同于 Document 对象事件,它将一直保持注册状态,直到 AutoCAD 关闭或 解除注册。 下面的事件可用于 DocumentCollection 对象: DocumentActivated 当文档窗口激活时触发。 DocumentActivationChanged 活动文档窗口失活或销毁后触发。9.69.6处理 DocumentCollection DocumentCollection 事件 DocumentBecameCurrent 当文档窗口设置为当前文档并且与前一个活动文档窗口不同时触发。 DocumentCreated 文档窗口被创建后触发。创建一个

18、新图形或打开一个现有图形后出现。 DocumentCreateStarted 仅在文档窗口被创建前触发。创建一个新图形或打开一个现有图形前出现。 DocumentCreationCanceled 当要求创建新图形以及打开一个现有图形被取消后触发。9.69.6处理 DocumentCollection DocumentCollection 事件 DocumentDestroyed 在文档窗口被销毁以及与它关联的数据库对象被删除前触发。 DocumentLockModeChanged 文档的锁定模式被修改后触发。 DocumentLockModeChangeVetoed 修改文档的锁定模式被禁止后

19、触发。 DocumentLockModeWillChange 文档的锁定模式被修改前触发。 DocumentToBeActivated 当文档将要被激活时触发。9.69.6处理 DocumentCollection DocumentCollection 事件 DocumentToBeDeactivated 当文档将要失活时触发。 DocumentToBeDestroyed 当文档将要销毁时触发。 启用 DocumentCollection 对象事件 下面示例使用 DocumentActivated 事件指示一个图形窗口已激活。当事件出现时将显示一个消息框,内容为被激活文档的图形名。 9.6 启

20、用 DocumentCollection 对象事件 .cs9.7处理对象事件第9 章 使用事件9.79.7处理对象事件 对象事件用于响应从图形数据库中打开、添加、修改和删除对象。有两种与对象类型相关的事件:对象和数据库层。对象层事件被定义成响应数据库中指定的对象,而数据库层事件用于响应数据库中所有对象的事件。 定义一个对象层事件是通过注册一个事件处理程序到一个数据库对象的事件中来完成的。数据库层对象事件的定义是通过注册一个事件处理程序到任一个打开数据库对象的事件来完成的。9.79.7处理对象事件 下列事件可用于 DBObjects: Cancelled 当对象的打开操作被取消时触发。 Copi

21、ed 对象被复制后触发。 Erased 当对象标记为删除或取消删除时触发。 Goodbye 当对象因为与它相关的数据库将被销毁而将要从内存中删除时触发。9.79.7处理对象事件 Modified 当对象修改后触发。 ModifiedXData 当附加到对象的 XData 被修改后触发。 ModifyUndone 当对象先前的修改未完成时触发。 ObjectClosed 当对象关闭时触发。 OpenedForModify 为修改对象而打开对象时触发。9.79.7处理对象事件 Reappended 当一个撤消操作后对象从数据库中移除,然后使用重做操作重新追加时触发。 SubObjectModified 当对象的子对象被修改时触发。 Unappended 当一个撤消操作后对象从数据库中移除时触发。9.79.7处理对象事件 下面的一些事件用于响应数据库层的对象变化: ObjectAppended 当对象添加到数据库时触发。 ObjectErased 当对象从数据库中清除或撤消清除时触发。 ObjectModified 当对象被修改时触发。 ObjectOpenedForModify 为修改对象而打开对象时触发。9.79.7处理对象事件 ObjectReappe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论