2013-08-05 70 views
2

我正在使用PowerPoint 2010(C#)的外接程序,我想阻止最终用户移动或编辑所有已编程创建的形状。如何锁定PowerPoint中的形状?

我已经在框架中寻求,但我认为这是不允许programmaticaly。有没有人遇到过这种限制,可以帮助我找到解决方案?

我知道有些人使用C++创建自己的加载项,因为办公室有很多限制。

+0

编辑过的问题:我尽量做到尽可能精确 – monstergold

+1

对象模型中没有任何东西允许您锁定PowerPoint形状。有一种方法可以通过PPT 2007和之后的XML来完成。查看此主题以获取John Wilson的链接,他正在制定如何执行此操作:http://answers.microsoft.com/zh-CN/office/forum/office_2007-powerpoint/locking-shapes/945e3424-4994-488c- a575-8e7a94c76925另一种方法是捕捉选择更改事件,如果新选择的形状是锁定形状,则在选择再次更改时将其设回到已知位置。 –

+0

我发现这个示例代码来检测所有存在的感谢commandsBars.OnUpdate事件: http://code.msdn.microsoft.com/CSExcelNewEventForShapes-0e26b1f2#content 它的工作原理,但它不是一个理想的解决方案 – monstergold

回答

2

我发现两种解决方案:

看到的是选择哪种形状:

var selectedShape = this.Application.ActiveWindow.Selection.ShapeRange[1] 

在我所有的形状,我已经设置有ID标签。我刚才检查,有在selectedShape的标签的ID,如果是这样的话:

this.Application.ActiveWindow.Selection.Unselect(); 

那么我告诉一个消息框,提醒用户不要选择这种形状的。 我不喜欢这个解决方案,但它是我找到的唯一一个它可以工作的解决方案。

+0

您以非自然的方式拦截PowerPoint的内置行为。如果用户在取消选择形状后单击“撤消”按钮会怎么样?形状再次被选中。我的建议绝不会试图锁定形状,因为我们无法控制撤消列表。 – chipbk10

+1

你试过这个吗?因为我没有你说的问题... – monstergold

+1

你是对的。我试过了。取消选择形状不存储在撤消堆栈中。 – chipbk10

1

我相信这是不可能的。在某种程度上实现这一点的方式(人们可以在解决如何选择下面的形状时解决它)是通过制作一个透明的矩形作为画布的大小并将自定义事件绑定到该事件上(就像您在评论)。透明矩形覆盖了您创建的形状,因此人们无法再以这种方式访问​​这些形状。当然,如果他们能够弄清楚如何选择形状,他们可以将它们移动...

或者,为了让人们不要做那样的事情(你只能停止没有经验的事情),你也可以将它们设置为主幻灯片。

对于没有这样做的人来说,只有'真正'的解决方案?图片..但是然后他们也可以移动图片!

+0

由于OP提到想要“锁定”他/她编程创建的所有形状,但不一定是所有形状,透明矩形和图像技巧不一定会起作用。但是,正如你所建议的,一个坚定的白痴几乎总能压倒最聪明的软件。目标通常应该是让用户轻松做他们需要做的事情,而不是试图阻止他们做他们不应该做的事。 –

相关问题