- Introduction
- Declaring a Simple Custom Control
- Extending Existing Web Controls
- Creating ViewState-Enabled Control Properties
- Creating a Composite Control
- Creating a Data-bound Control
- Creating a Templated Control
- Dynamically Adding Controls to a Web Form
- Using the Treeview IE Web Control
- Using the TabControl and PageView IE Web Controls
- Using the ToolBar IE Web Control
- Data-binding a TreeView Control
- Installing a Component in the Global Assembly Cache (GAC)
3.2. Extending Existing Web Controls
You want to extend the functionality of an existing Web Control.
Technique
This example shows how to extend the functionality of an existing controlthe Label controland turn it into a RainbowLabel. This is accomplished through the use of inheritanceRainbowLabel is a subclass of the System.Web.UI.WebControls.Label class.
The RainbowLabel class is as follows:
Imports System Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.ComponentModel Public Class RainbowLabel Inherits System.Web.UI.WebControls.Label Public Property EnableRainbowMode() As Boolean Get If ViewState("EnableRainbowMode") Is Nothing Then Return True Else Return Boolean.Parse(CStr(ViewState("EnableRainbowMode"))) End If End Get Set(ByVal Value As Boolean) ViewState("EnableRainbowMode") = Value End Set End Property Protected Overrides Sub Render(ByVal output As HtmlTextWriter) If EnableRainbowMode Then output.Write(ColorizeString([Text])) Else output.Write([Text]) End If End Sub 'Render Private Function ColorizeString(ByVal input As String) As String Dim output As New System.Text.StringBuilder(input.Length) Dim rand As Random = New Random(DateTime.Now.Millisecond) Dim i As Integer For i = 0 To input.Length - 1 Dim red As Integer = rand.Next(0, 255) Dim green As Integer = rand.Next(0, 255) Dim blue As Integer = rand.Next(0, 255) output.Append("<font color=""#") output.Append(Convert.ToString(red, 16)) output.Append(Convert.ToString(green, 16)) output.Append(Convert.ToString(blue, 16)) output.Append(""">") output.Append(input.Substring(i, 1)) output.Append("</font>") Next i Return output.ToString() End Function End Class
To use this control, you need to do the following:
<%@ Page language="VB" %> <%@ Register TagPrefix="AspNetCookbook" Namespace="AspNetCookbook" Assembly="AspNetCookbook" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html> <head> <title>03 Custom Controls - 02 Extending Existing Web Controls</title> </head> <body> <form id="Form1" method="post" runat="server"> <AspNetCookbook:RainbowLabel text="This is a rainbow colored test string" runat="server"/><br /> <AspNetCookbook:RainbowLabel EnableRainbowMode="false" text="This is a test string" runat="server"/> </form> </body> </html>
Comments
This control creates a rainbow-ish pattern in the text it displays. This is accomplished by encapsulating each character in <font> tags. The color on each character is randomized. Although perhaps not the most useful control, it does demonstrate how easy it is to extend the functionality of existing Web Controls. It is worth noting that the Label control should not be overlooked as a powerful control on which to buildthe validation controls all inherit from the simple Label control.
See Also
Section 3.1, "Declaring a Simple Custom Control"
Developing ASP.NET Server Controls and Components by Nikhil Kothari and Vandana Datye (Microsoft Press; ISBN 0735615829)