2012-10-01 3 views
4

각 컨트롤이 방을 나타내는 흐름 레이아웃 패널을 만듭니다. 패널의 모든 컨트롤을 제거하고 새 컨트롤을 추가하여 모든 룸을 새로 고침하고 싶습니다.C#의 flowlayoutpanel에서 모든 컨트롤 제거

내가 사용 :

foreach(Control control in flowLayoutPanel.Controls) 
{ 
    flowLayoutPanel.Controls.Remove(control); 
    control.Dispose(); 
} 

하지만 컨트롤의 일부는 제거 할 수 없습니다.

인터넷에서 해결책을 찾으려고했지만 아무데도 발견되지 않았습니다.

신체가 도움이 될 수 있습니까?

+0

출력 창에 예외나 메시지가 표시되는 등의 오류가 있었습니까? 그렇다면 질문에 추가하십시오. – akton

+0

Akton 출력 창에 예외 또는 메시지가 없습니다. 한 가지, 컨트롤 중 일부는 여전히 패널에 표시되었습니다. – Johnny

+0

가능한 중복 [적절한 처분 및 UserControls 참조를 제거하여 메모리 누수를 피하십시오] (http://stackoverflow.com/questions/12610535/properly-disposing-of-and-removing-references-to-usercontrols-to -avoid-memory) –

답변

8

반복하는 동일한 목록에서 컨트롤을 제거하기 때문입니다. 이 같은 것을 시도하십시오

List<Control> listControls = flowLayoutPanel.Controls.ToList(); 

foreach (Control control in listControls) 
{ 
    flowLayoutPanel.Controls.Remove(control); 
    control.Dispose(); 
} 

어쩌면 그렇게 좋지는 않을지 모르지만 생각을하게됩니다. 목록에서 가져 와서 제거하십시오.

+1

@oberfreak 편집 해 주셔서 감사합니다. 거기에 좋은 물건! – Yoinazek

+1

ToList() 메소드가 없습니다. – matheusvmbruno

+4

귀하의 사용에 System.Linq가 있어야합니다. 그 후에도 그걸 가지고 있지 않다면, 그 대상을 던질 필요가 있습니다. 이 경우 'flowLayoutPanel.Controls.Cast () .ToList()' – Yoinazek

2

참고 :이 이전 코멘트를 기반으로 작동하는 솔루션이 나를 위해 일한 그 사람 :)

학점 너무 :

List<Control> listControls = new List<Control>(); 

foreach (Control control in flowLayoutPanel1.Controls) 
{ 
    listControls.Add(control); 
} 

foreach (Control control in listControls) 
{ 
    flowLayoutPanel1.Controls.Remove(control); 
    control.Dispose(); 
} 

아마 일을 더 나은/청소기 방법이있다 그것은 작동하지만 작동합니다.

5

MSDN에 따르면 (예 : FlowLayoutPanel)에서 calling the Clear() method으로 모든 컨트롤을 지울 수 있습니다. 예를 들어 :

flowLayoutPanel1.Controls.Clear(); 

는주의 : 항목이 컬렉션에서 제거해서 사라 핸들러를 의미 하지을 수행하고 제대로 덜 메모리 누수에 직면하게 폐기해야합니다.

0

쉽고 빠른 해결책을 찾고 계시다면. 여기있어.

while (flowLayoutPanel.Controls.Count > 0) flowLayoutPanel.Controls.RemoveAt(0);