C# 用户控件在窗体内通信的最佳方式
我有一整段的呻吟,现在已经删除了。于是我切入主题:C# 用户控件在窗体内通信的最佳方式,c#,winforms,user-controls,datatable,C#,Winforms,User Controls,Datatable,我有一整段的呻吟,现在已经删除了。于是我切入主题: 如何通知userControlA已在userControlB中单击按钮 如何通知主窗体已在userControlA中单击按钮 答案是否在最佳解决方案中提供?我正在寻找最佳解决方案。示例 public partial class UserControlA { // method to inform public void DoSomething(string text) { ... // do somet
userControlA
已在userControlB
中单击按钮userControlA
中单击按钮public partial class UserControlA
{
// method to inform
public void DoSomething(string text)
{
... // do something with text
}
}
public partial class UserControlB
{
public event Action SomethingChanged;
public string SomeText {get; set;} // some property
private void button1Clicked(object sender, EventArgs e)
{
if(SomethingChanged != null)
SomethingChanged();
}
}
// in form contructor (for demonstration purpose)
var a = new UserControlA();
var b = new UserControlB();
this.Controls.Add(a);
this.Controls.Add(b);
var handler = () => a.DoSomething(b.SomeText);
b.SomethingChanged += handler;
现在,当您在
UserControlB
中单击button1
时,UserControlA
将调用其DoSomething()
方法。表单用于传递事件,但您可以直接在UserControlA
中订阅事件,您需要以某种方式传递UserControlB
的实例(属性、方法、构造函数)。创建事件+侦听器。以主窗体/其他格式订阅(收听)活动usercontrol@DGibbs你的意思是像链接文章中提供的那样?这是你的建议还是你有更简单的方法。因为会有很多听众和活动。这比把一个巨大的类划分成部分类有什么好处。每个人都会认出其他人。这几乎是我的主要问题。当你说“将有许多侦听器和事件”时:可能每个用户控件只需要一个事件,然后随事件传递一些信息,例如,哪个按钮被按下。将用户控件视为普通控件(例如,按钮
)。当您想知道是否在userControlB
中单击了特定按钮时,请创建一个事件,以便任何人(例如表单)都可以订阅它。您可以只使用一个事件进行多个更改,例如,如果您只想通知侦听器“嘿,有什么更改,请再次检查我的所有属性”。@Sinatr您可以给出一个更可靠的“只使用一个事件进行多个更改”的示例吗?链接中提供的是一个很好的例子吗?