




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第 9 9 章 使用事件第 9 9 章 使用事件 事件是 AutoCAD 發(fā)出的通知或消息,通知用戶有關(guān)任務(wù)的當(dāng)前狀態(tài),或就發(fā)生的某件事警告用戶。例如,保存圖形時(shí)會觸發(fā) BeginSave 事件,當(dāng)打開圖形、啟動命令以及系統(tǒng)變量被修改時(shí)會觸發(fā)另外的事件。有了這項(xiàng)信息,用戶可以編寫子例程或事件處理程序,使用這些事件來跟蹤處理特定圖形所用的時(shí)間。 本節(jié)主題 了解AutoCAD中的事件 事件處理的原則 注冊和解除注冊事件 處理應(yīng)用程序事件 處理文檔事件 處理 DocumentCollection 事件 處理對象事件 用.NET注冊COM基礎(chǔ)事件 9.1了解AutoCAD中的事件第9 章 使用事件9.
2、19.1了解AutoCADAutoCAD中的事件在 AutoCAD 中有許多不同的事件類型。下面是一些普通的事件類型: Application - 事件響應(yīng) AutoCAD 的關(guān)閉、系統(tǒng)變量的修改、雙擊前以及進(jìn)入和離開模型狀態(tài)。 Database - 事件響應(yīng)保存圖形,對象的添加,刪除或修改,塊引用的插入,附加和修改外部圖形(Xrefs)。也有文檔層的事件用于系統(tǒng)變量的修改。 Document - 事件響應(yīng)圖形的關(guān)閉,AutoCAD 命令的發(fā)出,發(fā)出 AutoLISP 命令或語句以及修改系統(tǒng)變量。 DocumentCollection - 事件響應(yīng)文件的創(chuàng)建和銷毀,文檔的激活或失活,以及文檔鎖
3、定模式的修改。 Editor - 事件響應(yīng)用戶的輸入請求被修改時(shí)。 9.19.1了解AutoCADAutoCAD中的事件 Graphics - 事件響應(yīng)視圖的創(chuàng)建和銷毀,以及視圖配置的修改。 Plotting - 事件響應(yīng)于打印一個(gè)布局。 Publishing - 事件響應(yīng)于布局的發(fā)布。 Runtime - 事件響應(yīng)于模型的加載和卸載,以及變量已修改或正在修改。 Windows - 事件響應(yīng)于狀態(tài)欄、托盤項(xiàng)目、面板和信息中心的修改。 用于響應(yīng)事件的子例程稱為事件處理程序,每次觸發(fā)指定給它們的事件時(shí),都會自動執(zhí)行這些程序。事件中包含的信息會通過參數(shù)被返回,像 SystemVariableChan
4、ging 事件中的系統(tǒng)變量名,它會通過事件處理程序的 SystemVariableChangingEventArgs 對象被傳遞出來。 9.2事件處理的原則第9 章 使用事件9.29.2事件處理的原則需要記住的是,事件只是提供了 AutoCAD 內(nèi)部發(fā)生的狀態(tài)或動作信息。雖然事件處理程序可以響應(yīng)這些事件,但觸發(fā)事件處理程序時(shí),AutoCAD 通常都是正處在處理命令的執(zhí)行過程中。因此,如果要使事件處理程序在涉及 AutoCAD 及其數(shù)據(jù)庫時(shí)提供安全的操作,則需要對事件處理程序進(jìn)行一些限制。 不要依賴事件發(fā)生的順序。 編寫事件處理程序時(shí),請不要依賴用戶所認(rèn)為的事件發(fā)生順序。例如,如果用戶發(fā)出 OP
5、EN 命令,則事件 CommandWillStart, DocumentCreateStarted, DocumentCreated, 和 CommandEnded 將全部被觸發(fā)。但它們的發(fā)生順序可能并不是這樣。唯一可以確定大多數(shù)事件都是成對出現(xiàn)的,你 beginning 和 Ending 事件。9.29.2事件處理的原則 不要依賴操作的順序。 如果用戶刪除 object1,然后再刪除 object2,這時(shí)請不要依賴這樣的事實(shí),即先收到 object1 的 ObjectErased 事件,然后收到 object2 的事件。實(shí)際上用戶可能會先收到 object2 的 ObjectErased 事
6、件。 不要試圖從事件處理程序中執(zhí)行任何交互式函數(shù)。 試圖從事件處理程序中執(zhí)行交互式函數(shù)可能會造成嚴(yán)重問題,因?yàn)橛|發(fā)事件時(shí) AutoCAD 可能仍在處理命令。因此,應(yīng)始終在事件處理程序中避免在命令提示符下請求用戶輸入,也不要請求選擇對象和 SendStringToExecute 方法。 9.29.2事件處理的原則 不要從事件處理程序中啟動對話框。 對話框和交互式函數(shù)一樣,也會干涉 AutoCAD 的當(dāng)前操作。消息框和警告框不被認(rèn)為是交互的,因而可以安全地發(fā)出;但在事件處理程序中像 EnterModal, LeaveModal, DocumentActivated 和 DocumentToBeDe
7、activated 事件中發(fā)出消息框則會導(dǎo)致順序混亂。 可以向數(shù)據(jù)庫中的任何對象寫入數(shù)據(jù),但發(fā)出事件的對象除外。 顯然,導(dǎo)致觸發(fā)事件的任何對象可能仍在 處于打開狀態(tài),并用于當(dāng)前正在執(zhí)行的操作。因此,要避免從對象的事件處理程序?qū)⑷魏涡畔⒃賹懭氲皆搶ο蟆H欢?,用戶可以安全地從觸發(fā)事件的對象讀取信息。9.29.2事件處理的原則 不要從事件處理程序中執(zhí)行任何觸發(fā)相同事件的操作。 如果在事件處理程序中執(zhí)行觸發(fā)該相同事件的相同操作,會導(dǎo)致無限循環(huán)。例如,用戶不該嘗試從 ObjectOpenedForModify 事件中打開對象;否則,AutoCAD 將不斷打開對象。 請記住,AutoCAD 顯示模式對話框
8、時(shí),不會觸發(fā)任何事件。 9.3注冊和解除注冊事件第9 章 使用事件9.39.3注冊和解除注冊事件 用記在可以響應(yīng)事件前,事件必須在 AutoCAD 中注冊。通過創(chuàng)建一個(gè)新的合適的類型的事件處理程序注冊事件,然后將它指定給你想注冊的事件的對象。一旦事件完成,最好是注冊它,以盡量減小和其它反應(yīng)器的沖突以及減少 AutoCAD 需要維護(hù)事務(wù)處理程序所使用的內(nèi)存和 CPU 時(shí)間。 注冊事件 用戶通過為事件追加一個(gè)事件處理程序來注冊。事件處理程序?qū)ο笮枰粋€(gè)必須在用戶工程中定義的過程。大多數(shù)事件處理程序需要一個(gè)接受兩個(gè)參數(shù)的過程,一個(gè)參數(shù)的類型為 Object 而另一個(gè)表示事件的返回參數(shù)。注冊事件使用
9、VB.NET 的 AddHandler 語句或 C# 的 += 運(yùn)算符。9.39.3注冊和解除注冊事件 下面代碼注冊一個(gè)名為 appSysVarChanged 的過程與 SystemVariableChangedEventHandler 對象類型的 SystemVariableChanged 事件相關(guān)聯(lián)。appSysVarChanged 過程接受兩個(gè)參數(shù): Object 和 SystemVariableChangedEventArgs。SystemVariableChangedEventArgs 對象返回事件被注冊后修改的系統(tǒng)變量的名字。 Application.SystemVariableC
10、hanged += new SystemVariableChangedEventHandler(appSysVarChanged)9.39.3注冊和解除注冊事件 解除注冊事件 事件的解除注冊是通過從事件中移除分配給它的事件處理程序來完成的。用戶利用與向事件注冊事件處理程序相同的語法,來解除事件的注冊,只是使用的語句或運(yùn)算符有所不同,必須使用 VB.NET 的 RemoveHandler 語句或C#的-=運(yùn)算符。9.39.3注冊和解除注冊事件 下面代碼從對象類型為 SystemVariableChangedEventHandler 的 SystemVariableChanged 事件中解除注冊名
11、為 appSysVarChanged 的過程。 Application.SystemVariableChanged += new SystemVariableChangedEventHandler(appSysVarChanged)9.4 處理應(yīng)用程序事件第9 章 使用事件9.4 9.4 處理應(yīng)用程序事件 應(yīng)用程序?qū)ο笫录糜陧憫?yīng)應(yīng)用程序窗口。一旦應(yīng)用程序事件被注冊,它就一直會存在,直到 AutoCAD 被關(guān)閉或事件解除注冊。 下面的事件可用于應(yīng)用程序?qū)ο螅?BeginCustomizationMode 僅在 AutoCAD 進(jìn)入自定義模式時(shí)觸發(fā)。 BeginDoubleClick 當(dāng)鼠標(biāo)雙擊
12、時(shí)觸發(fā)。 BeginQuit 僅在 AutoCAD 進(jìn)程結(jié)束前觸發(fā)。9.4 9.4 處理應(yīng)用程序事件 DisplayingCustomizeDialog 僅在自定義對話框顯示前觸發(fā)。 DisplayingDraftingSettingsDialog 僅在草圖設(shè)置對話框顯示前觸發(fā)。 DisplayingOptionDialog 僅在選項(xiàng)對話框顯示前觸發(fā)。 EndCustomizationMode 當(dāng) AutoCAD 退出自定義模式時(shí)觸發(fā)。 EnterModal 僅在模型對話框顯示前觸發(fā)。9.4 9.4 處理應(yīng)用程序事件 Idle 當(dāng) AutoCAD 發(fā)送信息時(shí)觸發(fā)。 LeaveModal 當(dāng)模型
13、對話框關(guān)閉時(shí)觸發(fā)。 PreTranslateMessage 僅在通過 AutoCAD 轉(zhuǎn)換一個(gè)信息時(shí)觸發(fā)。 QuitAborted 當(dāng)嘗試終止正在關(guān)閉的 AutoCAD 時(shí)觸發(fā)。 QuitWillStart 在 BeginQuit 事件后,開始關(guān)閉前觸發(fā)。9.4 9.4 處理應(yīng)用程序事件 SystemVariableChanged 當(dāng)嘗試修改系統(tǒng)變量完成時(shí)觸發(fā)。 SystemVariableChanging 僅在嘗試修改系統(tǒng)變量前觸發(fā)。 啟用應(yīng)用程序?qū)ο笫录?本例演示如何用 BeginQuit 事件注冊事件處理程序。一旦注冊完,AutoCAD 完全關(guān)閉前會顯示一個(gè)對話框。 9.4 啟用應(yīng)用程序
14、對象事件 .cs9.5處理文檔事件第9 章 使用事件9.59.5處理文檔事件 文檔對象事件用于響應(yīng)文檔窗口。當(dāng)文檔事件被注冊后,它僅關(guān)聯(lián)與之關(guān)聯(lián)的文檔對象。所以如果一個(gè)事件需要和每個(gè)文檔注冊,就應(yīng)該使用 DocumentCollection 對象的 DocumentCreated 事件注冊事件給每個(gè)新的或打開的圖形。 下列事件可用于文檔對象: BeginDocumentClose 僅在收到關(guān)閉圖形的請求后觸發(fā)。 CloseAborted 當(dāng)嘗試終止關(guān)閉圖形時(shí)觸發(fā)。9.59.5處理文檔事件 CloseWillStart 在 BeginDocumentClose 事件后,開始關(guān)閉圖形前觸發(fā)。 Co
15、mmandCancelled 當(dāng)命令在完成前被取消時(shí)觸發(fā)。 CommandEnded 命令完成后馬上觸發(fā)。 CommandFailed 當(dāng)命令未能完成并沒有取消時(shí)觸發(fā)。 CommandWillStart 命令發(fā)出后,在它完成前馬上觸發(fā)。9.59.5處理文檔事件 ImpliedSelectionChanged 當(dāng)當(dāng)前 Pickfirst 選擇集設(shè)置修改時(shí)觸發(fā)。 LispCancelled 當(dāng) LISP 表達(dá)式計(jì)算取消時(shí)觸發(fā)。 LispEnded 在 LISP 表達(dá)式計(jì)算完成時(shí)觸發(fā)。 LispWillStart 當(dāng) AutoCAD 接收到 LISP 表達(dá)式的計(jì)算請求后馬上觸發(fā)。 UnknownCo
16、mmand 當(dāng)在命令提示符中輸入未知命令時(shí)馬上觸發(fā)。9.59.5處理文檔事件 啟動文檔對象事件 本例使用 BeginDocumentClose 事件提示用戶是否想繼續(xù)關(guān)閉當(dāng)前圖形。一個(gè)有 Yes 和 No 按扭的消息框會被顯示。點(diǎn)擊 No 后使用事件處理程序返回的參數(shù)的 Veto 方法終止文檔的關(guān)閉。 9.5 啟動文檔對象事件 .cs9.6處理 DocumentCollection 事件第9 章 使用事件9.69.6處理 DocumentCollection DocumentCollection 事件 DocumentCollection 對象事件用于響應(yīng)在應(yīng)用程序中打開文檔。Document
17、Collection 事件不同于 Document 對象事件,它將一直保持注冊狀態(tài),直到 AutoCAD 關(guān)閉或 解除注冊。 下面的事件可用于 DocumentCollection 對象: DocumentActivated 當(dāng)文檔窗口激活時(shí)觸發(fā)。 DocumentActivationChanged 活動文檔窗口失活或銷毀后觸發(fā)。9.69.6處理 DocumentCollection DocumentCollection 事件 DocumentBecameCurrent 當(dāng)文檔窗口設(shè)置為當(dāng)前文檔并且與前一個(gè)活動文檔窗口不同時(shí)觸發(fā)。 DocumentCreated 文檔窗口被創(chuàng)建后觸發(fā)。創(chuàng)建一個(gè)
18、新圖形或打開一個(gè)現(xiàn)有圖形后出現(xiàn)。 DocumentCreateStarted 僅在文檔窗口被創(chuàng)建前觸發(fā)。創(chuàng)建一個(gè)新圖形或打開一個(gè)現(xiàn)有圖形前出現(xiàn)。 DocumentCreationCanceled 當(dāng)要求創(chuàng)建新圖形以及打開一個(gè)現(xiàn)有圖形被取消后觸發(fā)。9.69.6處理 DocumentCollection DocumentCollection 事件 DocumentDestroyed 在文檔窗口被銷毀以及與它關(guān)聯(lián)的數(shù)據(jù)庫對象被刪除前觸發(fā)。 DocumentLockModeChanged 文檔的鎖定模式被修改后觸發(fā)。 DocumentLockModeChangeVetoed 修改文檔的鎖定模式被禁止后
19、觸發(fā)。 DocumentLockModeWillChange 文檔的鎖定模式被修改前觸發(fā)。 DocumentToBeActivated 當(dāng)文檔將要被激活時(shí)觸發(fā)。9.69.6處理 DocumentCollection DocumentCollection 事件 DocumentToBeDeactivated 當(dāng)文檔將要失活時(shí)觸發(fā)。 DocumentToBeDestroyed 當(dāng)文檔將要銷毀時(shí)觸發(fā)。 啟用 DocumentCollection 對象事件 下面示例使用 DocumentActivated 事件指示一個(gè)圖形窗口已激活。當(dāng)事件出現(xiàn)時(shí)將顯示一個(gè)消息框,內(nèi)容為被激活文檔的圖形名。 9.6 啟
20、用 DocumentCollection 對象事件 .cs9.7處理對象事件第9 章 使用事件9.79.7處理對象事件 對象事件用于響應(yīng)從圖形數(shù)據(jù)庫中打開、添加、修改和刪除對象。有兩種與對象類型相關(guān)的事件:對象和數(shù)據(jù)庫層。對象層事件被定義成響應(yīng)數(shù)據(jù)庫中指定的對象,而數(shù)據(jù)庫層事件用于響應(yīng)數(shù)據(jù)庫中所有對象的事件。 定義一個(gè)對象層事件是通過注冊一個(gè)事件處理程序到一個(gè)數(shù)據(jù)庫對象的事件中來完成的。數(shù)據(jù)庫層對象事件的定義是通過注冊一個(gè)事件處理程序到任一個(gè)打開數(shù)據(jù)庫對象的事件來完成的。9.79.7處理對象事件 下列事件可用于 DBObjects: Cancelled 當(dāng)對象的打開操作被取消時(shí)觸發(fā)。 Copi
21、ed 對象被復(fù)制后觸發(fā)。 Erased 當(dāng)對象標(biāo)記為刪除或取消刪除時(shí)觸發(fā)。 Goodbye 當(dāng)對象因?yàn)榕c它相關(guān)的數(shù)據(jù)庫將被銷毀而將要從內(nèi)存中刪除時(shí)觸發(fā)。9.79.7處理對象事件 Modified 當(dāng)對象修改后觸發(fā)。 ModifiedXData 當(dāng)附加到對象的 XData 被修改后觸發(fā)。 ModifyUndone 當(dāng)對象先前的修改未完成時(shí)觸發(fā)。 ObjectClosed 當(dāng)對象關(guān)閉時(shí)觸發(fā)。 OpenedForModify 為修改對象而打開對象時(shí)觸發(fā)。9.79.7處理對象事件 Reappended 當(dāng)一個(gè)撤消操作后對象從數(shù)據(jù)庫中移除,然后使用重做操作重新追加時(shí)觸發(fā)。 SubObjectModified 當(dāng)對象的子對象被修改時(shí)觸發(fā)。 Unappended 當(dāng)一個(gè)撤消操作后對象從數(shù)據(jù)庫中移除時(shí)觸發(fā)。9.79.7處理對象事件 下面的一些事件用于響應(yīng)數(shù)據(jù)庫層的對象變化: ObjectAppended 當(dāng)對象添加到數(shù)據(jù)庫時(shí)觸發(fā)。 ObjectErased 當(dāng)對象從數(shù)據(jù)庫中清除或撤消清除時(shí)觸發(fā)。 ObjectModified 當(dāng)對象被修改時(shí)觸發(fā)。 ObjectOpenedForModify 為修改對象而打開對象時(shí)觸發(fā)。9.79.7處理對象事件 ObjectReappe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025翡翠交易合同
- 2025租房合同范文
- 2025【電氣系統(tǒng)、排水系統(tǒng)、照明系統(tǒng)改造及裝修工程合同書】合同書格式范文
- 《中醫(yī)藥法知識普及課件》課件
- 甘蔗地轉(zhuǎn)讓合同協(xié)議
- 甲方違約乙方合同協(xié)議
- 疑難件加工維修合同協(xié)議
- 電子手工外包合同協(xié)議
- 白酒品鑒會合同協(xié)議
- 瓷磚區(qū)域代理合同協(xié)議
- 《鐵線蓮圖鑒》課件
- 內(nèi)科護(hù)理學(xué)-急性胰腺炎--1課件
- 德施曼智能鎖使用說明書
- 《辦公室用語》課件
- 光伏并網(wǎng)前單位工程驗(yàn)收報(bào)告-2023
- 回彈儀數(shù)據(jù)自動計(jì)算表格
- 《常德旅游景點(diǎn)介紹》課件
- 《高層建筑結(jié)構(gòu)設(shè)計(jì)》課件 第5、6章 高層建筑結(jié)構(gòu)有限元計(jì)算、高層框架結(jié)構(gòu)設(shè)計(jì)
- 除濕防潮施工方案
- 基于PLC的自動化立體倉庫控制系統(tǒng)設(shè)計(jì)
- 《囊螢夜讀.》教學(xué)設(shè)計(jì)及教學(xué)反思
評論
0/150
提交評論