您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > CAD_二次开发中使用事件
第9章使用事件第9章使用事件•事件是AutoCAD发出的通知或消息,通知用户有关任务的当前状态,或就发生的某件事警告用户。例如,保存图形时会触发BeginSave事件,当打开图形、启动命令以及系统变量被修改时会触发另外的事件。有了这项信息,用户可以编写子例程或事件处理程序,使用这些事件来跟踪处理特定图形所用的时间。•本节主题•了解AutoCAD中的事件•事件处理的原则•注册和解除注册事件•处理应用程序事件•处理文档事件•处理DocumentCollection事件•处理对象事件•用.NET注册COM基础事件9.1了解AutoCAD中的事件第9章使用事件9.1了解AutoCAD中的事件在AutoCAD中有许多不同的事件类型。下面是一些普通的事件类型:•Application-事件响应AutoCAD的关闭、系统变量的修改、双击前以及进入和离开模型状态。•Database-事件响应保存图形,对象的添加,删除或修改,块引用的插入,附加和修改外部图形(Xrefs)。也有文档层的事件用于系统变量的修改。•Document-事件响应图形的关闭,AutoCAD命令的发出,发出AutoLISP命令或语句以及修改系统变量。•DocumentCollection-事件响应文件的创建和销毁,文档的激活或失活,以及文档锁定模式的修改。•Editor-事件响应用户的输入请求被修改时。9.1了解AutoCAD中的事件•Graphics-事件响应视图的创建和销毁,以及视图配置的修改。•Plotting-事件响应于打印一个布局。•Publishing-事件响应于布局的发布。•Runtime-事件响应于模型的加载和卸载,以及变量已修改或正在修改。•Windows-事件响应于状态栏、托盘项目、面板和信息中心的修改。•用于响应事件的子例程称为事件处理程序,每次触发指定给它们的事件时,都会自动执行这些程序。事件中包含的信息会通过参数被返回,像SystemVariableChanging事件中的系统变量名,它会通过事件处理程序的SystemVariableChangingEventArgs对象被传递出来。9.2事件处理的原则第9章使用事件9.2事件处理的原则需要记住的是,事件只是提供了AutoCAD内部发生的状态或动作信息。虽然事件处理程序可以响应这些事件,但触发事件处理程序时,AutoCAD通常都是正处在处理命令的执行过程中。因此,如果要使事件处理程序在涉及AutoCAD及其数据库时提供安全的操作,则需要对事件处理程序进行一些限制。•不要依赖事件发生的顺序。编写事件处理程序时,请不要依赖用户所认为的事件发生顺序。例如,如果用户发出OPEN命令,则事件CommandWillStart,DocumentCreateStarted,DocumentCreated,和CommandEnded将全部被触发。但它们的发生顺序可能并不是这样。唯一可以确定大多数事件都是成对出现的,你beginning和Ending事件。9.2事件处理的原则•不要依赖操作的顺序。如果用户删除object1,然后再删除object2,这时请不要依赖这样的事实,即先收到object1的ObjectErased事件,然后收到object2的事件。实际上用户可能会先收到object2的ObjectErased事件。•不要试图从事件处理程序中执行任何交互式函数。试图从事件处理程序中执行交互式函数可能会造成严重问题,因为触发事件时AutoCAD可能仍在处理命令。因此,应始终在事件处理程序中避免在命令提示符下请求用户输入,也不要请求选择对象和SendStringToExecute方法。9.2事件处理的原则•不要从事件处理程序中启动对话框。对话框和交互式函数一样,也会干涉AutoCAD的当前操作。消息框和警告框不被认为是交互的,因而可以安全地发出;但在事件处理程序中像EnterModal,LeaveModal,DocumentActivated和DocumentToBeDeactivated事件中发出消息框则会导致顺序混乱。•可以向数据库中的任何对象写入数据,但发出事件的对象除外。显然,导致触发事件的任何对象可能仍在处于打开状态,并用于当前正在执行的操作。因此,要避免从对象的事件处理程序将任何信息再写入到该对象。然而,用户可以安全地从触发事件的对象读取信息。9.2事件处理的原则•不要从事件处理程序中执行任何触发相同事件的操作。如果在事件处理程序中执行触发该相同事件的相同操作,会导致无限循环。例如,用户不该尝试从ObjectOpenedForModify事件中打开对象;否则,AutoCAD将不断打开对象。•请记住,AutoCAD显示模式对话框时,不会触发任何事件。9.3注册和解除注册事件第9章使用事件9.3注册和解除注册事件•用记在可以响应事件前,事件必须在AutoCAD中注册。通过创建一个新的合适的类型的事件处理程序注册事件,然后将它指定给你想注册的事件的对象。一旦事件完成,最好是注册它,以尽量减小和其它反应器的冲突以及减少AutoCAD需要维护事务处理程序所使用的内存和CPU时间。•注册事件•用户通过为事件追加一个事件处理程序来注册。事件处理程序对象需要一个必须在用户工程中定义的过程。大多数事件处理程序需要一个接受两个参数的过程,一个参数的类型为Object而另一个表示事件的返回参数。注册事件使用VB.NET的AddHandler语句或C#的+=运算符。9.3注册和解除注册事件•下面代码注册一个名为appSysVarChanged的过程与SystemVariableChangedEventHandler对象类型的SystemVariableChanged事件相关联。appSysVarChanged过程接受两个参数:Object和SystemVariableChangedEventArgs。SystemVariableChangedEventArgs对象返回事件被注册后修改的系统变量的名字。•Application.SystemVariableChanged+=•newSystemVariableChangedEventHandler(appSysVarChanged)9.3注册和解除注册事件•解除注册事件•事件的解除注册是通过从事件中移除分配给它的事件处理程序来完成的。用户利用与向事件注册事件处理程序相同的语法,来解除事件的注册,只是使用的语句或运算符有所不同,必须使用VB.NET的RemoveHandler语句或C#的-=运算符。9.3注册和解除注册事件•下面代码从对象类型为SystemVariableChangedEventHandler的SystemVariableChanged事件中解除注册名为appSysVarChanged的过程。•Application.SystemVariableChanged+=•newSystemVariableChangedEventHandler(appSysVarChanged)9.4处理应用程序事件第9章使用事件9.4处理应用程序事件•应用程序对象事件用于响应应用程序窗口。一旦应用程序事件被注册,它就一直会存在,直到AutoCAD被关闭或事件解除注册。•下面的事件可用于应用程序对象:•BeginCustomizationMode•仅在AutoCAD进入自定义模式时触发。•BeginDoubleClick•当鼠标双击时触发。•BeginQuit•仅在AutoCAD进程结束前触发。9.4处理应用程序事件•DisplayingCustomizeDialog•仅在自定义对话框显示前触发。•DisplayingDraftingSettingsDialog•仅在草图设置对话框显示前触发。•DisplayingOptionDialog•仅在选项对话框显示前触发。•EndCustomizationMode•当AutoCAD退出自定义模式时触发。•EnterModal•仅在模型对话框显示前触发。9.4处理应用程序事件•Idle•当AutoCAD发送信息时触发。•LeaveModal•当模型对话框关闭时触发。•PreTranslateMessage•仅在通过AutoCAD转换一个信息时触发。•QuitAborted•当尝试终止正在关闭的AutoCAD时触发。•QuitWillStart•在BeginQuit事件后,开始关闭前触发。9.4处理应用程序事件•SystemVariableChanged•当尝试修改系统变量完成时触发。•SystemVariableChanging•仅在尝试修改系统变量前触发。•启用应用程序对象事件•本例演示如何用BeginQuit事件注册事件处理程序。一旦注册完,AutoCAD完全关闭前会显示一个对话框。•9.4启用应用程序对象事件.cs9.5处理文档事件第9章使用事件9.5处理文档事件•文档对象事件用于响应文档窗口。当文档事件被注册后,它仅关联与之关联的文档对象。所以如果一个事件需要和每个文档注册,就应该使用DocumentCollection对象的DocumentCreated事件注册事件给每个新的或打开的图形。•下列事件可用于文档对象:•BeginDocumentClose•仅在收到关闭图形的请求后触发。•CloseAborted•当尝试终止关闭图形时触发。9.5处理文档事件•CloseWillStart•在BeginDocumentClose事件后,开始关闭图形前触发。•CommandCancelled•当命令在完成前被取消时触发。•CommandEnded•命令完成后马上触发。•CommandFailed•当命令未能完成并没有取消时触发。•CommandWillStart•命令发出后,在它完成前马上触发。9.5处理文档事件•ImpliedSelectionChanged•当当前Pickfirst选择集设置修改时触发。•LispCancelled•当LISP表达式计算取消时触发。•LispEnded•在LISP表达式计算完成时触发。•LispWillStart•当AutoCAD接收到LISP表达式的计算请求后马上触发。•UnknownCommand•当在命令提示符中输入未知命令时马上触发。9.5处理文档事件•启动文档对象事件•本例使用BeginDocumentClose事件提示用户是否想继续关闭当前图形。一个有Yes和No按扭的消息框会被显示。点击No后使用事件处理程序返回的参数的Veto方法终止文档的关闭。•9.5启动文档对象事件.cs9.6处理DocumentCollection事件第9章使用事件9.6处理DocumentCollection事件•DocumentCollection对象事件用于响应在应用程序中打开文档。DocumentCollection事件不同于Document对象事件,它将一直保持注册状态,直到AutoCAD关闭或解除注册。•下面的事件可用于DocumentCollection对象:•DocumentActivated•当文档窗口激活时触发。•DocumentActivationChanged•活动文档窗口失活或销毁后触发。9.6处理DocumentCollection事件•DocumentBecameCurrent•当文档窗口设置为当前文档并且与前一个活动文档窗口不同时触发。•DocumentCreated•文档窗口被创建后触发。创建一个新图形或打开一个现有图形后出现。•DocumentCreateStarted•仅在文档窗口被创建前触发。创建一个新图形或打开一个现有图形前出现。•DocumentCreationCanceled•当要求创建新图形以及打开一个现有图形被取消后触发。9.6处理DocumentCollection事件•DocumentDestroyed•在文档窗口被销毁以及与它关联的数据库对象被删除前触发。•DocumentLockModeChanged•文档的锁定模式被修改后触发。•Document
本文标题:CAD_二次开发中使用事件
链接地址:https://www.777doc.com/doc-3125836 .html