我正在使用WinForms创建应用程序。我有panel
其中我显示user control
。在user control
里面我有一个button
。当我点击按钮时,我想清除panel
并显示不同的user control
。我想,使用下面的代码来执行:从面板内部更改面板控制
private void btnCreateOffer_Click(object sender, EventArgs e)
{
var myControl = new WindowsFormsDemo.View.CreateOffer();
MockUpForm.panMain.Controls.Clear();
MockUpForm.panMain.Controls.Add(myControl);
}
这个工作从直接在parrent形式放置的按钮,但是当我在使用user control
里面,它说:
'MockUpForm.panMain' is inaccessible due to its protection level
我假设它与私人/公共课有关。但我宁愿拥有“正确”的解决方案,而不是将所有事情都改为公开。
有关如何通常这样做的任何建议?
这是根本错误的方式来做到这一点。举一个事件来代替,你的主表单可以订阅它并在其控件上晃动。使用Controls.Clear()也是非常非常错误的,你必须在你删除的任何控件上调用Dispose()方法,否则会导致永久性内存泄漏。 –
感谢您的意见。我对WinForms相当陌生,所以我很可能会做很多事情*非常*错:-)。我将研究事件方法... – Noceo
@HansPassant:他没有提到他是否想重新使用删除的控件。但如果事件也订阅处置是不够的,无论如何会发生内存泄漏。 – taffer