2014-01-12 3 views
1

winform에서 도면을 제거하려고합니다. 내 코드에 어떤 문제가 있습니까?'object'인수 유형을 매개 변수 유형 '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); 
    } 
} 
관련 문제