PowerPoint C# VSTO如何锁定形状(手动可在选择窗格操作)
C# VSTO 实现PowerPoint形状锁定方案
VBA中可直接调用Shape.Locked属性实现形状锁定,效果和选择窗格手动点击锁定开关完全一致。C# VSTO开发时该属性未在互操作程序集的强类型Shape接口中暴露,因此无法直接通过智能感知调用,可通过以下两种方案实现:
方案1:dynamic后期绑定实现(代码最简洁,全版本兼容)
直接将目标Shape对象转为dynamic类型,即可和VBA一样直接访问Locked属性,无需额外配置:// 以当前选中的第一个形状为例,可替换为业务逻辑中获取的目标Shape对象 PowerPoint.Shape targetShape = Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange[1]; dynamic shapeComObj = targetShape; // 赋值msoTrue即为锁定,赋值msoFalse即为解锁 shapeComObj.Locked = Office.MsoTriState.msoTrue;该方法直接调用COM对象的原生属性,无版本兼容问题,是最常用的实现方式。
方案2:强类型位运算实现(无动态类型开销)
如果项目禁止使用dynamic,可以通过操作Shape.ShapeFlags属性的标志位实现锁定,锁定状态对应枚举值PowerPoint.MsoShapeFlags.msoShapeLocked,通过位运算追加/移除标志位即可:PowerPoint.Shape targetShape = Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange[1]; // 锁定形状:追加锁定标志位 targetShape.ShapeFlags = targetShape.ShapeFlags | PowerPoint.MsoShapeFlags.msoShapeLocked; // 解锁形状:移除锁定标志位 // targetShape.ShapeFlags = targetShape.ShapeFlags & ~PowerPoint.MsoShapeFlags.msoShapeLocked;
注意:该锁定仅在编辑态生效,锁定后用户无法通过界面选中、拖拽、修改、删除形状,但代码对形状属性的修改不受锁定限制。如果需要在幻灯片放映模式下禁止形状点击交互,需要单独配置
ActionSettings属性,和本场景的编辑态锁定不是同一逻辑。
内容的提问来源于stack exchange,提问作者Neil Kimber
相关产品推荐
相关产品推荐

