--- title: Define an event in controls ms.date: "03/30/2017" dev_langs: - "csharp" - "vb" helpviewer_keywords: - "events [Windows Forms], defining within Windows Forms custom controls" - "custom controls [Windows Forms], events using code" ms.assetid: d89f1096-8061-42e2-a855-a1f053f1940a --- # Defining an Event in Windows Forms Controls For details about defining custom events, see [Events](/dotnet/standard/events/index). If you define an event that does not have any associated data, use the base type for event data, , and use as the event delegate. All that remains to do is to define an event member and a protected `On`*EventName* method that raises the event. The following code fragment shows how the `FlashTrackBar` custom control defines a custom event, `ValueChanged`. For the complete code for the `FlashTrackBar` sample, see the [How to: Create a Windows Forms Control That Shows Progress](how-to-create-a-windows-forms-control-that-shows-progress.md). ```vb Option Explicit Option Strict Imports System Imports System.Windows.Forms Imports System.Drawing Public Class FlashTrackBar Inherits Control ' The event does not have any data, so EventHandler is adequate ' as the event delegate. ' Define the event member using the event keyword. ' In this case, for efficiency, the event is defined ' using the event property construct. Public Event ValueChanged As EventHandler ' The protected method that raises the ValueChanged ' event when the value has actually ' changed. Derived controls can override this method. Protected Overridable Sub OnValueChanged(e As EventArgs) RaiseEvent ValueChanged(Me, e) End Sub End Class ``` ```csharp using System; using System.Windows.Forms; using System.Drawing; public class FlashTrackBar : Control { // The event does not have any data, so EventHandler is adequate // as the event delegate. private EventHandler onValueChanged; // Define the event member using the event keyword. // In this case, for efficiency, the event is defined // using the event property construct. public event EventHandler ValueChanged { add { onValueChanged += value; } remove { onValueChanged -= value; } } // The protected method that raises the ValueChanged // event when the value has actually // changed. Derived controls can override this method. protected virtual void OnValueChanged(EventArgs e) { onValueChanged?.Invoke(this, e); } } ``` ## See also - [Events in Windows Forms Controls](events-in-windows-forms-controls.md) - [Events](/dotnet/standard/events/index)