我有一个Winform对话框,其中包含多个用户控件 - 所有这些控件都是某种Datagridview
。主要父级具有关于用户的详细信息,并且每个用户控件都具有该用户的其他详细信息。当我的Dialog首次加载所有UserControls工作,但我试图找出如何根据UserControl1中的位置更改更新UserControl2。
所以,我试图在UserControl1中选择一行,并根据我刚刚选择的值更新UserControl2中的数据。
我已尝试在UserControl1和MouseDownEvents
上使用BindingSourcePositionChanged
,但我无法弄清楚如何将选定的值恢复到我的父窗体,然后使用该值刷新其他数据网格?
我看了delegates and events,但我觉得睡眠不足让人难以理解。我知道我需要在UserControl1上创建我的委托和事件,然后以某种方式在我的mainform上调用它,但这就是我被卡住的地方,并且不知道从哪里开始。
这是正确的方向吗?或者还有另一种方法可以完成这项工作吗?任何人都可以提供有关其工作原理的任何建议吗?
答案 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
}
}