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

如何从C#中的面板控件中处置()特定的用户控件?,c#,winforms,user-controls,dispose,C#,Winforms,User Controls,Dispose,我想从面板中处理特定类型的用户控件。现在我正在使用foreach循环来处理用户控件 foreach (CTRL.box bx in RightPanel.Controls.OfType<CTRL.box>()) { bx.Dispose(); } 我正试图这样做,但对我来说,这是一个具体的用户控制,我需要处置。它们是我的表单中需要的其他用户控件。总的来说,我想从我的表单中处理框用户控件 while (RightPanel.Controls.OfType<CTRL.b

我想从面板中处理特定类型的用户控件。现在我正在使用foreach循环来处理用户控件

foreach (CTRL.box bx in RightPanel.Controls.OfType<CTRL.box>())
{
     bx.Dispose();
}
我正试图这样做,但对我来说,这是一个具体的用户控制,我需要处置。它们是我的表单中需要的其他用户控件。总的来说,我想从我的表单中处理用户控件

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>'"
}
while(RightPanel.Controls.OfType().Count()>0)
{
var panel=RightPanel.Controls.OfType()[0];//这里我得到一个错误“无法将带[]的索引应用于'System.Collections.Generic.IEnumerable'类型的表达式”
}

谁能帮我修复这个错误。

错误很明显,您不能在
IEnumerable

我建议使用
First
FirstOrDefault
扩展方法检索第一个元素并将其删除

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

没错,我们可以这样做。如果你在检索
FirstOrDefault()
whileloop的
while有什么意义?@CoolBots这是一个有效点,但并不确定op是想删除所有控件还是只删除一个控件。让我为这两个场景更新它。谢谢@HariPrasad,我想删除所有该类型的控件。它工作正常。
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();
}