2013-12-14 3 views
1

Я добавляю элементы управления на панели один за другим, когда пользователь нажимает кнопку. Элементы управления отображаются один за другим на панели. Когда панель заполнена, например. десять, , добавленный следующий элемент управления должен заменить первый элемент управления, который был добавлен, но сначала мне нужно удалить первый элемент управления ... проблема в том, что все элементы управления, которые создаются, имеют одну и ту же ссылку, например. «pic», теперь, когда я использую panel1.Controls.Remove (рис.), он не указывает, что элемент управления в первой позиции нужно удалить!Добавление/удаление элементов управления с тем же именем ссылки

int index = 0; 

if (util.GetSize() != 10) 
{ 
    ms.Controls.Add(musNote); 
} 
else 
{ 
    ms.Controls.Add(musNote); //this to replace first musNote added... but before I need to remove the musNote that in that position already (problem all of the are musNote!! 
    index++; 
    if (index == 10) 
    { 
     index = 0; 
    } 
} 
musNote.ShowNote(); 

Вышеупомянутый не весь код, но должен быть достаточным для решения проблемы .. если есть какая-либо информация. пожалуйста, спросите меня np. Tks заранее за помощь.

+1

Я прочитал его дважды, не могу понять, что вы просите с этим 'сейчас, когда я использую panel1.Controls.Remove (pic) it doe s не указывать, что элемент управления в первой позиции необходимо удалить. –

+0

Пример. Я могу добавить только десять музыкальных нот на панели из-за ширины. Когда панель заполнена и пользователь добавит еще одну ноту, эта нота должна заменить первую. Как я могу удалить конкретно первую, если все ноты музыки имеют одинаковое имя ссылки. Надеюсь, я более ясен. Благодарю. – user2307236

ответ

2

Если вы просто хотите, чтобы удалить первый ребенок с помощью RemoveAt методы

myPanel.Controls.RemoveAt(0); 

Не используйте выше код, он будет течь в Handle, используйте метод Dispose, как @Hans предложил в комментариях

myPanel.Controls[0].Dispose();//This takes care of destroying the window 
+0

Это очень неприятная утечка, никогда не рекомендую. Вместо этого используйте myPanel.Controls [0] .Dispose(). –

+0

@HansPassant Утилизировать, а затем удалить также требуется или нет? –

+2

Нет, Dispose() также автоматически удаляет его из коллекции Controls. –

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