Daniel Fisher recently forwarded me a pointer to an excellent step-by-step blog post he wrote that walks through how to build an ASP.NET Server Control that provides "wait-screen" functionality for long-rendering pages (note: this can be used to avoid users becoming impatient, hitting refresh, only to restart a long running request).
What I really like about this article isn't just the control he builds (which happens to be cool and useful), but more the step-by-step approach he uses to explain all of the concepts behind building a re-usable control (properties and property grid integration in VS/VWD, event handlers, rendering, design-time UI, default tag-prefix and naming, toolbox icon, etc). If you've never built a server control before and worry it sounds hard, or don't know how to begin, you should really read his post.
You can read it all here.
Hope this helps,
P.S. Last week I also blogged about a good server control development article that Dino wrote about the new CompositeControl base class in ASP.NET 2.0 (which makes it much easier to create and use controls within a custom control you build). You can read it here.