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

时间:2011-10-06 21:49:02

标签: c# winforms events user-controls delegates

我有一个Winform对话框,其中包含多个用户控件 - 所有这些控件都是某种Datagridview。主要父级具有关于用户的详细信息,并且每个用户控件都具有该用户的其他详细信息。当我的Dialog首次加载所有UserControls工作,但我试图找出如何根据UserControl1中的位置更改更新UserControl2。

所以,我试图在UserControl1中选择一行,并根据我刚刚选择的值更新UserControl2中的数据。

我已尝试在UserControl1和MouseDownEvents上使用BindingSourcePositionChanged,但我无法弄清楚如何将选定的值恢复到我的父窗体,然后使用该值刷新其他数据网格?

我看了delegates and events,但我觉得睡眠不足让人难以理解。我知道我需要在UserControl1上创建我的委托和事件,然后以某种方式在我的mainform上调用它,但这就是我被卡住的地方,并且不知道从哪里开始。

这是正确的方向吗?或者还有另一种方法可以完成这项工作吗?任何人都可以提供有关其工作原理的任何建议吗?

1 个答案:

答案 0 :(得分:3)

是的,这是正确的方法,如下所示将提供一个事件处理程序,您可以使用它来从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
     }
}