using System; using System.IO; using System.Collections.Generic; namespace Events { public delegate void EventHandler(object sender, object e); public class Button { public event EventHandler Click; protected void OnClick(object e) { if (Click != null) Click(this, e); } public void Reset() { Click = null; } } public class LoginDialog { Button OkButton; Button CancelButton; public LoginDialog() { OkButton = new Button(); OkButton.Click += new EventHandler(OkButtonClick); CancelButton = new Button(); CancelButton.Click -= new EventHandler(CancelButtonClick); } void OkButtonClick(object sender, object e) { // Handle OkButton.Click event } void CancelButtonClick(object sender, object e) { // Handle CancelButton.Click event } } class Control { // Unique keys for events static readonly object mouseDownEventKey = new object(); static readonly object mouseUpEventKey = new object(); // Return event handler associated with key protected Delegate GetEventHandler(object key) { return null; } // Add event handler associated with key protected void AddEventHandler(object key, Delegate handler) { } // Remove event handler associated with key protected void RemoveEventHandler(object key, Delegate handler) { } // MouseDown event public event EventHandler MouseDown { add { AddEventHandler(mouseDownEventKey, value); } remove { RemoveEventHandler(mouseDownEventKey, value); } } // MouseUp event public event EventHandler MouseUp { add { AddEventHandler(mouseUpEventKey, value); } remove { RemoveEventHandler(mouseUpEventKey, value); } } // Invoke the MouseUp event protected void OnMouseUp(object args) { EventHandler handler; handler = (EventHandler)GetEventHandler(mouseUpEventKey); if (handler != null) handler(this, args); } } }