【问题标题】:Capture an event After resizing the object of PPT slide调整PPT幻灯片对象大小后捕获事件
【发布时间】:2013-07-23 04:46:04
【问题描述】:

我正在对 Office PowerPoint(2007、2010 和 2013 版本)进行一些开发工作,并寻找将在 PowerPoint 幻灯片中调整对象(如文本框)大小时触发的事件。我想在用 C# 编码的 COM 插件中捕获此事件。有什么办法可以做到这一点?请指教。

谢谢,萨蒂什

【问题讨论】:

    标签: c# powerpoint


    【解决方案1】:

    是的,

    阅读:http://msdn.microsoft.com/en-us/library/office/jj227375.aspx

    在您的构造函数中或任何地方

    Application.AfterShapeSizeChange += AfterShapeSizeChanged;
    

    然后创建一个函数

    // Object "shape" is the one you currently edit
    void AfterShapeSizeChange(Microsoft.Office.Interop.PowerPoint.Shape shape)
    {
        // do something
    }
    

    请注意,这仅适用于 PPT 2013。对于以前的版本(2007 或 2010),您可能需要付出更多的努力。我自己实现了这种方法,但从未找到更好的解决方案:

    1.为所有形状对象创建一个代理类

    2.记录属性(位置、宽度和高度),你需要将你拥有的值与当前形状对象进行比较

    3.创建一个Timer(创建类似线程的功能但这个是与winform同步的),检查超时,设置为每秒15次就好足够。只检查当前选择的形状,不要检查你的 ppt 中的所有形状,否则会非常慢

    4. 结合事件WindowSelectionChangehttp://msdn.microsoft.com/en-us/library/office/ff743918.aspx(这个是为了配合ctrl+z或者ctrl+y,用户可以通过undo或者redo来编辑,这样就可以编辑没有的形状在当前选定的幻灯片上)。在 WindowSelectionChange() 里面类似于第 3 点,但是现在你需要检查你拥有的所有形状。

    【讨论】:

    • 您好,感谢您的回复和宝贵的信息。是的,AfterShapeSizeChange 事件仅在 PPT 2013 中支持。但我在 2007 年和 2010 年也需要它。我试过但没有得到任何解决方案。在 2007 年和 2010 年有什么方法可以实现这一目标吗?
    • 是的,在我的回答中
    • 您好,非常感谢!我理解你的做法。请问有这种方法的代码参考吗?
    • 我不拥有代码(这是公司的一个项目)。我希望我的回答清楚明白,你需要做的就是试验 windowselectionchanged 事件和 c# timer
    • 好的,感谢分享方法。非常感谢及时的回复。
    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2012-08-26
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多