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

时间:2017-02-09 06:43:27

标签: c# winforms user-controls dispose

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

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 个答案:

答案 0 :(得分:2)

错误非常明显,您无法在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();
}