Form1 (издатель событий) должен предоставить отдельное открытое свойство события для Form2 (подписчик) для подписки.
Например: форма, публикующая событие, будет выглядеть следующим образом:
public partial class Publisher : Form
{
public event PostUpdateHandler OnPostUpdate;
public Publisher()
{
InitializeComponent();
new Subscriber(this).Show();
}
private void button1_Click(object sender, EventArgs e)
{
if (OnPostUpdate != null)
{
OnPostUpdate(new PostUpdateArgs(textBox1.Text));
}
}
}
public delegate void PostUpdateHandler(PostUpdateArgs args);
public class PostUpdateArgs : EventArgs
{
public string UpdateText;
public PostUpdateArgs(string s)
{
UpdateText = s;
}
}
Форма подписки выглядит следующим образом:
открытый частичный класс Subscriber: Form {public Subscriber () {InitializeComponent ();}
public Subscriber(Publisher publisher) : this()
{
publisher.OnPostUpdate += new PostUpdateHandler(publisher_OnPostUpdate);
}
private void publisher_OnPostUpdate(PostUpdateArgs args)
{
this.Form2_Load(null, null);
}
private void Subscriber_FormClosed(object sender, FormClosedEventArgs e)
{
this.Dispose();
}
private void Form2_Load(object sender, EventArgs e)
{
MessageBox.Show("http://stackoverflow.com");
}
}
Когда пользователь нажимает кнопку 1 в форме публикации, форма подписки выполнит код, связанный с делегатом, в результате чего появится окно сообщения с сообщением http://stackoverflow.com
.