0

我尝试使用以下代码删除所有形状:

PowerPoint.Application ppApp = Globals.ThisAddIn.Application;
PowerPoint.Presentation ppP = ppApp.ActivePresentation;
PowerPoint.Slide ppS = ppApp.ActiveWindow.Selection.SlideRange[1];
PowerPoint.Shapes 形状 = ppS.Shapes;

foreach(PowerPoint.Shape 形状中的形状)
{
      形状.删除(形状);                    
}

它不能像我预期的那样删除所有形状,因为当一个形状被删除时,它会影响 PowerPoint.Shapes。如果我想删除所有形状,我需要将所有形状添加到一个列表中,然后删除每个形状,例如:

PowerPoint.Application ppApp = Globals.ThisAddIn.Application;
PowerPoint.Presentation ppP = ppApp.ActivePresentation;
PowerPoint.Slide ppS = ppApp.ActiveWindow.Selection.SlideRange[1];
PowerPoint.Shapes 形状 = ppS.Shapes;
如果(形状 == null)返回;

列表列表形状 = 新列表();
foreach(PowerPoint.Shape 形状中的形状)
{
      listShapes.Add(形状);                    
}

foreach(列表形状中的 PowerPoint.Shape 形状)
{
      形状.删除();
}

有没有其他更快的删除方法?

4

1 回答 1

1

您不能遍历集合并从该集合中删除项目,因为这会影响集合。因此,请尝试避免 for-each 循环:

while (shapes.Count > 0) {
  shapes[0].Delete();
}

不是 100% 确定与 PowerPoint 相关的语法,但这是一般的想法。

于 2014-04-02T13:16:49.467 回答