我有一个Windows窗体屏幕,其中一个菜单栏停靠在窗体的左侧,类似于Outlook 2003的菜单栏,还有一个面板占据窗体右侧的其余部分。
我的左边菜单包含了一些项目。单击这些项后,我希望在右侧面板上加载适当的用户控件(充当“子窗体”)。我已经成功地做到了这一点,并且工作得很好。
不过,我担心的是,我的用户控件是否被正确放置,或者当用户单击另一个菜单项(因此,加载另一个用户控件/子窗体)时,它们是否仍留在内存中。
代码如下所示:
private void ultraExplorerBar1_ItemClick(object sender, Infragistics.Win.UltraWinExplorerBar.ItemEventArgs e)
{
panel1.Controls.Clear();
if (e.Item.Key == "Action")
{
ActionUserControl subForm = new ActionUserControl();
panel1.Controls.Add(subForm);
subForm.Show();
}
else if (e.Item.Key == "Options")
{
OptionsUserControl subForm = new OptionsUserControl();
panel1.Controls.Add(subForm);
subForm.Show();
}
}我不确定我在方法开始时调用的panel1.Controls.Clear()是否足以让不再使用的用户控件在适当的时候被垃圾回收?
据我所知,一旦从面板中清除,应用程序中不应该留下任何引用,但我不确定我是否应该做其他事情,或者是一个合理的轻量级工具,我可以使用它来确认我的子窗体按应该的方式进行了处理,并且不会导致某种内存/资源泄漏?
发布于 2011-11-03 02:39:49
在调用panel1.Controls.Clear()之前使用此循环,并确保用户控件中的Dispose()方法依次释放所有可释放的资源。
foreach (Control control in panel1.Controls)
{
control.Dispose();
}https://stackoverflow.com/questions/7981296
复制相似问题