 <p>The standard pattern for implementing events is to use a virtual "OnXxx" method, like this:</p> <pre><code>public event EventHandler OkClick; protected virtual void OnOkClick(EventArgs e) { if (OkClick != null) OkClick(this, e); } </code></pre> <p>Now any time your base control wants to fire the "OkClick" event, it simply calls:</p> <pre><code>OnOkClick(EventArgs.Empty); </code></pre> <p>This means that descendants of your base control can override OnOkClick like this:</p> <pre><code>protected override void OnOkClick(EventArgs e) { // do some stuff before the event is fired base.OnOkClick(e); // do some stuff after the event is fired } </code></pre> <p>Note that the framework design guidelines actually state that you should implement the "OnXxx" method in such a way that the event is fired even if the descendant classes forget to call the base method. I don't really know a good way to do that, and I'm sure most people ignore this guideline.</p>