如何从C#中的面板控件中处理()特定的用户控件?

问题描述:

我想从面板中处理特定类型的用户控件。现在我正在使用foreach循环来处理用户控件。如何从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

错误是很清楚的,你不能IEnumerable

应用索引我建议使用FirstFirstOrDefault扩展方法来检索第一个元素并将其删除。

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

在情况下,如果你想删除CTRL.box类型的所有控件使用。

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

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

的确如此,我们可以做到这一点。 –

+0

如果您正在检索'FirstOrDefault()''while while'循环有什么意义? – CoolBots

+0

@CoolBots这是有效的点,不是真的确定op想要删除所有的控件或只是一个控件。让我更新这两个场景。 –