我尝试使用以下代码删除所有形状:
PowerPoint.Application ppApp = Globals.ThisAddIn.Application; PowerPoint.Presentation ppP = ppApp.ActivePresentation; PowerPoint.Slide ppS = ppApp.ActiveWindow.Selection.SlideRange[1]; PowerPoint.Shapes shapes = ppS.Shapes; foreach (PowerPoint.Shape shape in shapes) { shape.Delete(shape); }
它不能像我预期的那样删除所有形状,因为删除形状时会影响PowerPoint.Shapes。如果我想删除所有形状,我需要将所有形状添加到List中,然后删除每个形状,如:
PowerPoint.Application ppApp = Globals.ThisAddIn.Application; PowerPoint.Presentation ppP = ppApp.ActivePresentation; PowerPoint.Slide ppS = ppApp.ActiveWindow.Selection.SlideRange[1]; PowerPoint.Shapes shapes = ppS.Shapes; if (shapes == null) return; List listShapes = new List(); foreach (PowerPoint.Shape shape in shapes) { listShapes.Add(shape); } foreach (PowerPoint.Shape shape in listShapes) { shape.Delete(); }
还有其他方法可以更快地删除吗?
答案 0 :(得分:1)
您无法迭代集合并从该集合中删除项目,因为这会影响集合。所以试着避免for-each循环:
while (shapes.Count > 0) {
shapes[0].Delete();
}
不是100%确定与PowerPoint有关的语法,但这是一般的想法。