using SolidWorks.Interop.sldworks; using System.Collections; namespace PdmSwPlugin.Main.EventHandler { /// /// 通用文档事件处理器 /// public class BaseEventHandler { protected ISldWorks iSwApp; protected ModelDoc2 document; protected BaseAttacher userAddIn; protected Hashtable openModelViews; public BaseEventHandler(ModelDoc2 modDoc, BaseAttacher docEventHandler) { document = modDoc; iSwApp = docEventHandler.SwApp; userAddIn = docEventHandler; openModelViews = new Hashtable(); } /// /// 附加事件 /// /// virtual public bool AttachEventHandlers() { return true; } /// /// 移除事件 /// /// virtual public bool DetachEventHandlers() { return true; } /// /// 附加视图事件 /// /// public bool ConnectModelViews() { IModelView mView; mView = (IModelView)document.GetFirstModelView(); while (mView != null) { if (!openModelViews.Contains(mView)) { DocViewEventHandler dView = new DocViewEventHandler(userAddIn, mView, this); dView.AttachEventHandlers(); openModelViews.Add(mView, dView); } mView = (IModelView)mView.GetNext(); } return true; } /// /// 移除视图事件 /// /// public bool DisconnectModelViews() { //Close events on all currently open docs DocViewEventHandler dView; int numKeys; numKeys = openModelViews.Count; if (numKeys == 0) { return false; } object[] keys = new object[numKeys]; //Remove all ModelView event handlers openModelViews.Keys.CopyTo(keys, 0); foreach (ModelView key in keys) { dView = (DocViewEventHandler)openModelViews[key]; dView.DetachEventHandlers(); openModelViews.Remove(key); dView = null; } return true; } public bool DetachModelViewEventHandler(ModelView mView) { DocViewEventHandler dView; if (openModelViews.Contains(mView)) { dView = (DocViewEventHandler)openModelViews[mView]; openModelViews.Remove(mView); mView = null; dView = null; } return true; } } }