我正在使用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‘由于其保护级别而无法访问
我想这与私人/公共课程有关。但我宁愿有一个“正确”的解决方案,而不是仅仅把一切都改变成公众。
对于这通常是怎么做的,有什么建议吗?
发布于 2017-03-02 13:54:29
解决方案1(丑陋):
使panMain在设计器中公开:

解决方案2(稍微好一些):
提供公共方法,安全地完成这些任务:
// MockUpForm code:
public void ClearPanelControls()
{
panMain.Controls.Clear();
}
public void AddControlToPanel(Control c)
{
panMain.Controls.Add(c);
}然后调用这些方法,而不是发布完整的面板,这使得例如可以处理整个面板之类的事情.
发布于 2017-03-02 13:58:12
要从UserControl访问父窗体的控件,可以使用delegate和event
就像这样..。
窗口窗体(父窗体)代码.
public Form1()
{
InitializeComponent();
userControl1.CreateOffer += UserControl1_CreateOffer;
}
private void UserControl1_CreateOffer()
{
var myControl = new WindowsFormsDemo.View.CreateOffer();
this.panMain.Controls.Clear();
this.panMain.Controls.Add(myControl);
}用户控制代码.
internal delegate void CreateOfferDelegate();
internal event CreateOfferDelegate CreateOffer;
public UserControl1()
{
InitializeComponent();
}
private void btnCreateOffer_Click(object sender, EventArgs e)
{
CreateOffer();
}https://stackoverflow.com/questions/42557151
复制相似问题