Динамически создаю UserControl
ы и ставлю им панель в качестве парента.
А как их потом с этой панели удалить? И как вообще уничтожить их экземпляры? Ведь нету же метода типа .Free()
Есть Dispose()
, но он, разумеется, не работает.
А создаются как? У панели есть Control.Controls Property (System.Windows.Forms) | Microsoft Docs с Add
и Remove
.
Парента самому вроде можно не трогать.
как обычно
MyUserControl u = new MyUserControl();
u.Parent = panel1;
Вспомнил, что у меня есть похожий заброшенный недопиленный проект двухлетней давности с таким же принципом работы и там всё работает. При его написании, такой проблемы не возникало. Сейчас смотрю код. Там тупо Dispose()
вызывается и всё работает
Может вообще в другом месте ошибка?
“Как обычно” это вот так: Add controls to Windows forms by Visual C# - C# | Microsoft Docs
panel1.Controls.Add(u);
panel1.Controls.Remove(u);
Хотя Parent
вроде бы то же самое делает.
internal virtual Control ParentInternal {
get {
return parent;
}
set {
if (parent != value) {
if (value != null) {
value.Controls.Add(this);
}
else {
parent.Controls.Remove(this);
}
}
}
}
если делать это по кнопкам
private void button1_Click(object sender, EventArgs e)
{
FrameYouTubeVideo frame = new FrameYouTubeVideo();
frame.Parent = panelSearchResults;
framesVideo.Add(frame);
StackFrames();
}
private void button2_Click(object sender, EventArgs e)
{
ClearFramesVideo();
}
private void ClearFramesVideo()
{
foreach (FrameYouTubeVideo frame in framesVideo)
{
frame.Dispose();
}
framesVideo.Clear();
}
то работает. Значит, надо копаться, после выполнения какого кода перестаёт работать. Эта ситуация очень напоминает Delphi.
Всё, нашел ошибку. Я просто в IntelliSense промахнулся и не тот метод вызвал А код рабочий был.