kh001058 发表于 2017-3-15 04:22:26

如何检测布局名称的改变?

大家好,
是否有检测布局名称
更改的方法
(如果用户重命名布局;而不是切换到其他布局)
下面的事件SystemVariableChangedEventHandler未触发CTAB sysvar>
提前感谢。
      
      public void SysVarChangedmonitor()
      {
            AcadApp.SystemVariableChanged += new Autodesk.AutoCAD.ApplicationServices.SystemVariableChangedEventHandler(SysVariableChange);
      }
      void SysVariableChange(object sender, Autodesk.AutoCAD.ApplicationServices.SystemVariableChangedEventArgs e)
      {
            try
            {
                object oVal = AcadApp.GetSystemVariable(e.Name);
                AcadApp.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\n" + e.Name + " was changed." + "\tNew value: " + oVal.ToString());
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                AcadApp.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nSysVarChanged: " + e.Name + " - " + ex.Message + "\n");
            }
      }
**** Hidden Message *****

gile 发表于 2017-3-15 06:23:16

您好,CTAB sysvar更改的等价物将是Document.LayoutSwitched事件,但看起来它不是您想要的。要捕获布局重命名,您可以处理Database.ObjectModified事件。Editor ed=Application.DocumentManager.MdiActiveDocument.Editor;。
ObjectId layoutId=ObjectId.Null;。
字符串layoutName;。

[命令方法("TEST")]。
公共无效测试()。
{。
Application.DocumentManager.MdiActiveDocument.Database.ObjectOpenedForModify+=OnObjectOpenedForModify;。
}。

私有空OnObjectOpenedForModify(对象发送者,ObjectEventArgs e)。
{。
如果(e.DBObject布局)。
{。
var布局=(布局)e.DBObject;。
layoutId=layout.ObjectId;。
layoutName=layout.LayoutName;。
layout.Database.ObjectModified+=OnObjectModify;。
}。
}。

无OnObjectModify(对象发送者,ObjectEventArgs e)。
{。
如果(e.DBObject.ObjectId==layoutId)。
{。
e.DBObject.Database.ObjectModified-=OnObjectModify;。
var布局=(布局)e.DBObject;。
如果(layoutName!=layout.LayoutName)。
{。
ed.WriteMessage($"\nLayout'{layoutName}'已重命名:'{layout.LayoutName }'.");。
}。
}。
}。

kh001058 发表于 2017-3-15 11:23:54

非常感谢,吉勒,
按预期工作。
页: [1]
查看完整版本: 如何检测布局名称的改变?