【问题标题】:how can I lock shapes in PowerPoint?如何在 PowerPoint 中锁定形状?
【发布时间】:2013-08-05 16:45:45
【问题描述】:

我正在为 PowerPoint 2010 (C#) 开发加载项,我想阻止最终用户移动或编辑我以编程方式创建的所有形状。

我已经在框架中寻找过,但我认为它不允许以编程方式进行。有没有人遇到过这种限制并可以帮助我找到解决方案?

我知道有些人使用 C++ 创建了他们的插件,因为在办公室有很多限制。

【问题讨论】:

  • 问题已编辑:我尽量做到精确
  • 对象模型中没有任何内容可以让您锁定 PowerPoint 形状。有一种方法可以通过作为 PPT 2007 及更高版本基础的 XML 来实现。检查此线程以获取指向 John Wilson 的链接,他已经知道如何做到这一点:answers.microsoft.com/en-us/office/forum/office_2007-powerpoint/… 另一种方法是捕获选择更改事件,如果新选择的形状是锁定的形状,则将其设置回已知位置一次选择再次改变。
  • 我找到了这个示例代码来检测由于 commandsBars.OnUpdate 发生的所有事件:code.msdn.microsoft.com/… 它可以工作,但它不是一个理想的解决方案

标签: c# powerpoint office-interop powerpoint-2010


【解决方案1】:

我找到了两个解决方案:

  • 首先是从“commandBars.OnUpdate”中捕获所有事件,就像这个很棒的示例代码:http://code.msdn.microsoft.com/CSExcelNewEventForShapes-0e26b1f2#content 然后,您可以将位置/颜色或您想要的所有内容强加到您的形状中。
  • 第二个更“残酷”> 立即取消选择形状。当您从“CommandBars.OnUpdate”捕获所有事件时,请执行以下操作:

查看选择了哪个形状:

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

在我所有的形状中,我都设置了一个带有 ID 的标签。我只需要检查 selectedShape 的标签中是否有一个 ID,如果是这种情况:

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

然后我显示一个消息框来警告用户不要选择这种形状。 我不喜欢这个解决方案,但它是我发现的唯一一个并且它有效。

【讨论】:

  • 您以不自然的方式拦截了 PowerPoint 的内置行为。如果取消选择形状后用户单击“撤消”按钮怎么办?形状再次被选中。我的建议是永远不要尝试锁定形状,因为我们无法控制撤消列表。
  • 你是对的。我试过了。取消选择形状不会存储在撤消堆栈中。
【解决方案2】:

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

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

对于不这样做的人来说只有“真正的”解决方案?图片 .. 但他们也可以移动图片!

【讨论】:

  • 自从 OP 提到想要“锁定”他/她以编程方式创建的所有形状,但不一定是所有形状,透明矩形和图像技巧无论如何都不一定有效。但正如您所建议的,一个坚定的白痴几乎总能压倒最聪明的软件。目标通常应该是让用户轻松地做他们需要做的事情,而不是试图阻止他们做他们不应该做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多