参数类型'对象'不能分配给参数类型' System.Windows.Forms.Control

时间:2014-01-12 21:56:14

标签: c# winforms

我正在尝试从winform中删除一张图纸。 我的代码出了什么问题?

  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);
        }

1 个答案:

答案 0 :(得分: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);
    }
}