Hi Kevin,
The Page_PreInit method is an event handler, but the OnPreInit method is an override. You can use either of them without a problem. When the PreInit event is raised in the page lifecycle, ASP.NET calls OnPreInit in the Page class. Since OnPreInit is virtual, your OnPreInit override is called polymorphically. It is good practice to call base.OnPreInit (or call the base class on any of the overrides) to ensure the base class has an opportunity to process the event. Page_PreInit is called automatically if you have AutoEventWireup set to true, which is now set automatically whenever you create a page. It is simply a handler for the PreInit event. This is an event-based method, as opposed to the object-oriented approach to handling the PreInit event. I tend to use the Page_Xxx methods rather than the OnXxx overrides because of convention, knowing that they'll be easily recognizable and understood by most ASP.NET developers. Other than that, don't have a strong opinion one way or the other as to which is best.
Joe
Free C# Tutorials at C# Station