Library tutorials & articles
Making skinned custom controls
- Overview
- The base class - SkinControl
- A simple sample control
- Using the sample control
The base class - SkinControl
Now let's get started on the actual code… First up is the base class all your skinned controls will derive from; the abstract class SkinControl. using System;
using System.Web.UI;
namespace MySite.Controls
{
public abstract class SkinControl : Control, INamingContainer
{
// ***********
// VARIABLES
// ***********
private Control skinControl = null;
private string skinVirtualPath = null;
// ************
// PROPERTIES
// ************
public string SkinVirtualPath
{
get { return skinVirtualPath; }
set { skinVirtualPath = value; }
}
// *********
// METHODS
// *********
protected override void CreateChildControls()
{
Controls.Clear();
base.CreateChildControls();
try
{
// Try to load the skin
PreInitialize();
// Add the skin to the ControlCollection
Controls.Add( skinControl );
// Initialize the skin
Initialize( skinControl );
}
catch {} // Prevent application from breaking
}
private void PreInitialize()
{
skinControl = Page.LoadControl( skinVirtualPath );
}
protected abstract void Initialize(Control skinControl);
}
}
As you can see our base class derives from Control class and implements the interface INamingContainer. The reason we implement INamingContainer is that it makes sure our controls are named in a hierarchical, correct manner.
The first thing after declaring the namespace and class is to add 2 variables which we will use to store the actual skin control with and the virtual path to the skin file. After this is taken care of we expose a public property called SkinVirtualPath. This property will allow page developers to get and set the virtual path to the skin file - each control will need to have this set in order for the control to work.
Next on the agenda is the part where we override CreateChildControls method and do a little action – first off we clear the control collection by performing a call to Controls.Clear() method, and then we do a call to the base class' CreateChildControls method.
Once this is over with we need to add our actual skinning methods, namely PreInitialize and Initialize and we need to add the skin control to the control collection. PreInitialize in its current state does nothing more than instantiating skinControl variable by using the method Page.LoadControl. This method takes 1 parameter - a string that point to the virtual path where the user control resides.
The Initialize method is abstract because it needs to be specifically overridden by each control that derives from SkinControl. This is because each skin uses its own set of html- and web controls and thus trying to find controls that might not exist make no sense…
Related articles
Related discussion
-
Gizmox Announces release of Visual WebGui SDK version 6.2.2
by Visual WebGui (0 replies)
-
Error 4 Make sure that the class defined in this code file matches the 'inherits' attribute, and that it extends the correct base class (e.g. Page or UserControl).
by lbargers (3 replies)
-
How to receive data in web server sending from GPRS modem
by AshokSingh (1 replies)
-
Working with frames in c# .net
by pulak2008 (0 replies)
-
Time Out Problem
by lorrainepetty (1 replies)
Related podcasts
-
CodeCast Episode 4: State of .NET, IE8, ASP.NET MVC, and O'Reilly Media
CodeCast Episode 4: State of .NET, IE8, ASP.NET MVC, and O'Reilly MediaHosts Ken Levy and Markus Egger discuss the new State of .NET events, IE8, ASP.NET MVC, followed by an interview from PDC with two editors from O'Reilly Media. More on ASP.NET MVC can be found at http://asp.net/mvc. Interview...
Related jobs
-
Microsoft .Net Architect
in AMSTERDAM (€50K-€90K per annum) -
Microsoft Dynamics CRM Technical Consultant
in Netherlands (€50K-€90K per annum) -
.net developer
in Rijswijk (€2K-€4K per annum)
Events coming up
-
Dec
3
An afternoon of SQL Server Data Services and ASP.NET Dynamic Data
Bradford, United Kingdom
This event is in association with Black Marble. In the morning Black Marble will be presenting on Microsoft "Oslo": The Future of Enterprise Applications. To find out more about this please follow the link on the right.
You have successfully plundered the concepts contained in the asp.net forums without offering anything new, or really showing the reader why they would want to use them
Not to mention your wonderful coding practice of catch {}
What happens if the InitialiseSkin method makes calls to controls that don't exist on the skin? The skin is just not going to load, it won't show the user any helpful message. You're forgetting the skills of the average developer probably don't encompass debugging stack traces which don't get rethrown.
Nice one.
This thread is for discussions of Making skinned custom controls.