C# 如何让主窗体监听控件中的按钮单击

C# 如何让主窗体监听控件中的按钮单击,c#,winforms,C#,Winforms,我正在构建的应用程序的功能有点像一个网站,我有一个主内容区和一系列按钮,然后在主内容区显示不同的内容 我的主要内容区域由一个空白面板(pnlMainContent)组成,然后在单击按钮/选项卡时,该面板将填充用户控件 我放入的第一个用户控件包括另一个按钮,该按钮应使用不同的用户控件填充主内容面板 如何让主窗体监听用户控件内的按钮单击,以便清除面板并用另一个用户控件填充它 目前,我无法从用户控件中看到pnlMainContent。在用户控件中,您需要创建自定义事件。当您在用户控件中执行操作时,会触

我正在构建的应用程序的功能有点像一个网站,我有一个主内容区和一系列按钮,然后在主内容区显示不同的内容

我的主要内容区域由一个空白面板(pnlMainContent)组成,然后在单击按钮/选项卡时,该面板将填充用户控件

我放入的第一个用户控件包括另一个按钮,该按钮应使用不同的用户控件填充主内容面板

如何让主窗体监听用户控件内的按钮单击,以便清除面板并用另一个用户控件填充它


目前,我无法从用户控件中看到pnlMainContent。

在用户控件中,您需要创建自定义事件。当您在用户控件中执行操作时,会触发此操作。 然后主窗体订阅此操作,并在每次发生此操作时收到通知

您的用户控件

//Declare a delegate and Event.  Here called StatusUpdate
public delegate void StatusUpdateHandler(object sender, EventArgs e);
public event StatusUpdateHandler OnUpdateStatus;

//When button is clicked, this is trigged
private void Button1_Click(object sender, EventArgs e)
{
    //In here, you now trigger your custom event
    UpdateStatus(); 
}


private void UpdateStatus()
{
     //Create arguments.  You should also have custom one, or else return EventArgs.Empty();
     EventArgs args = new EventArgs();

     //Call any listeners
     OnUpdateStatus?.Invoke(this, args);

}
然后以您的主要形式订阅此活动

yourUserControl.OnUpdateStatus += customControl_OnUpdateStatus;
...

private void customControl_OnUpdateStatus(object sender, EventArgs e)
{
     ///Handle your event here        
}

如何将UserControl添加到pnlMainContent?面板应作为父属性显示在UserControl@Steve-那么我做得不对吗?填充面板的代码如下所示:private void btnMemberView_Click(对象发送者,事件参数e){CtrlMemberView memberOverview=new CtrlMemberView();pnlMainContent.Controls.Add(memberOverview);}OK,因此,您的用户控件应该引发一个自定义事件,该事件可能只是按钮的传递。这是激发事件的正确方法。@CaptainKenpachi-好吧,所以我对编码还是相当陌生的。你能推荐一篇能帮助我实现这一目标的文章吗?你需要了解事件和委托。您需要为用户控件创建自定义事件,单击用户控件上的按钮时将触发该事件。将用户控件添加到表单时,需要将控件的事件附加到表单中的事件处理程序方法。在该事件处理程序中,您编写了加载另一个用户控件的代码。当您单击第一个用户控件中的按钮时,它将执行表单中的代码并加载另一个用户控件。太棒了,您是一个明星!