




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第 9 9 章 使用事件第 9 9 章 使用事件 事件是 AutoCAD 發(fā)出的通知或消息,通知用戶有關任務的當前狀態(tài),或就發(fā)生的某件事警告用戶。例如,保存圖形時會觸發(fā) BeginSave 事件,當打開圖形、啟動命令以及系統變量被修改時會觸發(fā)另外的事件。有了這項信息,用戶可以編寫子例程或事件處理程序,使用這些事件來跟蹤處理特定圖形所用的時間。 本節(jié)主題 了解AutoCAD中的事件 事件處理的原則 注冊和解除注冊事件 處理應用程序事件 處理文檔事件 處理 DocumentCollection 事件 處理對象事件 用.NET注冊COM基礎事件 9.1了解AutoCAD中的事件第9 章 使用事件9.
2、19.1了解AutoCADAutoCAD中的事件在 AutoCAD 中有許多不同的事件類型。下面是一些普通的事件類型: Application - 事件響應 AutoCAD 的關閉、系統變量的修改、雙擊前以及進入和離開模型狀態(tài)。 Database - 事件響應保存圖形,對象的添加,刪除或修改,塊引用的插入,附加和修改外部圖形(Xrefs)。也有文檔層的事件用于系統變量的修改。 Document - 事件響應圖形的關閉,AutoCAD 命令的發(fā)出,發(fā)出 AutoLISP 命令或語句以及修改系統變量。 DocumentCollection - 事件響應文件的創(chuàng)建和銷毀,文檔的激活或失活,以及文檔鎖
3、定模式的修改。 Editor - 事件響應用戶的輸入請求被修改時。 9.19.1了解AutoCADAutoCAD中的事件 Graphics - 事件響應視圖的創(chuàng)建和銷毀,以及視圖配置的修改。 Plotting - 事件響應于打印一個布局。 Publishing - 事件響應于布局的發(fā)布。 Runtime - 事件響應于模型的加載和卸載,以及變量已修改或正在修改。 Windows - 事件響應于狀態(tài)欄、托盤項目、面板和信息中心的修改。 用于響應事件的子例程稱為事件處理程序,每次觸發(fā)指定給它們的事件時,都會自動執(zhí)行這些程序。事件中包含的信息會通過參數被返回,像 SystemVariableChan
4、ging 事件中的系統變量名,它會通過事件處理程序的 SystemVariableChangingEventArgs 對象被傳遞出來。 9.2事件處理的原則第9 章 使用事件9.29.2事件處理的原則需要記住的是,事件只是提供了 AutoCAD 內部發(fā)生的狀態(tài)或動作信息。雖然事件處理程序可以響應這些事件,但觸發(fā)事件處理程序時,AutoCAD 通常都是正處在處理命令的執(zhí)行過程中。因此,如果要使事件處理程序在涉及 AutoCAD 及其數據庫時提供安全的操作,則需要對事件處理程序進行一些限制。 不要依賴事件發(fā)生的順序。 編寫事件處理程序時,請不要依賴用戶所認為的事件發(fā)生順序。例如,如果用戶發(fā)出 OP
5、EN 命令,則事件 CommandWillStart, DocumentCreateStarted, DocumentCreated, 和 CommandEnded 將全部被觸發(fā)。但它們的發(fā)生順序可能并不是這樣。唯一可以確定大多數事件都是成對出現的,你 beginning 和 Ending 事件。9.29.2事件處理的原則 不要依賴操作的順序。 如果用戶刪除 object1,然后再刪除 object2,這時請不要依賴這樣的事實,即先收到 object1 的 ObjectErased 事件,然后收到 object2 的事件。實際上用戶可能會先收到 object2 的 ObjectErased 事
6、件。 不要試圖從事件處理程序中執(zhí)行任何交互式函數。 試圖從事件處理程序中執(zhí)行交互式函數可能會造成嚴重問題,因為觸發(fā)事件時 AutoCAD 可能仍在處理命令。因此,應始終在事件處理程序中避免在命令提示符下請求用戶輸入,也不要請求選擇對象和 SendStringToExecute 方法。 9.29.2事件處理的原則 不要從事件處理程序中啟動對話框。 對話框和交互式函數一樣,也會干涉 AutoCAD 的當前操作。消息框和警告框不被認為是交互的,因而可以安全地發(fā)出;但在事件處理程序中像 EnterModal, LeaveModal, DocumentActivated 和 DocumentToBeDe
7、activated 事件中發(fā)出消息框則會導致順序混亂。 可以向數據庫中的任何對象寫入數據,但發(fā)出事件的對象除外。 顯然,導致觸發(fā)事件的任何對象可能仍在 處于打開狀態(tài),并用于當前正在執(zhí)行的操作。因此,要避免從對象的事件處理程序將任何信息再寫入到該對象。然而,用戶可以安全地從觸發(fā)事件的對象讀取信息。9.29.2事件處理的原則 不要從事件處理程序中執(zhí)行任何觸發(fā)相同事件的操作。 如果在事件處理程序中執(zhí)行觸發(fā)該相同事件的相同操作,會導致無限循環(huán)。例如,用戶不該嘗試從 ObjectOpenedForModify 事件中打開對象;否則,AutoCAD 將不斷打開對象。 請記住,AutoCAD 顯示模式對話框
8、時,不會觸發(fā)任何事件。 9.3注冊和解除注冊事件第9 章 使用事件9.39.3注冊和解除注冊事件 用記在可以響應事件前,事件必須在 AutoCAD 中注冊。通過創(chuàng)建一個新的合適的類型的事件處理程序注冊事件,然后將它指定給你想注冊的事件的對象。一旦事件完成,最好是注冊它,以盡量減小和其它反應器的沖突以及減少 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 進入自定義模式時觸發(fā)。 BeginDoubleClick 當鼠標雙擊
12、時觸發(fā)。 BeginQuit 僅在 AutoCAD 進程結束前觸發(fā)。9.4 9.4 處理應用程序事件 DisplayingCustomizeDialog 僅在自定義對話框顯示前觸發(fā)。 DisplayingDraftingSettingsDialog 僅在草圖設置對話框顯示前觸發(fā)。 DisplayingOptionDialog 僅在選項對話框顯示前觸發(fā)。 EndCustomizationMode 當 AutoCAD 退出自定義模式時觸發(fā)。 EnterModal 僅在模型對話框顯示前觸發(fā)。9.4 9.4 處理應用程序事件 Idle 當 AutoCAD 發(fā)送信息時觸發(fā)。 LeaveModal 當模型
13、對話框關閉時觸發(fā)。 PreTranslateMessage 僅在通過 AutoCAD 轉換一個信息時觸發(fā)。 QuitAborted 當嘗試終止正在關閉的 AutoCAD 時觸發(fā)。 QuitWillStart 在 BeginQuit 事件后,開始關閉前觸發(fā)。9.4 9.4 處理應用程序事件 SystemVariableChanged 當嘗試修改系統變量完成時觸發(fā)。 SystemVariableChanging 僅在嘗試修改系統變量前觸發(fā)。 啟用應用程序對象事件 本例演示如何用 BeginQuit 事件注冊事件處理程序。一旦注冊完,AutoCAD 完全關閉前會顯示一個對話框。 9.4 啟用應用程序
14、對象事件 .cs9.5處理文檔事件第9 章 使用事件9.59.5處理文檔事件 文檔對象事件用于響應文檔窗口。當文檔事件被注冊后,它僅關聯與之關聯的文檔對象。所以如果一個事件需要和每個文檔注冊,就應該使用 DocumentCollection 對象的 DocumentCreated 事件注冊事件給每個新的或打開的圖形。 下列事件可用于文檔對象: BeginDocumentClose 僅在收到關閉圖形的請求后觸發(fā)。 CloseAborted 當嘗試終止關閉圖形時觸發(fā)。9.59.5處理文檔事件 CloseWillStart 在 BeginDocumentClose 事件后,開始關閉圖形前觸發(fā)。 Co
15、mmandCancelled 當命令在完成前被取消時觸發(fā)。 CommandEnded 命令完成后馬上觸發(fā)。 CommandFailed 當命令未能完成并沒有取消時觸發(fā)。 CommandWillStart 命令發(fā)出后,在它完成前馬上觸發(fā)。9.59.5處理文檔事件 ImpliedSelectionChanged 當當前 Pickfirst 選擇集設置修改時觸發(fā)。 LispCancelled 當 LISP 表達式計算取消時觸發(fā)。 LispEnded 在 LISP 表達式計算完成時觸發(fā)。 LispWillStart 當 AutoCAD 接收到 LISP 表達式的計算請求后馬上觸發(fā)。 UnknownCo
16、mmand 當在命令提示符中輸入未知命令時馬上觸發(fā)。9.59.5處理文檔事件 啟動文檔對象事件 本例使用 BeginDocumentClose 事件提示用戶是否想繼續(xù)關閉當前圖形。一個有 Yes 和 No 按扭的消息框會被顯示。點擊 No 后使用事件處理程序返回的參數的 Veto 方法終止文檔的關閉。 9.5 啟動文檔對象事件 .cs9.6處理 DocumentCollection 事件第9 章 使用事件9.69.6處理 DocumentCollection DocumentCollection 事件 DocumentCollection 對象事件用于響應在應用程序中打開文檔。Document
17、Collection 事件不同于 Document 對象事件,它將一直保持注冊狀態(tài),直到 AutoCAD 關閉或 解除注冊。 下面的事件可用于 DocumentCollection 對象: DocumentActivated 當文檔窗口激活時觸發(fā)。 DocumentActivationChanged 活動文檔窗口失活或銷毀后觸發(fā)。9.69.6處理 DocumentCollection DocumentCollection 事件 DocumentBecameCurrent 當文檔窗口設置為當前文檔并且與前一個活動文檔窗口不同時觸發(fā)。 DocumentCreated 文檔窗口被創(chuàng)建后觸發(fā)。創(chuàng)建一個
18、新圖形或打開一個現有圖形后出現。 DocumentCreateStarted 僅在文檔窗口被創(chuàng)建前觸發(fā)。創(chuàng)建一個新圖形或打開一個現有圖形前出現。 DocumentCreationCanceled 當要求創(chuàng)建新圖形以及打開一個現有圖形被取消后觸發(fā)。9.69.6處理 DocumentCollection DocumentCollection 事件 DocumentDestroyed 在文檔窗口被銷毀以及與它關聯的數據庫對象被刪除前觸發(fā)。 DocumentLockModeChanged 文檔的鎖定模式被修改后觸發(fā)。 DocumentLockModeChangeVetoed 修改文檔的鎖定模式被禁止后
19、觸發(fā)。 DocumentLockModeWillChange 文檔的鎖定模式被修改前觸發(fā)。 DocumentToBeActivated 當文檔將要被激活時觸發(fā)。9.69.6處理 DocumentCollection DocumentCollection 事件 DocumentToBeDeactivated 當文檔將要失活時觸發(fā)。 DocumentToBeDestroyed 當文檔將要銷毀時觸發(fā)。 啟用 DocumentCollection 對象事件 下面示例使用 DocumentActivated 事件指示一個圖形窗口已激活。當事件出現時將顯示一個消息框,內容為被激活文檔的圖形名。 9.6 啟
20、用 DocumentCollection 對象事件 .cs9.7處理對象事件第9 章 使用事件9.79.7處理對象事件 對象事件用于響應從圖形數據庫中打開、添加、修改和刪除對象。有兩種與對象類型相關的事件:對象和數據庫層。對象層事件被定義成響應數據庫中指定的對象,而數據庫層事件用于響應數據庫中所有對象的事件。 定義一個對象層事件是通過注冊一個事件處理程序到一個數據庫對象的事件中來完成的。數據庫層對象事件的定義是通過注冊一個事件處理程序到任一個打開數據庫對象的事件來完成的。9.79.7處理對象事件 下列事件可用于 DBObjects: Cancelled 當對象的打開操作被取消時觸發(fā)。 Copi
21、ed 對象被復制后觸發(fā)。 Erased 當對象標記為刪除或取消刪除時觸發(fā)。 Goodbye 當對象因為與它相關的數據庫將被銷毀而將要從內存中刪除時觸發(fā)。9.79.7處理對象事件 Modified 當對象修改后觸發(fā)。 ModifiedXData 當附加到對象的 XData 被修改后觸發(fā)。 ModifyUndone 當對象先前的修改未完成時觸發(fā)。 ObjectClosed 當對象關閉時觸發(fā)。 OpenedForModify 為修改對象而打開對象時觸發(fā)。9.79.7處理對象事件 Reappended 當一個撤消操作后對象從數據庫中移除,然后使用重做操作重新追加時觸發(fā)。 SubObjectModified 當對象的子對象被修改時觸發(fā)。 Unappended 當一個撤消操作后對象從數據庫中移除時觸發(fā)。9.79.7處理對象事件 下面的一些事件用于響應數據庫層的對象變化: ObjectAppended 當對象添加到數據庫時觸發(fā)。 ObjectErased 當對象從數據庫中清除或撤消清除時觸發(fā)。 ObjectModified 當對象被修改時觸發(fā)。 ObjectOpenedForModify 為修改對象而打開對象時觸發(fā)。9.79.7處理對象事件 ObjectReappe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加強林業(yè)資源保護重視林業(yè)快速發(fā)展
- 中小學生法制教育主題班會
- 跨境電商代理授權及售后服務合同
- 汽車銷售公司車輛售后服務及客戶關系維護合同
- 倉儲式超市場地租賃合同
- 國際快遞常年運輸合同范本
- 商業(yè)街區(qū)立體停車庫租賃及運營管理合同
- 中班健康:我的心情管理
- 陽光物業(yè)子公司下屬員工選聘與崗位培訓合同
- 餐廳廚房承包與特色調料研發(fā)合同
- 2022年醫(yī)學專題-肝內膽管結石詳解
- 涉密表格臺賬
- 明陽風機培訓課件
- 委外加工流程
- 住院醫(yī)囑審核登記表-9月上
- Q∕SY 05010-2016 油氣管道安全目視化管理規(guī)范
- 藍海華騰變頻器說明書
- 中國海洋大學論文封面模板
- 遵義會議-(演示)(課堂PPT)
- 訂單(英文范本)PurchaseOrder
- 雨污水合槽溝槽回填施工專項方案(優(yōu).選)
評論
0/150
提交評論