C # event handling between two forms

I have two forms, and I am trying to capture an event created using frmEventGenerate.cs in frmEventReceive.cs.

In this example, I can get the event from frmEventGenerate.cs, but not sure how I can catch this in frmEventReceive.cs? frmEventReceive.cs is my launch form that creates frmEventGenerate.cs.

Can someone point me in the right direction, I think I'm stupid!

thanks

frmEventGenerate.cs:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Events { public delegate void LinkToEventHandler(); public partial class frmEventGenerate : Form { public static event LinkToEventHandler Evt; public frmEventGenerate() { InitializeComponent(); Evt += new LinkToEventHandler(ReceiveEvent); SendEvent(); } public static void SendEvent() { if (Evt != null) { Evt(); } } public void ReceiveEvent() { System.Console.WriteLine("Received Event - This works ok"); } } } 

frmEventReceive.cs:

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Events { public partial class frmEventReceive : Form { public frmEventReceive() { InitializeComponent(); frmEventGenerate frmGen = new frmEventGenerate(); } public void ReceiveEvent() { System.Console.WriteLine("I want to be able to receive the even here!"); } } } 
+4
source share
2 answers

In your constructor after creating an instance of frmEventGenerate :

 frmGen.Evt += ReceiveEvent; 

You no longer need new LinkEventHandler(...) - with C # 2, there is an available method group conversion that you can use to convert from a method group (method name) to a delegate type.

EDIT: I did not see your event being static. This suggests that you really should use:

 frmEventGenerate.Evt += ReceiveEvent; 

... and you don't need the frmGen variable.

However, I would strongly discourage you from this - why do you want the event to be static in the first place? (I would also strongly recommend that you name your types more intelligently - for example, something like “EventGenerator.” Ignoring the convention, the name of which should be in the case of Pascal, will lead to code confusion.)

+3
source
 //Receiver using System; using System.Windows.Forms; namespace eTest { public partial class frmMain : Form { public frmMain() { InitializeComponent(); } public void ReceiveEvent(int i) { MessageBox.Show("Event Received from Form: " + i.ToString()); } private void btnNew_Click(object sender, EventArgs e) { int num = 0; int x = 0; num = Convert.ToInt32(txtForms.Text); for (x = 0; x < num; x++) { frmDL f = new frmDL(); f.Evt += ReceiveEvent; f.iID = x; f.Text = x.ToString(); f.Show(); f.Activate(); Application.DoEvents(); } } } } //Sender using System; using System.Windows.Forms; namespace eTest { public delegate void myEventHandler(int i); public partial class frmDL : Form { public event myEventHandler Evt; public int iID = 0; public frmDL() { InitializeComponent(); } public void SendEvent() { if (Evt != null) { Evt(this.iID); } } private void btnEvent_Click(object sender, EventArgs e) { SendEvent(); } } } 
0
source

Source: https://habr.com/ru/post/1300179/


All Articles