2017-02-09 9 views
1

패널에서 특정 유형의 사용자 정의 컨트롤을 처리하려고합니다. 지금은 foreach 루프를 사용하여 User 컨트롤을 처리하고 있습니다.C#의 패널 컨트롤에서 특정 사용자 정의 컨트롤을 삭제하는 방법()

foreach (CTRL.box bx in RightPanel.Controls.OfType<CTRL.box>()) 
{ 
    bx.Dispose(); 
} 

그러나 올바르게 작동하지 않습니다. 구글에서 나는 아래의 코드를 찾는다.

while(tabControlToClear.Controls.Count > 0) 
{ 
var tabPage = tabControlToClear.Controls[0]; 
tabControlToClear.Controls.RemoveAt(0); 
tabPage.Dispose(); 

// Clear out events. 

foreach (EventHandler subscriber in tabPage.Click.GetInvocationList()) 
{ 
    tabPage.Click -= subscriber; 
} 
} 

나는이 일을 시도하고있다. 그러나 나를 위해 그것은 내가 처분 할 필요가있는 특정한 사용자 컨트롤이다. 그들은 내 양식에 필요한 다른 사용자 컨트롤입니다. 전체 나는 처분하고 싶습니다 상자 내 양식에서 사용자 정의 컨트롤.

while (RightPanel.Controls.OfType<CTRL.box>().Count() > 0) 
{ 
     var panel = RightPanel.Controls.OfType<CTRL.box>()[0];//Here i am getting error "Cannot apply indexing with [] to an expression of type 'System.Collections.Generic.IEnumerable<Project_Server.CTRL.box>'" 
} 

누구든지이 오류를 해결할 수 있도록 도와 줄 수 있습니까?

+1

'IEnumerable '인터페이스는 인덱서 속성을 지정하지 않습니다. 두 개 이상의'CTRL.box' 컨트롤이 있습니까? 그렇다면 런타임에 일부 속성을 통해 해당 항목을 식별 할 수 있습니까? – CoolBots

답변

2

오류는 매우 분명하다, 당신은 내가 사용을 첫 번째 요소를 검색하고 삭제하는 First 또는 FirstOrDefault 확장 방법을 제안 IEnumerable

에 색인을 적용 할 수 없습니다. 당신이 유형 CTRL.box의 모든 컨트롤을 제거 할 것인지

var panel = RightPanel.Controls.OfType<CTRL.box>().FirstOrDefault(); 
if(panel != null) 
{ 
    //logic 
} 

는 경우,이를 사용합니다.

List<Control> controls= RightPanel.Controls.OfType<CTRL.box>().ToList(); 

foreach(Control c in controls) 
{ 
    RightPanel.Controls.Remove(c); 
    c.Dispose(); 
} 
+0

사실, 우리가 그 일을 할 수 있습니다. –

+0

'FirstOrDefault()'를 검색한다면'while' 루프의 요점은 무엇입니까? – CoolBots

+0

@CoolBots 그게 유효한 포인트 야, 정말로 모든 컨트롤이나 컨트롤 하나만 삭제하려고하는 것은 아니다. 두 시나리오 모두에 대해 업데이트하겠습니다. –