2017-02-09 10 views
1

Я хочу удалить определенный элемент управления пользователя с панели. Сейчас я использую цикл foreach для управления пользовательским элементом управления.Как удалить() конкретный элемент управления пользователя из панели управления в C#?

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

Но он не работает должным образом. при проверке в google я нахожу код ниже.

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; 
} 
} 

Я пытаюсь это сделать, но для меня это конкретный элемент управления пользователями, которым я должен распоряжаться. они являются другими элементами управления пользователями, которые должны быть необходимы в моей форме. В целом я хочу распоряжаться box Пользовательский контроль из моей формы.

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

Ошибка довольно ясно, вы не можете применить индексацию IEnumerable

Я хотел бы предложить Использовать First или FirstOrDefault метод расширения для получения первого элемента и удалить его.

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? – CoolBots

+0

@CoolBots Это действительная точка, не совсем уверен, что op хочет удалить все элементы управления или только один элемент управления. Позвольте мне обновить его для обоих сценариев. –

 Смежные вопросы

  • Нет связанных вопросов^_^