Event-driven Programming in C#


Event-driven programming is a programming paradigm where the flow of the program is determined by events, such as user actions (e.g., clicks, keystrokes) or messages from other programs. In C#, event-driven programming is commonly used in Windows Forms and WPF applications. This tutorial will explain the basics of event-driven programming in C#, including how events and event handlers work.

Step 1: Introduction to Events and Delegates

In C#, events are a way to signal that something has occurred. These events are often triggered by user actions or other processes. When an event occurs, a corresponding method, known as an event handler, is invoked to respond to the event.

In C#, events are based on delegates. A delegate is a type that defines a method signature, allowing methods to be assigned to it. When an event is raised, the delegate invokes the assigned methods.

Example of a Delegate


    delegate void MyEventHandler(string message);
   class Program
    {
        static void Main()
        {
            MyEventHandler handler = new MyEventHandler(MyMethod);
            handler("Hello, World!");
        }
       static void MyMethod(string message)
        {
            Console.WriteLine(message);
        }
    }
        

In this example, we define a delegate MyEventHandler and assign it to the method MyMethod. When the delegate is invoked, it calls MyMethod with the argument "Hello, World!".

Step 2: Defining and Raising an Event

In C#, events are defined using the event keyword. Events are typically defined within a class and can be raised (triggered) when specific actions occur.

Here's how to define an event in a C# class:

Example: Defining an Event


    using System;
   class Program
    {
        // Declare the event using a delegate
        public delegate void MyEventHandler(string message);
        public static event MyEventHandler OnEvent;
       static void Main()
        {
            // Subscribe to the event
            OnEvent += MyEventHandlerMethod;
           // Raise the event
            RaiseEvent("Event has been triggered!");
        }
       // Method that raises the event
        static void RaiseEvent(string message)
        {
            // Trigger the event
            OnEvent?.Invoke(message);
        }
       // Event handler method
        static void MyEventHandlerMethod(string message)
        {
            Console.WriteLine(message);
        }
    }
        

In this example, the OnEvent event is defined with a delegate type MyEventHandler. The RaiseEvent method triggers the event, and the MyEventHandlerMethod method is the event handler that handles the event and prints the message to the console.

Step 3: Subscribing to Events

To respond to an event, you need to subscribe an event handler method to the event. This is done using the += operator. The event handler method must match the signature of the delegate.

In the previous example, we subscribed MyEventHandlerMethod to the OnEvent event using the += operator:


        OnEvent += MyEventHandlerMethod;
        

This means that when the event is raised, the MyEventHandlerMethod will be executed.

Step 4: Unsubscribing from Events

If you no longer wish to handle an event, you can unsubscribe from it using the -= operator. This removes the event handler from the event.

Example: Unsubscribing from an Event


    OnEvent -= MyEventHandlerMethod;
        

After unsubscribing, the event will no longer trigger the MyEventHandlerMethod when it is raised.

Step 5: Event Handling in Windows Forms

Event-driven programming is especially important in GUI applications like Windows Forms. For example, user actions such as clicking a button or selecting an item in a list box are events that trigger corresponding event handlers.

Let's look at an example of handling a button click event in a Windows Forms application:

Example: Button Click Event in Windows Forms


    using System;
    using System.Windows.Forms;
   namespace WindowsFormsApp
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
           // Event handler for button click
            private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Button clicked!");
            }
           // Method to start the application
            static void Main()
            {
                Application.Run(new Form1());
            }
        }
    }
        

In this example, when the user clicks the button (button1), the button1_Click event handler is executed, showing a message box that says "Button clicked!".

Step 6: Event Args and Passing Data

Events in C# can also pass data to the event handler through the EventArgs class or a custom event argument class. The EventArgs class is typically used for general event data, while custom event argument classes are used when specific data needs to be passed.

Example: Custom Event Args


    using System;
   class Program
    {
        public delegate void MyEventHandler(object sender, MyEventArgs e);
        public static event MyEventHandler OnCustomEvent;
       static void Main()
        {
            OnCustomEvent += MyEventHandlerMethod;
            RaiseEvent("Hello, this is custom event data.");
        }
       static void RaiseEvent(string message)
        {
            OnCustomEvent?.Invoke(null, new MyEventArgs(message));
        }
       static void MyEventHandlerMethod(object sender, MyEventArgs e)
        {
            Console.WriteLine(e.Message);
        }
    }
   public class MyEventArgs : EventArgs
    {
        public string Message { get; }
       public MyEventArgs(string message)
        {
            Message = message;
        }
    }
        

In this example, we define a custom event argument class MyEventArgs that holds a Message property. When the event is raised, this message is passed to the event handler.

Step 7: Conclusion

Event-driven programming is a powerful paradigm that allows programs to respond to user actions and other events. In C#, events are based on delegates, and event handlers are methods that respond to these events. Understanding events and delegates is essential for building interactive applications, especially in GUI-based programs like Windows Forms and WPF.

In this tutorial, you learned how to:

  • Define and raise events in C#.
  • Subscribe to and unsubscribe from events.
  • Handle events in Windows Forms applications.
  • Pass data with events using EventArgs and custom argument classes.

With this knowledge, you can start building more dynamic and interactive applications in C# that respond to user actions and other events.




Advertisement