C# 将从用户控件中选择的值传递给父控件

C# 将从用户控件中选择的值传递给父控件,c#,winforms,events,user-controls,delegates,C#,Winforms,Events,User Controls,Delegates,我有一个Winform对话框,其中包含多个用户控件-它们都是某种类型的Datagridview。主父级具有关于用户的详细信息,每个用户控件都具有关于该用户的附加详细信息。当我的对话框第一次加载所有的UserControls时,工作正常,但我正试图找出如何根据UserControl1中的位置更改来更新UserControl2 因此,我试图在UserControl1中选择一行,并根据刚才选择的值更新UserControl2中的数据 我曾尝试在UserControl1和BindingSourcePos

我有一个Winform对话框,其中包含多个用户控件-它们都是某种类型的
Datagridview
。主父级具有关于用户的详细信息,每个用户控件都具有关于该用户的附加详细信息。当我的对话框第一次加载所有的UserControls时,工作正常,但我正试图找出如何根据UserControl1中的位置更改来更新UserControl2

因此,我试图在UserControl1中选择一行,并根据刚才选择的值更新UserControl2中的数据

我曾尝试在UserControl1和BindingSourcePositionChanged上使用
MousedowneEvents
,但我不知道如何将所选值返回到父窗体,然后使用该值刷新其他数据网格

我看了一下,但我想睡眠不足让人难以置信地难以理解。我知道我需要在UserControl1上创建委托和事件,然后以某种方式在我的主窗体上调用它,但这就是我陷入困境的地方,我不知道从哪里开始


这是正确的方向吗?还是有其他方法来完成这件事?有人能就如何工作提供一些建议吗?

是的,这是正确的方法,类似于以下内容的内容将提供一个事件处理程序,您可以使用它从UserControl检索公共属性:

public class SomeClass : BaseControl
{
    public event EventHandler PersonSelected;

    public string Name{get;set;}

    protected void FindUser()
    {
        var find = new Button {ID = (ToString() + "search"), Text = "Search"};
            find.Click += delegate(object sender, EventArgs e)
                              {
                                  if (PersonSelected!= null)
                                  {
                                      //forward this event to the page's event handler
                                      PersonSelected(this, e);
                                  }
                              }; 
     }
}

public class SomeOtherClass : Page
{
    public void Main()
    {

       var sp = (SomeClass)Control;
                        sp.PersonSelected += BtnClick;
     }

    public void BtnClick(object sender, EventArgs e)
    {
        //Get some value from the (SomeClass)Control here
     }
}

是的,这是正确的方法类似于以下内容的内容将提供一个事件处理程序,您可以使用它从UserControl检索公共属性:

public class SomeClass : BaseControl
{
    public event EventHandler PersonSelected;

    public string Name{get;set;}

    protected void FindUser()
    {
        var find = new Button {ID = (ToString() + "search"), Text = "Search"};
            find.Click += delegate(object sender, EventArgs e)
                              {
                                  if (PersonSelected!= null)
                                  {
                                      //forward this event to the page's event handler
                                      PersonSelected(this, e);
                                  }
                              }; 
     }
}

public class SomeOtherClass : Page
{
    public void Main()
    {

       var sp = (SomeClass)Control;
                        sp.PersonSelected += BtnClick;
     }

    public void BtnClick(object sender, EventArgs e)
    {
        //Get some value from the (SomeClass)Control here
     }
}

非常感谢你的帮助。向父窗体引发事件可以处理它,这是一个好办法!非常感谢你的帮助。向父窗体引发事件可以处理它,这是一个好办法!