C# 将从用户控件中选择的值传递给父控件
我有一个Winform对话框,其中包含多个用户控件-它们都是某种类型的C# 将从用户控件中选择的值传递给父控件,c#,winforms,events,user-controls,delegates,C#,Winforms,Events,User Controls,Delegates,我有一个Winform对话框,其中包含多个用户控件-它们都是某种类型的Datagridview。主父级具有关于用户的详细信息,每个用户控件都具有关于该用户的附加详细信息。当我的对话框第一次加载所有的UserControls时,工作正常,但我正试图找出如何根据UserControl1中的位置更改来更新UserControl2 因此,我试图在UserControl1中选择一行,并根据刚才选择的值更新UserControl2中的数据 我曾尝试在UserControl1和BindingSourcePos
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
}
}
非常感谢你的帮助。向父窗体引发事件可以处理它,这是一个好办法!非常感谢你的帮助。向父窗体引发事件可以处理它,这是一个好办法!