Cleaning up a redundant switch statement
I would create a list of usercontrols. Based on the amount of controls that need to be visible, traverse the list and set x controls to visible.

protected void DisplayUserControls(List&lt;UserControl&gt; controls, int numberOfControls)
{
    Contract.Requires( numberOfControls &gt;= 0 &amp;&amp; numberOfControls &lt;= controls.Count );

    for ( int i = 0; i &lt; numberOfControls; ++i )
    {
        controls[ i ].Visible = true;
    }
    for ( int i = numberofControls; i &lt; controls.Count; ++i )
    {
        controls[ i ].Visible = false;
    }
}


Or rather in one go:

protected void DisplayUserControls(List&lt;UserControl&gt; controls, int numberOfControls)
{
    Contract.Requires( numberOfControls &gt;= 0 &amp;&amp; numberOfControls &lt;= controls.Count );

    for ( int i = 0; i &lt; controls.Count; ++i )
    {
        controls[ i ].Visible = i &lt; numberOfControls;
    }
}