我正在尝试从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);
}
答案 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);
}
}