using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Event_Delegate_Action { public delegate void NameChangedEventHandler(string name); public delegate void IDNameEventHandler(int id, string name); public partial class frmDelegateEvents : Form { Person Test; Server MyServer; public frmDelegateEvents() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Test = new Person() { Name = "Default" }; Test.NameChanged += Test_NameChanged; Test.Name = "NewName"; MyServer = new Server(); MyServer.EvHaSend += MyServer_EvHaSend; MyServer.EvHaError += MyServer_EvHaError; MyServer.EvHaReceived += MyServer_EvHaReceived; MyServer.EvIDName += MyServer_EvIDName; } private void MyServer_EvIDName(int id, string name) { MessageBox.Show($"{id} {name}", "MyServer_EvIDName Info...", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } private void MyServer_EvHaReceived(object sender, ServerEventArgs e) { } private void MyServer_EvHaError(object sender, ServerEventArgs e) { } private void MyServer_EvHaSend(object sender, ServerEventArgs e) { MessageBox.Show($"{e.ID} {e.Message}", "Info...", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } private void Test_NameChanged(string name) { // throw new NotImplementedException(); MessageBox.Show(name, "Info...", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } static int BoardId = 0; private void btnSendMessage_Click(object sender, EventArgs e) { string tag; tag = $@""; MyServer.SendMessage(tag); MyServer.SendMessage(2911, "test with id and a message"); } } enum MessageTypes { Wait, Status, MessageSend, MessageReceived, Error } public class ServerEventArgs : EventArgs { internal int ID { get; set; } internal string Message { get; set; } internal MessageTypes MessageType { get; set; } } public class Server { public event EventHandler EvHaReceived; public event EventHandler EvHaSend; public event EventHandler EvHaError; public event IDNameEventHandler EvIDName; public void SendMessage(string message) { // EvHaSend?.Invoke(this, new ServerEventArgs() { ID = 3123, Message = @"Answer", MessageType = MessageTypes.MessageSend }); EvHaSend?.Invoke(this, new ServerEventArgs() { ID = 3123, Message = message, MessageType = MessageTypes.MessageSend }); } public void SendMessage(int id, string message) { EvIDName?.Invoke(id, message); } } public class Person { //This is the event //The subscribers of the event, should have the same signature //as the delegate that used to define the event public event NameChangedEventHandler NameChanged; private string name; public string Name { get { return name; } set { name = value; //Raise the event = calling all the subscribers delegate NameChanged?.Invoke(value); } } } }