custom user control design

Posted on


I’ve built a custom control that generates a tab style navigation. Each page might have different tabs to display, the aim was to modularise it so I can make global changes to all the tabs.


<%@ Control Language="C#" AutoEventWireup="true" CodeFile="TabMenu.ascx.cs" Inherits="TabMenu" %>

<asp:Panel runat="server" ID="TabMenuWrapper" CssClass="tabWrapper">



using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;

public partial class TabMenu : System.Web.UI.UserControl
    public string TabGroup { get; set; }    // The tab group this control belongs to
    public int SelectedTab { get; set; }    // Index of selected tab

    protected void Page_Load(object sender, EventArgs e)
        ArrayList tabCollection = new ArrayList();
        MenuTab myTab;

        // Artorking tab group
        if (this.TabGroup.ToLower() == "artwork")
            myTab = new MenuTab() { linkURL = "artworkHome.aspx", linkText = "First!" };

            myTab = new MenuTab() { linkURL = "artworkHome.aspx", linkText = "Second!" };

            myTab = new MenuTab() { linkURL = "artworkHome.aspx", linkText = "3rd!" };

            myTab = new MenuTab() { linkURL = "artworkHome.aspx", linkText = "Fourth!" };

        // Add tabs to the page
        for (int i = 0; i < tabCollection.Count; i++)
            MenuTab thisTab = ((MenuTab)(tabCollection[i]));

            if (i == this.SelectedTab)
                thisTab.tabPanel.CssClass = "tab tabSelected";

        TabMenuWrapper.Controls.Add(new Panel(){CssClass = "clear"});


// A menu tab
public class MenuTab
    public string linkURL;
    public string linkText;
    public HyperLink tabLink;
    public Panel tabPanel;

    // Create internal controls
    public void CreateTab()
        this.tabLink = new HyperLink() { NavigateUrl = this.linkURL, Text = this.linkText };
        this.tabPanel = new Panel() { CssClass = "tab" };

Used as follows:

<CrystalControls:TabMenu runat="server" ID="TopMenu" TabGroup="Artwork" SelectedTab="1" />

And renders like:

<div class="tab">

  <a href="Controls/artworkHome.aspx">First!</a>

 </div><div class="tab tabSelected">

  <a href="Controls/artworkHome.aspx">Second!</a>

 </div><div class="tab">

  <a href="Controls/artworkHome.aspx">3rd!</a>

 </div><div class="tab">

  <a href="Controls/artworkHome.aspx">Fourth!</a>

 </div><div class="clear">



Is this a good design?


It might be better to render the control as an unordered list. This is more semantically correct and normal practice for menu-type controls (which tabs are, if you think about it).

Yes the design looks good but it would be really better if you could replace that ArrayList with a Generic Collection.


  • Open a Blank Default.aspx page from visual studio 2005.
  • Go to the solution explorer and right click on to the Default.aspx and then click on the Add New Item.
  • After that you have to select the Web User Control.ascx file from add new item dialog box.
  • That page will be the same like as default asp page draw your user control on that page.
  • Code on the User Control.ascx page:

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
    <table style="width: 330px">
        <td style="height: 148px" align="center">
          <asp:Label ID="Label1" runat="server" Text="Thanks To awadh Sir" Font-Bold="True" Font-Size="XX-Large" ForeColor="Red" Visible="False"></asp:Label>
        <td style="height: 55px" align="center">
          <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

For more details please check out this link…


Leave a Reply

Your email address will not be published. Required fields are marked *