Home > Articles > Programming > ASP .NET

  • Print
  • + Share This
This chapter is from the book

This chapter is from the book

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 control—the Label control—and turn it into a RainbowLabel. This is accomplished through the use of inheritance—RainbowLabel 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 build—the 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)

  • + Share This
  • 🔖 Save To Your Account