2014-01-12 167 views
1

我想从我的winform中移除一个图形。 我的代码有什么问题?参数类型'对象'不能分配给参数类型'System.Windows.Forms.Control

private void removeDrawing() 
    { 
     foreach (var ctrl in this.Controls) 
     { 
      if (ctrl.GetType().ToString() == "Microsoft.VisualBasic.PowerPacks.ShapeContainer") 
      { 
       this.Controls.Remove(ctrl); // argument type 'object' is not assignable to parameter type 'System.Windows.Forms.Control 
      } 
     } 
    } 

[更新] 感谢您的回答。 我实现它作为

while (this.Controls.OfType<ShapeContainer>().Any()) 
     { 
      var ctrl = this.Controls.OfType<ShapeContainer>().First(); 
      this.Controls.Remove(ctrl); 
     } 

回答

6

你还是要投ctrl为正确的类型,但我不会推荐的名字做类型检查。试试这个:

private void removeDrawing() 
{ 
    foreach (var ctrl in this.Controls) 
    { 
     var shapeContainer = ctrl as ShapeContainer; 
     if (shapeContainer != null) 
     { 
      this.Controls.Remove(shapeContainer); 
     } 
    } 
} 

但是,有点Linq可以帮助你在这里。请参阅OfType扩展方法:

using System.Linq; 
... 

private void removeDrawing() 
{ 
    foreach (var ctrl in this.Controls.OfType<ShapeContainer>().ToList()) 
    { 
     this.Controls.Remove(ctrl); 
    } 
} 
相关问题