User Interface for .NET / User's Guide / Custom Controls / Panel Bar

Panel Bar
 Overview

 

The Nevron Panel Bar is a generic container control which provides an easy and convenient way for storing large amount of controls within bands. It mimics the famous Outlook navigation bar and provides extensible rendering and customization features. Using this control makes it very easy to organize the navigation part of your application.

 Bands

The NPanelBar control contains bands. The NBand is a separate control represented by a client area and a caption. It has two states - collapsed and expanded. Only one band in the collection may be in expanded state at a time. The user can toggle a band's state by clicking its caption. If the band is already expanded the click will perform no action. Programmatically, a band can be expanded by simply setting its state. Controls are added to a band via its ContainerPanel's Controls property.

 

The following example demonstrates how to create and use a NPanelBar control:

C#
Copy Code
NPanelBar bar = new NPanelBar();
bar.ImageList = this.imageList1;

//create two bands and add them to the bar
NBand band;
band = new NBand();
band.Caption = "My Band 1";
band.ImageIndex = 0;
band.TextAlign = HorizontalAlignment.Center;

//add some controls to the band, using its ContainerPanel property
TextBox textBox = new TextBox();
textBox.Text = "TextBox in a band";
band.ContainerPanel.Controls.Add(textBox);

bar.Bands.Add(band);

//hook to band events
bar.BandExpanding += new BandExpandingEventHandler(OnBandExpanding);
bar.BandExpanded += new BandEventHandler(OnBandExpanded);

...

private void OnBanExpanding(object sender, NBandCancelEventArgs args)
{
        NPanelBar bar = sender as NPanelBar;
        int bandIndex = bar.Bands.IndexOf(args.Band);
        if(bandIndex == 1)
                        args.Cancel = true;
}
private void OnBandExpanded(object sender, NBandEventArgs args)
{
        MessageBox.Show("Band expanded: " + args.Band.Caption);
}
Visual Basic
Copy Code
Dim bar As NPanelBar = New NPanelBar()
bar.ImageList = Me.imageList1

'create two bands and add them to the bar
Dim band As NBand 
band = New NBand()
band.Caption = "My Band 1"
band.ImageIndex = 0
band.TextAlign = HorizontalAlignment.Center

'add some controls to the band, using its ContainerPanel property
Dim textBox As TextBox = New TextBox()
textBox.Text = "TextBox in a band"
band.ContainerPanel.Controls.Add(textBox)

bar.Bands.Add(band)

'hook to band events
AddHandler BandExpanding, AddressOf OnBandExpanding
AddHandler BandExpanded, AddressOf OnBandExpanded

...

Private Sub OnBanExpanding(ByVal sender As Object, ByVal args As NBandCancelEventArgs) Handles bar.BandExpanding
    Dim bar As NPanelBar = TryCast(sender, NPanelBar)
    Dim bandIndex As Integer = bar.Bands.IndexOf(args.Band)
    If bandIndex = 1 Then
        args.Cancel = True
    End If
End Sub

Private Sub OnBandExpanded(ByVal sender As Object, ByVal args As NBandEventArgs) Handles bar.BandExpanded
    MessageBox.Show("Band expanded: " + args.Band.Caption)
End Sub
 Customizing Bands

 

You can control caption height, image index, text align and image size per band. Caption rendering depends on the parent Panel Bar palette and renderer.

 Remarks
You have access to the currently expanded band in the panel bar via its GetExpandedBand method.