用户控件在表单中进行通信的最佳方式

时间:2014-05-27 08:09:59

标签: c# winforms user-controls datatable

我有一段完整的呻吟,现在已被删除。所以我切入了追逐:

  1. 如何通知userControlA userControlB点击了某个按钮?
  2. 如何通知主表单在userControlA
  3. 中点击了按钮

    this post中提供的答案是最佳解决方案吗?我正在寻找最佳解决方案。

1 个答案:

答案 0 :(得分:1)

一个例子

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;

现在,当您点击button1中的UserControlB时,UserControlA会调用其DoSomething()方法。表单用于传递事件,但您可以直接在UserControlA订阅事件,您需要以某种方式传递UserControlB的实例(属性,方法,构造函数)。