BreadCrumbs Control: Final Touches and Demo Project

After weeks of inactivity, I finally managed to get a demo project in place for the BreadCrumbs controls. You can download it here. The code includes few updates I have made since the last version. For the sake of flexibility, I have kept the basic control as simple as possible. In the demo, I have added few additional helper classes to provide the full functionality desired.

Extending the control is pretty simple too. For instance, to display the menus for each of the sub items in a list item, you handle the SubItemClicked event. The SubItemClickedEventArgs passed to you along with this event provides you with the row index, column index and the bottom-left corner pixel coordinates of the sub item. In the demo app, this event handled as;

void ListBox_SubItemClicked(object sender, BreadCrumbsListBox.SubItemClickedEventArgs e)    
{    
    ContextMenuStrip menu = null;    
    if (e.ColumnIndex == 1 && breadCrumbsList.ListBox.SelectedItem != null)    
        menu = GetTemplateMenu(breadCrumbsList.ListBox.SelectedIndex);    
    else    
        menu = _entityMenu;    
    menu.Show(breadCrumbsList, breadCrumbsList.PointToClient(e.BottomLeftCorner));    
}    

Here, the _entityMenu is a pre-constructed menu while as the “Template Menu” is reconstructed every time based on the selection.

Finding my way back to the Bread Crumbs Project

Due to a life changing experience that I ran into 2 weeks ago, I’ve been unable to continue on with my regular R&D work. I’ve got a small breather that might last the rest of the week and so figured I should try to finish up some of my projects: 1st off, I managed some work on the Bread Crumbs list control.

Here’s what the control looks right now:


Items support Hot-Tracking

Vista’s Windows Explorer style item selection

Sub-item selection

Sub-item Menu Support

Also added support for item editing:

Design

The controls design is pretty basic and the code not overly elegant at this stage.

Each row on the List Box is an instance of the BreadCrumbsItem class. The BreadCrumbsItem holds an array of strings with each element corresponding to  an individual column. The list box requires that you insert only items with equal number of columns. Otherwise an exception will be thrown.

I had trouble getting the scrollbars inherent in UserControl/ContainerControl to function properly. The OnScroll method wasn’t receiving the proper scroll value and was reverting to 0 all the time. So, I had to go with adding a vertical scroll bar manually. Anyway, check out the code (49.5 KB zipped folder).