C#Word Interop,调用.Delete()方法时未删除某些形状
我通过Interop库在多个word文档中生成形状。 每个形状都有一个文本框,显示有关它的一些详细信息 与其在创建一个输出后关闭原始文档,然后在下一个输出时重新打开它,我希望在保存修改后清理创建的形状,以下是我用于创建然后清理形状的两种方法:C#Word Interop,调用.Delete()方法时未删除某些形状,c#,ms-word,interop,shape,C#,Ms Word,Interop,Shape,我通过Interop库在多个word文档中生成形状。 每个形状都有一个文本框,显示有关它的一些详细信息 与其在创建一个输出后关闭原始文档,然后在下一个输出时重新打开它,我希望在保存修改后清理创建的形状,以下是我用于创建然后清理形状的两种方法: static void DrawCable(double angle, int identifiant, WdColor couleur) { float origineX = 365; float orig
static void DrawCable(double angle, int identifiant, WdColor couleur)
{
float origineX = 365;
float origineY = 641;
float extremiteX = (float)Math.Round(origineX + 130 * Math.Cos(angle));
float extremiteY = (float)Math.Round(origineY - 130 * Math.Sin(angle));
Shape line = oDoc.Shapes.AddLine(origineX, origineY, extremiteX, extremiteY, ref oMissing);
Shape etiquette = oDoc.Shapes.AddShape(1, (float)Math.Round(extremiteX - 7 - 7 * Math.Cos(angle) ), (float)Math.Round(extremiteY - 5 + 5 * Math.Sin(angle)), 15, 11, ref oMissing);
etiquette.TextFrame.TextRange.Text = identifiant.ToString();
}
static void CleanDocument()
{
foreach (Shape shp in oDoc.Shapes)
shp.Delete();
}
每当我运行代码时,例如
for (int multiplier = 0; multiplier < 4; multiplier++ )
{
Program.DrawCable(Math.PI * multiplier / 2, multiplier, WdColor.wdColorRed);
}
所有形状都已列出,但只要我添加shp.Delete()行,文本框就不再显示为集合的成员(即它们不再显示在文本输出中)
任何帮助都将不胜感激。删除呼叫正在更改收藏。如果对.NET集合执行此操作,则通常会出现InvalidOperationException,“集合已更改”异常。但对于单词集合,您可能只看到删除了第1、第3、第5等形状。考虑用一个正常的循环来迭代集合来避免这个bug。谢谢汉斯,它起作用了!Delete调用正在更改集合。如果对.NET集合执行此操作,则通常会出现InvalidOperationException,“集合已更改”异常。但对于单词集合,您可能只看到删除了第1、第3、第5等形状。考虑用一个正常的循环来迭代集合来避免这个bug。谢谢汉斯,它起作用了!
static void CleanDocument()
{
foreach (Shape shp in oDoc.Shapes)
Console.WriteLine( shp.ID + "\t" + shp.Type.ToString() );
}