INFRALUTION VIRTUAL TREE RELEASE NOTES  
Version 3.15.2
Fixed memory leak where Style objects created by RowWidget.GetSelectedStyle and CellWidget.GetSelectedStyle would not be garbage collected because of an outstanding reference to them from StyleDelta event handler. 
Version 3.15.1
Changed RowWidget.DoDragDrop to explicitly allow DragDropEffects.Link (as this is not included in DragDropEffects.All).  
Fixed issue with cell editing being initiated during a drag operation even though SelectBeforeEdit is true.
Version 3.15.0
Changed Virtual Tree Help/Documentation to be standalone (CHM) rather than integrated with the Microsoft Visual Studio 2005/2008 help system.   This enables the Virtual Tree documentation to be viewed when using Visual Studio 2010 (which uses a different help system to VS2008) and also means Visual Studio is no longer required to view the help documentation.
Added Visual Studio 2010 Sample Projects
Added TextFormatFlags.NoPrefix option when using GDI TextRenderer to draw text (ie when CompatibleTextRendering is set to false).  This ensures that ampersands are treated the same as when CompatibleTextRendering is set to true.
Added RichTextBoxEx control to Infralution.Controls.   Added themed border support for RichTextBoxes
Added borderWidth parameter to Infralution.Controls.DrawingUtilities.DrawThemeBorder. 
Added PanelEx control to Infralution.Controls to handle RightToLeft layout 
Added BaseDialog form to Infralution.Controls.   
Changed VirtualTree.ProcessEscapeCmdKey and VirtualTree.ProcessEnterCmdKey to return false - so that they don't interfere with normal form accept and cancel button operations
Version 3.14.0
Added VirtualTree.MaintainStateOnSort property.  This allows you to control whether Virtual Tree attempts to maintain the current selection and expansion state of the tree when the user clicks on column header to sort the tree.   Maintaining selection and expansion state can be potentially expensive - especially for large data sources.   Setting this property to false can significantly improve sort performance - however the selection and expansion state will not be maintained.   The default value is set to true for backward compatibility.
Changed VirtualTree.OnSortColumnChanged method to display wait cursor while the tree is updated following a sort.
Added SynchronizeThreadCulture property  to Infralution.Controls.CultureManager class.  If set to true the Thread.CurrentCulture is automatically change to a matching culture when the CultureManager.ApplicationUICulture is changed.
Added SetThreadUICulture property  to Infralution.Controls.CultureManager class.  This allows the CurrentUICulture (and optionally CurrentCulture) of the current thread to be set to the current CultureManager.ApplicationUICulture value.   This can be useful when dealing with multithreaded applications.
Fixed issue with the new horizontal scrolling position being incorrect when changing selection (with context sensitive columns), if the horizontal scroll was already scrolled to the right.
Version 3.13.0
Added GetToolTipCellData event.  This allows you to set the tooltip for a cell on demand (when the user hovers over the cell) rather than when the cell is first displayed.   This can be useful when setting the tooltip is computationally expensive.
Added DropScrollTimerInterval and DropExpandTimerInterval properties to VirtualTree.   These provide a more convenient way of controlling the behaviour of the tree while performing drag and drop (previously to change these values you needed to create a custom RowWidget).
Added EnsureItemVisible method.   This is a convenience method that you can call instead of calling FindRow followed by Row.EnsureVisible.
Added FocusItem property.   This is a convenience method that you can call instead of calling FindRow followed by FocusRow.
Added Hidable property to Column class.  This allows you to control whether a column should appear in the  Show/Hide Columns independently of whether it is Movable.  Note that the default for this new property is true - so if you have existing columns with Movable set to false then you will need to set the Hidable property to false if you want to maintain the previous behaviour.
Added Tag property to Column class.   This allows the application to associate custom data with the column.
Added ShowPinIcon property to Column class.  This allows the pin icon to be optionally hidden for pinned columns.
Fixed RowWidget.UpdateData so that it does not call CellWidget.UpdateData if the column for the cell has been removed from the trees Column collection.
Added EmptyRowSpace value to RowDropLocation enumeration and changed PanelWidget drag and drop methods to call VirtualTree RowDropEffect and OnRowDrop methods.   This makes it easier to handle dropping data onto an empty tree.   Previously you had to create a custom PanelWidget to handle this.  Now you can just handle the GetRowDropEffect and RowDrop events (or override the RowDropEffect and OnRowDrop methods) as you would for handling dropping data onto Rows.
Fixed background of drag and drop cursor for column headers when using UseThemedHeaders is true.
Version 3.12.2
Fixed positioning of editor control when editing main column so that it doesn't use the full column width.   This fixes a bug introduced in version 3.12.
Fixed positioning of focus rectangle when using RightToLeft layout.
Version 3.12.1
Fixed issue with editors in SpanningRowWidget flickering when tree is resized.
Fixed bug introduced in Version 3.12.0 where the expansion indicator is not removed from LoadOnExpand rows when there are no child rows.
Version 3.12.0
Added CompatibleTextRendering property to Style.  If set to false (default) then GDI (via the TextRenderer API) is used.  If set to true then GDI+ (Graphics.DrawString) is used for rendering text.   The default value is set to true for backward compatibility.  
Setting CompatibleTextRendering to false fixes an issue where left aligned strings starting with the same text appear with different spacing depending on the text length.  
Fixed a GDI+ exception in Graphics.DrawString when the text displayed is very large (greater than 32K).  When using CompatibleTextRendering text is now truncated if it exceeds this size.
Restructured RowWidgets and CellWidgets so that the CellWidget for the main column paints the row icon and row connections.   This simplifies the layout logic and enables the background of the main column to be changed like that of any other column.   Previously only the background of the editable area of the cell would change if the background color of the main column was changed.
Changed PrefixWidget so that it is only displayed when the CellData.Editor or CellData.Value is non null.  This allows you to remove the Prefix Editor control for specific rows simply by handling the GetCellData event and setting the CellData.Editor to null.
Fixed issue with calling Expand on RootRow causing root row to be made visible when ShowRootRow is false.
Fixed issue with behaviour of right/left keyboard keys when VirtualTree.RightToLeft is set to Yes.  Behaviour of these keys is now swapped when RightToLeft is Yes.
Fixed issue where a user could, in certain circumstances using keyboard navigation, collapse the last displayed node in the tree resulting in an empty tree with no scrollbars
Version 3.11.2
Fixed issue with RTF rendering of large embedded images.
Fixed issue with using centre or far vertical alignment with RTF
Version 3.11.1
Fixed layout of UniversalEditBox when RightToLeft is set for types that don't have a drop down editor.
Fixed issue with EditOnKeyPress when Caps Lock is on that causes the first character typed to be the wrong case.
Fixed Virtual Tree Editor dropdown lists of properties and types so that they work correctly for C++ projects at design time.  Previously if you used Virtual Tree in a C++ project you could not use the dropdowns at design time to select properties or types.
Fixed DefaultValue attribute for AllowDrop property (now set to true).   This means that if you change this property to false the designer will now properly serialize the new value.
Fixed issue with DrawToBitmap not rendering headers in the correct location if UseThemedHeaders is set to true.
Fixed RTF rendering to handle embedded images (previously embedded images were not displayed).
Fixed potential memory leak in RTF rendering.
Changed CellEditor to set the template cell editor control Visible property to false.   This prevents the template cell editor controls being drawn if using Control.DrawToBitmap
Version 3.11.0
Added default Italian resources for context menus.
Added VirtualTree.EditOnDoubleClick property.  If set double clicking on an editable cell will initiate an edit.  For backward compatibility the default value is false
Changed VirtualTree.EditWidget property to be public to allow access to the active editor control.
Changed ShowColumns context menu to stay open when the user checks/unchecks a column.   This allows easy selection of multiple columns.
Improved performance of ShowColumns context menu so that it can now handle display of large numbers of columns without noticeable lag.
Changed ordering of Columns in ShowColumns context menu so that it reflects the display order (ie Pinned columns shown first).   
Added UseCurrencyManager property to VirtualListBox and VirtualDropDownList to allow binding of selection to the CurrencyManager to be turned off.  
Changed Column and Style classes to implement INotifyPropertyChanged interface (using PropertyChanged event instead of Changed event).   This provides more information to the client about the data that has changed.
Fixed issue with Infralution.Controls.CultureManager not translating resources for DataGridView columns.
Fixed issue with UniversalEditBox control not validating text when the edit button is clicked.   This meant that if a user changed the text then clicked the edit button the change was lost.
Fixed bug which meant that CellEditor.UsesLeftRightKeys was ignored.
Changed UniversalEditBox control to handle CultureManager.ApplicationUICultureChanged event to update displayed text automatically when the application culture changes.
Version 3.10.4
Fixed ArgumentException when calling VirtualTree.SelectAllRows with an empty tree.
Fixed issue with MruToolStripMenu if entries are added programmatically to the menu item (eg from another button) before the menu item is shown for the first time.
Fixed EditOnKeyPress issues.   Some special characters (^, %, etc) would not initiate editing correctly.
Fixed Style.DrawBorder so that it ajdusts for RightToLeft when drawing BorderSides.
Fixed alignment of CellEditors to adjust for RightToLeft.
Added DataView property to DataViewList class.  This makes it easier to perform custom filtering on child rows when using Data Set binding.
Added DisplayColumn and Format properties to DataLookupConverter.  Changed DataLookupEditor to use DataLookupConverter to convert lookup values to string.   These allow modification of the default lookup converter and editor behaviour by overriding the DataLookupConverter GetDisplayString method. 
Added protected CellWidgets property to RowWidget  classe to allow derived classes access to the current list of CellWidgets.
Version 3.10.3
Fixed expansion icons when RightToLeft is set so that they are mirrored.   This is particularly relevant when using the Vista StyleTemplate.
Fixed focus rectangle when using SelectionMode.Cell for scrollable columns so that it is properly scrolled under pinned columns.
Changed VirtualTree.StartEdit so that it only changes the row selection if the row containing the cell being edited is not already selected.  This enables the user to perform a range selection and start an edit with a single action (as was possible in earlier version of Virtual Tree).   
Fixed layout issue in UniversalEditBox which reserved space for drop down/edit buttons when not required.
Added default German resources for context menus.
Fixed possible delay (in some circumstances) while validating Virtual Tree license
Fixed issue with RichText formatting being lost if two adjacent cells have identical text
Fixed GDI handle leak when using RichText with different fonts for Rows. 
Changed sample projects that use JET database or Rich Text and other x86 specific features to build using x86 platform.   This ensures that the samples correctly on x64 operating systems under Win32 compatibility mode.
Version 3.10.2
Fixed issue with keyboard navigation between cells when adding and removing columns at runtime.
Fixed Working with Rows documentation.
Version 3.10.1
Fixed issue with ObjectRowBindings not binding correctly when running under Turkish locale.
Added extra checks for re-entrant code that indirectly calls UpdateRows from within GetChildren
Version 3.10.0
Added CellEditor.UsesLeftRightKeys and CellEditor.UsesUpDownKeys properties.   These properties allow you to control whether an editor control requires the arrow keys for internal keyboard actions or whether VirtualTree can use the keys for moving the focus when the editor control is active.  
Added separate PaintBackground method to make overriding the appearance easier.
Fixed issue with Row.EnsureVisible not working correctly with variable height rows when layout is suspended.
Added VirtualTree.TrimTooltip method.  This trims displayed tooltips so that they fit in the available screen bounds.  Previously very large tooltips could cause screen flickering issues.
Enabled use of Prefix columns in SpanningRows (previously this was not possible).
Fixed keyboard navigation when using a PrefixColumn.  It is now possible to navigate to editor controls in prefix columns using the keyboard.
Added exception handler in CellEditor.SetValue method.  This now traps exceptions when setting the value in the editor control (typically due to incorrect bindings) and depending on the value of VirtualTree.SuppressBindingExceptions reports them to the output window or rethrows them.
Fixed painting of focus indicator when using SelectionMode.Cell and SelectionMode.MainCellText.   Moved PaintFocusIndicator method from RowWidget to VirtualTree. 
Fixed issue with AbandonEdit (when you hit the escape key) not correctly hiding DisplayMode.OnEdit editor controls in some circumstances
Version 3.9.0
Added VirtualTree.ContextRow property.  This is now used to determine whether ContextSensitive columns should be displayed (instead of the FocusRow).  The ContextRow generally follows the FocusRow - however expanding a row will set the ContextRow to the first child of the expanded row.    This allows users to see context sensitive columns for child rows by simply expanding the parent row.  Previously you had to expand the parent row and then select a child row to see context sensitive columns for the child rows.
Added Infralution.Controls.CultureManager component.   This allows you to change the UICulture of an application, without having to close and recreate open forms.
Changed VirtualTree to update the HeaderContextMenu and ColumnCustomizeForm when the CultureManager.ApplicationUICulture is changed.
Fixed drag and drop of columns when using a derived Column class.
Fixed VirtualTree.ReadXml so that the position of new columns (within the Columns collection) is preserved.   Previously new columns would always be displayed after columns that had been saved and restored using WriteXml/ReadXml. 
Fixed VirtualDropDownList.UpdateData so that it updates the text displayed for the currently selected item.
Fixed CellData.GetToolTipText so it calls GetText if CellData.ToolTip is not set.  This means that displayed ToolTip will by default be the same as the displayed text.   
Fixed issue with ObjectRowBinding property dropdown lists including overridden properties twice.
Version 3.8.1
Fixed return type of GetContextMenuEventArgs.Row property (was object)
Optimized UpdateRowData(row) so that if the RowWidget has not been created for the given row then it does not cause the tree to be re-rendered
Fixed issue with using standard ComboBox as an Editor control with CellEditorDisplayMode set to Always (the ComboBox drop down list would dissappear the first time that the drop down button was clicked).
Fixed issue with styles not showing as modified when Style.BorderRadius is changed in the Visual Studio designer.
Added set accessors for Virtual Tree style properties.   This enables the complete style to be reset from the Visual Studio designer.
Fixed issue with ObjectRowBinding property dropdown lists not displaying inherited properties.
Version 3.8.0
Added support for rounded border Styles.   To use rounded borders set the Style.BorderStyle to Flat and the Style.BorderRadius to a non-zero value.  The Advanced Features and File Browser sample projects demonstrate using rounded borders for the RowSelectedStyle.
Added StyleTemplate property.   This allows you to quickly set an overall style for Virtual Tree without setting lots of individual style properties.  You can still override individual style properties as required.  The currently supported style templates are:
•	Classic - Windows 98/2000 Explorer appearance
•	ClassicXP - same as Classic but with XP Themed headers (if supported by the OS)
•	XP - Windows XP Explorer appearance
•	Vista - Windows Vista Explorer appearance 
Added Show/Hide Columns item to the header context menu.   This provide an alternative mechanism for selecting the active columns.   If you don't want to use this then you can create a custom header context menu and remove it. 
Changed the Customize Columns menu caption to "Column Chooser" to distinguish if from the new Show/Hide Columns menu.
Fixed issues with RightToLeft support (introduced by RowWidget layout logic changes in version 3.7.1).
Fixed issue with MruToolStripMenuItem which meant that the most recently used file settings may not be loaded in some circumstances.
Changed File Browser sample project styles to emulate Windows Explorer under Vista
Version 3.7.2
Modified SelectedRow property to also set the AnchorRow.  This means that if you select a row programmatically the multiple selections will work in the same way as if the user selected the row.
Fixed RowHeight so that it cannot be set to a value less than MinRowHeight.
Fixed issue with DisplayMode.Always CellEditors not being hidden correctly when a Context Sensitive column containing the editor is hidden.   This bug was introduced in V3.7.1 with the change to RowWidget.OnLayout logic.
Version 3.7.1
Reworked RowWidget.OnLayout logic to improve performance with large numbers of columns.
Version 3.7.0
Changed installer to add Visual Studio 2008 sample projects and handle installation of Virtual Tree items in VS2008 toolbox
Fixed issue with selected foreground color not being set correctly when using Rich Text combined with SelectionMode.MainCellText
Version 3.6.1
Fixed RowSelectedUnfocusedStyle default border color
Fixed hotspot location for drag and drop cursors.
Fixed drag and drop auto-horizontal scrolling when RightToLeft is set to Yes
Fixed drag and drop cursors to be right aligned when RightToLeft is set to Yes
Version 3.6.0
Optimized display logic for displaying very large numbers of columns.   CellData is now retrieved on demand as columns are made visible (by horizontal scrolling).  Note that when using AutoFitHeight rows CellData is retrieved for all columns in order to determine the required row height.
Added overloaded SetBestFitWidthAllColumns(startRow, endRow) and SetBestFitWidth(column, startRow, endRow) methods that set the column widths to fit the data in the displayed columns.   The existing methods set the column widths based on the currently visible rows.   These methods allow you to set optimal column widths for all (or some rows) in the tree.  While this is considerably more expensive for large trees, it can be useful for printing.
Added new CreateRow, CreateColumn, CreateRowData and CreateCellData methods to allow complete customization of Virtual Tree using derived classes for Row, Column, RowData and CellData 
Added VirtualTreePrintDocument.AdjustPageScale method.   This is called for each page and corrects the page scaling to ensure that text that fits for screen display also fits when printed.   Previously there could be small discrepancies between what was displayed on the screen and what was printed.
Changed RowSelectedStyle so that BorderWidth is not overridden (ie it inherits from RowStyle) by default.   This fixes an issue, when using Auto Fit height rows, which could cause row heights to change slightly when a row or cell is selected.
Updated Infralution.Common.ResourceEnumConverter to handle bitfield enumerations
Version 3.5.7
Fixed CellEditor to set RightToLeft property on editor control to same value as the CellWidget active style.   This was only an issue if the CellWidget style RightToLeft value was different that of VirtualTree.
Modified Row.CanDispose so that visible rows are not disposed of when UpdateRows is called.   This improves performance of updates.
Fixed PanelWidget.Printing property so that is true when printing and false otherwise.   Previously the logic was reversed as a result of an earlier change of name in Version 3.20.
Modifed PanelWidget to eliminate duplicated layout of CellWidgets when UpdateRows is called
Fixed issue with editors in PrefixColumn not displaying if the main column is pinned.     
Fixed potential issue with validation of Virtual Tree license key on some machines.
Version 3.5.6
Changed CellEditor to give editor controls their own unique BindingContext by default.   This eliminates the need to handle the CellEditor.InitializeControl event to do this when using DropDownList/ComboBox box controls (bound to a common data source) as editors.
Fixed issues with printing RowHeaders.
Version 3.5.5
Changed CellWidget.GetOptimalHeight to use the active style (instead of the unselected style) when calculating row height.   This means that you can set WordWrap to false for the unselected RowStyle and true for the RowSelectedStyle and the AutoFitHeight rows will automatically expand when selected to display the full text.
Added French resources
Version 3.5.4
Changed VirtualListBox and VirtualDropDownList to use the TypeConverter associated with a value (if available) to convert the value to a display string.  This makes the behaviour consistent with standard controls.
Added support for ITypedList to VirtualDropDownList control.  This allows VirtualDropDownList to be bound to DataTable, DataViews and other objects that support this interface in the same way that Virtual Tree can be.
Fixed issue with GDI+ exception when printing large numbers of rows with icons created on the fly (programmatically).
Fixed base BorderedControl class to give the same appearance when using Visual Styles as the standard controls
Adjusted layout of UniversalEditBox and VirtualDropDownList controls to align text with the drop down lists.
Version 3.5.3
Fixed bug in VirtualDropDownList that meant last item could not be selected using keyboard navigation
Version 3.5.2
Added public EditNextCell, EditPriorCell, EditNextCellInColumn and EditPriorCellInColumn methods to allow external control over edit traversal.
Added SelectNextRow and SelectPriorRow methods.  
Changed SelectNextCell and SelectPriorCell methods to be public
Removed redundant moveEdit parameter from protected MoveFocusRow method.
Added Control-Down and Control-Up key behaviour to move edit to the next/prior cell in the same column while editing
Fixed issue with EnsureColumnVisible method scrolling too far if the column is larger then the control width.
Fixed ObjectCellBinding.GetCellData so that it automatically sets the CellData.Error property if the bound object supports IDataErrorInfo
Fixed issue with Auto Generate of row bindings displaying an error message when the type selected from the drop down list is defined in the current project assembly.
Added support for ITypedList to VirtualListBox control.  This allows VirtualListBox to be bound to DataTable, DataViews and other objects that support this interface in the same way that Virtual Tree can be.
Fixed issue with customize columns window displaying incorrectly when there are a large number of columns
Version 3.5.1
Fixed BaseForm and MruToolStripMenuItem (in Medmont.Controls) so that settings are automatically upgraded when the application version changes.
Fixed CellWidget RightMouseDown behaviour in CellSelection mode so that the column is selected before the ContextMenu is displayed
Fixed runtime license check to handle case where no EntryAssembly is defined.
Fixed issue with printing empty trees when ShowRootRow is set to false (was incorrectly printing two pages)
Fixed issue with reusing VirtualTreePrintDocument multiple times (with different tree objects) 
Fixed issue with context sensitive columns not being correctly updated when focus is changed.
Fixed issue in Data Set Browser sample project causing an exception in some circumstances due to using DateEditor for Context Sensitive columns.
Fixed bug in Database Browser sample project when setting the photo for a vehicle record
Version 3.5.0
Added overloaded GetRows method that takes row indices.  This allows you to retrieve the rows between two indices.
Added SelectAllRows method.   This allows you to select all rows in the tree.
Added ExpandOnDoubleClick property.   This allows you to control whether the tree will expand/collapse rows when the user double clicks on them.
Added Infralution.Common.MessageBoxEx utilities and marked Infralution.Common.Translator as obsolete.  You should instead use VS2005 Properties/Resource mechanism together with the new MessageBoxEx utilities.  Changed Virtual Tree code to do this.
Added Infralution.Controls.BaseForm class.   Provides a base form class that saves its position and size to user settings.
Added Infralution.Common.ResourceEnumConverter class to support translation of enumeration values from resources. 
Fixed issue with Row.EnsureVisible not working correctly sometimes when using variable height rows.
Fixed EditOnKeyPress so that an edit is not initiated if the control or alt key is pressed.  This prevents edits being initiated when using short cut keys.
Changed customize columns window so it doesn't appear in the task bar
Fixed issue with validating event of the last editor control in a tree being called twice when using tab traversal.
Fixed issue with ObjectCellBinding setting the TypeEditor to null for enumeration properties - this meant that UniversalEditBox would not show the dropdown editor for enumeration values.
Fixed IndentOffset and IndentWidth properties so that changes are reflected at design time.
Fixed issue with drag selection mechanism incorrectly highlighting rows when double clicking to close a window in front of VirtualTree.
Version 3.4.0
Added Cell selection mode (SelectionMode.Cell).   In this mode the user can select one or more cells within a single column.   The selected cells are defined by the SelectedColumn and SelectedRows properties.
Added EditOnKeyPress property.  This enables the user to initiate editing of a cell by simply typing.   Typically you would use this in conjunction with SelectBeforeEdit to allow easy selection of multiple rows/cells while still allowing the user to initiate cell editing by simply typing.
Replaced RowWidget GetFirstEditableWidget, GetNextEditableWidget, GetPriorEditableWidget and GetLastEditableWidget methods with more general purpose GetFirstWidget, GetNextWidget, GetPriorWidget and GetLastWidget methods.
Added MaxAutoSizeWidth property to columns.  This allows you control the maximum size of a column when using AutoIncrease or AutoSize for the column AutoSizePolicy.  It also affects the maximum size of the column when the user uses the Best Fit options.
Changed row auto height fitting so that it respects the VirtualTree.MaxRowHeight property.  Previously rows with AutoFitHeight set to true could exceed the MaxRowHeight.
Fixed drag and drop and drag selection behaviour when SelectBeforeEdit is true so that dragging a selected row does not initiate a cell edit.
Added DragSensitivity property to WidgetControl base class.   Allows control over the number of pixels that the mouse must be moved before a drag is initiated.
Fixed Auto Sizing of columns when an error indicator is displayed in a cell.
Fixed issues in DataSetBrowser sample project when adding new customer rows.
Fixed issue with selection not being cleared when data source is changed.
Version 3.3.4
Fixed issue with focus indicator being incorrectly painted in some circumstances.
Version 3.3.3
Removed dependence of Infralution.RichText dll on VS2005 SP1 C Runtime libraries (CRT).  Version 3.3.0 required the SP1 libraries to be installed on the deployed machine.   This version will work with the CRT libraries shipped as part of .NET 2.0
Modified CellWidget class so that the Infralution.RichText dll is not required unless you actually are using RichText.
Added ResourceEnumConverter class to aid with localizing the displayed values for enums.
Fixed behaviour of CellData.GetText so that the default TypeDescriptor associated with the type is used to convert the CellData.Value to a string if the CellData.Format is null. 
Version 3.3.2
Modified UpdateRowData(row) to call ClearCachedRowBindings.  
Changed ObjectRowBinding handling of drag and drop to set the Parent property of the item being dropped to maintain consistency of hierarchy
Changed CellEditor to reset the Dock and Anchor properties of editor controls - previously if these we were inadvertantly set by a user they would cause strange layout behaviour.
Version 3.3.1
Added protected ClearCachedRowBindings method and changed UpdateRowData() to call this method.   This ensures that if the underlying data is changed that the RowBindings are recalculated.   
Version 3.3.0
Changed GetBindingForRow and GetBindingForItem methods to virtual to allow them to be overridden.
Fixed issue with UniversalEditBox.AutoSize property not working correctly when used as a VirtualTree editor.   The UniversalEditBox would always behave as if AutoSize was set to true.
Replaced SuppressErrorMessages property with SuppressBindingExceptions property.   This property allows the application to determine whether exceptions caught by the bindings while setting or getting cell values should be rethrown.   DisplayErrorMessage is always called to display details of the exception (by default to the output window).   Applications can override this method to display the messages to the end user.
Fixed Sort Ascending/Descending menu icons to be consistent with Microsoft standards
Added protected EditorLayoutSuspended method.  This is now called by VirtualTree during the first pass layout of widgets to prevent active editor controls being resized during this phase - reducing flicker.
Removed code that set CheckBox editor controls FlatStyle property to System.   This was required for .NET 1.1 to get XP Themed checkboxes - but is not required under .NET 2.0 and prevents use of custom painted checkboxes.
Fixed DataSet Browser sample project so that the sort column is restored correctly from saved settings
Version 3.2.1
Added CellEditor.EnsureVisibleOnFocus property.  This allows you to control whether Virtual Tree scrolls to ensure an editor control is fully visible when the editor gets focus.  Previously Virtual Tree always scrolled, if necessary, which caused issues for checkbox editors (if you clicked a checkbox at the bottom of the tree, in a row that was partially obscured, the tree would scroll and the checkbox would not change value).
Modified RowBinding.GetChildrenForRow to allow it to be called from within the RowBinding.GetChildren event handler.  Previously if you handled the RowBinding.GetChildren event you could not call RowBinding.GetChildrenForRow (to get the default children for the row) because it caused a recursive call stack.
Added AllowNullValues property to UniversalEditBox to allow null values to be used for value types (eg System.Int32)
Added UseDefaultTypeConverter and UseDefaultTypeEditor properties to CellData. These allow you to specify null CellData.TypeConverter and CellData.TypeEditor properties.   Previously  if the TypeConverter or TypeEditor was null the default converter or editor for the value was always used.
Fixed issue in CellData.GetText that could cause an unhandled exception if CellData.Format is set to null and no TypeConverter is defined.
Fixed display of UniversalEditBox modal edit button to show ellipsis.
Fixed GetChildPolicyEventArgs.Row property type (was returning an untyped object)
Fixed Data Set Browser C# sample (GetCellData and SetCellValue event handlers were not hooked up)
Fixed DataRowRowBinding class so that an error indicator is displayed in the tree row header when DataRow.RowError is set
Version 3.2.0
Added SpanningRow property to the RowBinding class.   This allows you to specify that the new SpanningRowWidget (see below) be used for rows associated with the binding.  
Added new SpanningRowWidget class.   This RowWidget displays a single CellWidget (for the MainColumn) which spans all displayed Columns.
Added BorderSide property to Style class.  Allows you to specify that only a single edge of a border be drawn - particularly useful for grouping titles using Spanning Rows.
Added StringTrimming property to Style class.   Allows you to control how text will be trimmed if it doesn't fit in the display area.
Removed DrawingUtilities.Ellipsize and DrawEllipsizedString functions.  The Style class now uses the StringFormat.Trimming property to control string trimming rather than calls to these methods.   This significantly improves performance when many strings are trimmed.
Added WidgetCreator delegates (eg RowWidgetCreator, CellWidgetCreator etc).   These allow you to use a custom widget class without having to derive a new class from VirtualTree to override the widget creation methods.
Added IndexOffset property.  This allows you to control the position of the icon/text independently of the IndentWidth.
Added new Advanced Features Sample project to demonstrate use of SpanningRows and other advanced features
Changed the name of PanelWidget ShowCellEditors property to Printing - as it is now used more generally.
Changed GetRows() to public and return typed list rather than IList.  This allows you to efficiently iterate through the displayed rows of the tree.
Fixed exception when changing desktop XP Theme to Windows Classic while Virtual Tree control is displayed
Fixed issue with VirtualTree.Dispose not detaching from DataSource ListChanged events
Fixed issue with VirtualTreePrintDocument.EndRowIndex not working correctly
Fixed issues with binding to generic types by specifying the ObjectRowBinding.TypeName
Fixed VirtualListBox formatting of list item text so that is not affected by the length of the text.
Fixed issue with incorrect design assemblies being referenced if a source code customer recompiles the solution.
Version 3.1.3
Fixed exception when right clicking on an empty area of the control when no context menu is defined.
Version 3.1.2
Fixed issue with incorrect drawing of XP Style borders for VirtualTree and VirtualListBox controls when the control is being dynamically resized. 
Version 3.1.1
Fixed behaviour of ObjectRowBindings.GetChildren.   Changes made in version 2.6.0 meant that children returned by the GetChildren event were no longer automatically sorted if the child collection is a TypedList.   This behaviour has been reverted to the previous behaviour.
Added code to Widget.OnPaint to handle possible re-entrant conditions causing an InvalidOperationException
Fixed issue with vertical scrollbar being displayed when not required in some circumstances
Version 3.1.0
Added CLSCompliant attribute to all assemblies.
Added CellEditor GetControlValue and SetControlValue events to provide programmatic control over getting and setting values in editor controls.
Added CellWidget parameter to CellEditorInitializeEventArgs.  This allows initialization based on the cell that the control will be used to edit.
Added GetParent and GetChildren events to RowBinding base class (previously these events were only defined for ObjectRowBindings).
Added FormatField property to ObjectCellBindings.   This allows you to specify a property of the bound object that provides the format string for displaying the cell value.  This can also be used to display a lookup value for a cell when the bound value is an ID or object reference.
Added ToolTipField property to ObjectCellBindings.   This allows you to specify a property of the bound object that provides the ToolTip string for the cell. 
Added ShowPrefixColumn property RowData and RowBinding classes.  This allows you to easily turn off the prefix column for specific rows. 
Fixed focus indicator paint issue which in some circumstances could cause the focus rectangle to be partially painted.
Fixed issue with DataViewList.Enumerator not resetting correctly.
Fixed display of ContextMenu when the tree is empty or right mouse selecting over the empty area at the bottom of the rows
Version 3.0.2
Fixed issue with AmbiguousMatchException being thrown when setting the ValueProperty of a CellEditor to a property of the control that has been overriden and hidden in the derived class using the new operator.
Fixed problem with AutoFitHeight rows that meant that sometimes the last row was partially or completely hidden and could not be scrolled to.
Added DesignAssembly class to VirtualTree and Controls assemblies.  This class defines the full version qualified name of the associated design assembly and means this no longer has to be changed throughout the code when the version is updated.
Version 3.0.1
Optimized DrawingUtilities.Ellipsize function so that it performs better when dealing with very long strings.   This improves the performance of Virtual Tree when displaying cells with very long strings.
Fixed issue with vertical scrollbar not displaying correctly when using AutoFitHeight rows.
Fixed DataRowRowBindings.GetAllowedDropLocations so that when binding to a recursive table the user is prevented from dropping a row on one of its descendants (causing the row and its descendants to dissappear from the hierarchy.
Fixed potential NullReference exception in DataRowRowBindings.GetChildrenForRow caused by the application adding a non-populated row via the DataView.
Version 3.0.0
Codebase ported to compile under Visual Studio 2005.  Previous versions of Virtual Tree were compiled under VS2003 to allow use with either .NET 1.1 or .NET 2.0  This, however, limited the ability to use new framework features introduced in .NET 2.0.  Version 3.0 can only be used with .NET 2.0.
Changed header and row context menus to use the new (in .NET 2.0) ContextMenuStrip. 
Added support for Rich Text Format (RTF) text.   This allows you to easily display cells containing text with multiple fonts and colors.
Added AlwaysDisplayToolTip property to CellData and CellBindings.   This allows you to specify whether the tooltip should always be displayed or only if the text does not fit in the cell bounds.   The default value is false.
Restructured assemblies to move design time classes into separate design assemblies.  This reduces the size of the DLL's that you need to redistribute with your product by about 100Kb.  It also removes the dependency of the redistributable DLL's on EnvDTE and VSLangProj which means you no longer have to exclude these in your Setup and Deployment projects.
Removed the Infralution.Controls.EnhancedMenuItem class.   The new .NET 2.0 MenuStrip classes provide the ability to display menu items with icons and should be used instead. 
Removed the Infralution.Controls.XpTheme class.   The new .NET 2.0 VisualStyleRenderer classes provide theme support and should be used instead.
Removed UseVisualStyles property from VirtualTree and other controls.  Controls are now rendered with (or without) Visual Styles based on the value of the new (in .NET 2.0) Application.RenderWithVisualStyles system property.   Added UseThemedHeaders property to Virtual Tree.  This allows you to control whether row and column headers should be drawn using XP Themes (Visual Styles).  These changes mean that you can now use custom styles for rendering the column and row headers while still having XP themed scrollbars and borders for the control.
Important Notes:  
The Version 3 installer does not upgrade and replace version 2 installations.  This allows you to have both versions installed side by side to support existing VS2003 projects using Version 2 while developing new projects in VS2005 using Version 3.  If you do not need this capability then we recommend uninstalling your current version of Virtual Tree before installing Version 3 to avoid possible confusion.
If you have defined custom header or row context menus then you will need to remove these from forms before upgrading to version 3.0.0 otherwise you will get errors when attempting to open the form in the designer.
Version 2.5.4
Changed the DataSet binding mechanism so that the data items the tree binds to are the underlying DataRows (instead of DataRowView objects).  This change is necessary to address issues arising from the changes made by Microsoft to the DataRowView class in .NET 2.0 which mean that the underlying DataRow for a DataRowView object may change when the view sort order is changed.   This meant that Virtual Tree was unable to properly preserve selection, row expansion and other row attributes when the view sort order changed.
This change will affect client application code that deals with selected items as DataRowView objects.   This will need to be recoded to use DataRow objects directly.  In general this makes application coding simpler.  See the DataSet Browser sample project for an example of the new usage.
Version 2.5.3
Fixed issue with scrollbar not updating correctly when using variable height rows
Added AutoAdjustTopRow method that is called from OnLayout to adjust the TopRow if required to ensure that the scrollbar is not displayed if the entire tree will fit in the available area.
Fixed type of GetColumnInContextEventArgs.Column property (previously it was untyped).
Fixed issue in DrawingUtilities.CreateCursor that caused a GDI+ exception when Dragging and Dropping repeatedly
Fixed miscellaneous issues to improve robustness of Drag and Drop.
Changed UpdateRows and UpdateRowData methods so that if DataUpdateSuspended is true they do not cause an immediate update of the tree.  Previously calling SuspendDataUpdate only prevented updates generated through the IBindingList.ListChanged event.  This change ensures that while data updates are suspended they cannot be inadvertantly triggered causing issues.
Added check to Row reindexing methods for Disposed rows.  This prevents NullReference exceptions occuring when client code causes a re-entrant data update while the tree is already in the process of being updated.
Added try/finally blocks around all internal calls to SuspendLayout/ResumeLayout and SuspendDataUpdate/ResumeDataUpdate.   This gives Virtual Tree a better chance of recovery should the client application raise unhandled exceptions which propagate back up through Virtual Tree methods.
Version 2.5.2
Added new overload of ResumeDataUpdate method that takes a boolean reloadChildren parameter.  
Fixed issue with deleting items when using DataSet binding under .NET 2.0.  Due to changes in the .NET 2.0 framework deleting a row from a data table could result in the following row incorrectly displaying no children.   This is resolved by bracketing the call to delete rows with SuspendDataUpdate and ResumeDataUpdate(true)
Version 2.5.1
Fixed issue with SuspendDataUpdate call in OnLayout not being matched with a corresponding ResumeDataLayout in some circumstances.   This could lead to Virtual Tree not responding to IBindingList ListChanged events in some circumstances.
Version 2.5.0
Added EnableRowCaching property (defaults to true).  This allows you to control the caching of rows by Virtual Tree.  If this is true then Virtual Tree will cache items retrieved from the Data Source and their associated child collections in a Row object.  If set to false then Virtual Tree will only keep those rows needed for the current state of the tree.   Typically this is the visible rows and any expanded or selected rows.  Using the default value of true will typically give much better scrolling performance at the expense of some memory usage.
Added support for RightToLeft layouts to Virtual Tree and Controls library (by simply setting the control RightToLeft property).   This allows you to change the layout of Virtual Tree to support RightToLeft languages such as Arabic and Hebrew.  RightToLeft layout can also be set for individual columns, cells or column headers using the Style.RightToLeft property.
Fixed drawing flicker issue when scrolling a Virtual Tree with pinned columns.  With large number of columns there was a visible delay between the drawing of the pinned columns and the scrollable columns.  This effect was particularly noticeable when moving a selection using the keyboard arrows.   All painting is now done on the main window control surface allowing it to be fully buffered and synchronized.
Fixed problem with Customize columns window not scrolling when the number of available columns is greater then can be displayed in the window
Fixed disabled appearance of VirtualDropDownList control when running under .NET 2.0 framework
Added support for restricted licenses which only work for the Infralution License Tracker application
Fixed issue with incorrect auto sizing of column widths when the vertical scroll bar is made invisible and the top row changed as a result of collapsing a node. 
Changed File Browser sample project to use a timer to provide more responsive selection.
Version 2.4.1
Added separate VS2005 samples.  You no longer have to convert the VS2003 samples.
Fixed issue with columns dragged from the customize window sometimes disappearing under .NET 2.0
Added Row.IsDescendant method to allow checking of row parentage
Fixed issues with drag and drop when using ObjectRowBindings.   Previously rows could be dragged onto a descendant causing them to disappear from the tree hierarchy.  Dropped rows are now automatically selected.   This fix required changes to the signature of the following protected methods in the ObjectRowBinding class: DropOnRow, DropBelowRow and DropAboveRow.
Fixed issues with localization.  Column captions and other properties were not being localized.
Added site licensing.  This allows customers issued with a site license key to distribute controls/components containing virtual tree without requiring their customers to have a virtual tree license.
Fixed issues with binding to DataTables through a BindingSource object in VS2005.  Sorting was not working in this case.
Fixed issue with SelectBeforeEdit mode.  Double clicks previous would initiate an edit on a cell even if had not previously been selected.
Fixed issue with DisplayMode.Always editors being displayed while dragging and dropping rows.
Fixed XpTheme methods to handle drawing in non-device units.  This allows XPTheme methods to be used when printing.
Version 2.4.0
Added ToolTipComponent property to Virtual Tree.  This allows to set the ToolTip object that Virtual Tree uses to display tool tips for cells and column headers.   This is useful if you want more control over the tool tip properties.
Added TrackVertScroll property to Virtual Tree.  This allows you to specify whether the displayed rows should be scrolled as the user moves the vertical scroll thumb.  The default value is true.
Added support for gradient filled backgrounds for visual elements (headers, rows and cells).   The Style class now has additional GradientColor and GradientMode properties.    If GradientColor is set to a non Empty color then the background of the element is drawn using a linear gradient from BackColor to GradientColor.  The GradientMode determines the direction of the gradient.
Add support for printing selected pages (specified by PrinterSettings.ToPage and PrinterSettings.FromPage)  to VirtualTreePrintDocument.   
Changed VirtualTreePrintDocument.CurrentPage to be one based (it was zero based) for compatibility with PrinterSettings.ToPage and PrinterSettings.FromPage.
Added support for printing headers and footers to VirtualTreePrintDocument.
Added support for the windows application key.  This now displays the context menu for the current focus row.
Fixed issue with initialization ordering when binding to a DataView created at design time.
Fixed issue with selecting a DataTable as a DataSource under Visual Studio 2005.
Version 2.3.2
Fixed NullReference exception in HeaderWidget when using VirtualTree in VS2005 on a new blank form.
Fixed problems with dropdown editors for object field names in VS2005 designer.  
Fixed keyboard actions that expand rows to autoscroll if necessary. 
Version 2.3.1 
Fixed issue with Auto Sizing of column widths and row heights for pinned panels. 
Fixed issue with licensing nag message being displayed when copying and pasting Virtual Tree (and other licensed controls) in the Visual Studio designer.
Version 2.3.0 
Added ToolTip property to Column class.  This allows you to specify the tooltip to display when the mouse is over a column.  If no ToolTip is specified but the caption is truncated then a tooltip will be displayed with the full caption by default.
Changed DrawingUtilities.Ellipsize method so that it only draws (and ellipsizes) the first line of multi-line text.   This means that if WordWrap is set to false for a given Style then only the first line of multiline text will be displayed.
Changed drawing of row connections and icons to use the RowStyle.VertAlignment
Fixed issue with WheelMouse events not causing immediate screen updates which could result in the RowHeader and Pinned column display to synchronizing with the main display when scrolling using the mouse wheel.
Changed installer to allow installation when released version of .NET 2.0 framework is installed only.
Fixed exception in DropDownButton intitializer when running under released version of .NET 2.0.
Fixed issue with paremeterless version of PerformLayout() not setting the AffectedControl to null under .NET 2.0 - this would cause Layout events to be ignored.
Fixed performance issue with DrawingUtilities.DrawIcon under .NET 2.0.  Previously this method used Graphics.DrawIcon, which under .NET 2.0 is about 100 times slower than under .NET 1.1 causing a significant impact on Virtual Tree scrolling performance.   
Fixed issue with initial positioning of the column customization form.
Fixed issue with interaction between AutoFitRowHeight rows and ColumnAutoSizePolicy.AutoSize which could result in the automatically calculated column width not being wide enough to fit the cell contents in some circumstances.
Fixed issues with licensing that prevented source code from being compiled under VS2005.
Version 2.2.1 
Fixed issue with printing when using CellEditorDisplayMode.Always editors (previously the editor controls were left hanging around).
Changed RowBinding.GetChildPolicy and RowBinding.GetContextMenu to virtual methods to allow them to be overriden in derived classses.
Version 2.2.0 
Added SelectionMode property.  This can be set to SelectionMode.MainCellText to select only the text of the main cell (instead of the whole row).   This provides a selection display similar to Windows Explorer.
Added AutoScrollOnExpand option (defaults to true).  If set when the user expands a row the children of the row are scrolled into view while keeping the parent row visible.
Added sample projects to illustrate simple Object Binding, Programmatic Binding, Custom Type Editors and Custom Widgets.
Fixed printing of rows with AutoFitRowHeight.
Fixed issue when scrolling AutoFitRowHeight rows vertically with an active editor and pinned columns.   If the active editor was scrolled out of view and then back into view then the heights of the rows on the pinned and scrollable panels could become inconsistent. 
Version 2.1.1 
Fixed issue with control not repainting when the parent form loses focus (to update the style of selected rows to RowSelectedUnfocusedStyle)
Fixed printing to use individual row heights (if rows have been individually sized).
Fixed "Key cannot be Null" exception that occurs if tabbing to Virtual Tree control that does not contain any rows (if EditOnKeyboardFocus is true).
Version 2.1.0 
Added SuspendDataUpdate, ResumeDataUpdate methods to allow client applications to temporarily suspend handling of IBindingList.ListChanged events.   This can improve performance when making a large number of changes to a data source (such as a DataTable) that does not provide any mechanism to suppress change notifications.
Added UpdateRowData(Row) overloaded method that allows data for a single row to be updated (instead of updating the data for all currently displayed rows).
Improved handling of IBindingList.ListChanged events where the ListChangedType is ItemChanged (ie a item within the list changed but not the actual list).  This now calls the new UpdateRowData(Row) method resulting in GetRowData and GetCellData only being called for the affected row.
Added RowExpand and RowCollapse events and corresponding OnRowExpand and OnRowCollapse methods.
Changed CompleteEdit and AbandonEdit to public methods to allow clients to call these to force the VirtualTree to complete or abandon an editing action.  This is useful before committing changes to a DataSet.
Changed handling of border drawing so that if you specify a RowStyle with a border the edge of the pinned panel will be bordered.  Previously if the BorderStyle was set to Adjust then the pinned panel border was not visible if the BorderWidth was 1.
Added RowSelectedUnfocusedStyle to VirtualTree.  This allows you to specify the style used for selected rows when the tree does not have focus.
Simplified use of selected styles.  The selected style (RowSelectedStyle or RowSelectedUnfocusedStyle)  is now applied after any other styles.   This means that any properties set in these styles will override those set in RowBindings or CellBindings.   The individual SelectedStyle properties have now been removed from RowData, CellData, Columns, RowBindings and CellBindings.   Typically this won't cause any issues because they are not generally used.  If, however, you have set these properties in the Forms designer or programmatically then you may need to manually edit the InitializeComponent method to manually remove the calls. 
Added seperate ProcessXCmdKey and ProcessEditXCmdKey methods which are called by ProcessNormalCmdKeys and ProcessEditCmdKeys to allow easier customization of particular command key actions.
Added keyboard actions for Home/End keys (move to top/bottom respectively), Space key (select/deselect) and refined the actions for Left/Right arrows to move selection if the row is already expanded or collapsed.
Changed DataLookupEditor (used in Dataset binding for lookup fields) so that if the DataColumn allows null values then a null value choice is included in the drop down list.
Changed OnLeave method of VirtualTree to call CompleteEdit.   This ensures that if VirtualTree loses focus DisplayMode.OnEdit editors are hidden.
Fixed display flicker issues when resizing Virtual Trees containing DisplayMode.Always cell editors in selected rows. 
Fixed display of focus rectangle when moving focus (without selection) using the Ctrl-Up or Ctrl-Down arrows.  Previously the focus row changed but the display was not repainted.
Fixed painting of the focus indicator so that the ends are properly displayed in all situations.
Fixed issue which caused corrupted painting of other controls on the same form when the VirtualTree control is docked with other controls.
Changes to Infralution.Controls Library
Fixed problem with using UniversalEditBox to edit lookup values for ADO.NET data sources.
Added new UniversalEditBox properties (UseDefaultEditor and UseDefaultConverter) to provide more control over the way in which UniversalEditBox determines the TypeConverter and Editor to use.
Fixed UniversalEditBox so that GotFocus event is raised when user uses the mouse to select it.
Fixed problem in UniversalEditBox that meant that when used as a Virtual Tree editor the Escape key did not cancel editing.
Added Value property to ProgressForm.
Version 2.0.4
Fixed CellEditor repaint issues when using CellEditorDisplayMode.Always editors in conjunction with AutoFitColumns
Fixed UniversalEditBox background paint issues when using in VirtualTree with alternating row background color.  Note this fix may affect the default background color of UniversalEditBoxes when used in standard forms.  You should check the appearance of any forms that use UniversalEditBox and reset the BackColor if necessary.
Fixed issues with UniversalEditBox editors sometimes becoming confused when using UniversalEditBox to edit several different types.
Fixed issue with pinning/unpinning columns containing CellEditorDisplayMode.Always editors.  Previously this could cause the editor to hang around incorrectly.
Fixed transparent corner when both Vertical and Horizontal Scrollbars are displayed.
Version 2.0.3
Fixed issue in UpdateChildrenNoReindex which could result in a "Collection was modified" exception in certain circumstances (if client code called by GetChildren directly or indirectly called UpdateRows). 
Version 2.0.2
Added row expand/collapse behaviour using numeric pad +/- keys and left/right arrows.
Fixed bug which meant SelectBeforeEdit property did not have any effect.
Fixed interaction between AutoFitHeight rows and AutoSize columns.  Previously if a column was set to AutoSize then the AutoFitHeight algorithm would calculate the height of the row based on the previous width of the column (not the new autosized width) resulting in the height being too large.
Changed UniversalEditBox calls to GetEditStyle to pass the TypeDescriptorContext. 
Version 2.0.1
Fixed issue with automatical horizontal scrolling when dragging and dropping column headers with pinned columns present. 
Fixed issue with AutoFitHeight not working correctly when child rows were expanded. 
Fixed bug in WidgetControl.OnClick that caused a NullReference exception if the user clicked on area with no widgets and then dragged over a widget before releasing.
Fixed issues with drag & drop cursors under Windows 98.  Windows 98 does not support large cursors and this was causing errors when creating cursors for drag and drop operations.   Drag and drop operations now use the default cursors when running under Windows 98.
Fixed EnhancedMenuItem background color under Windows 98 and Windows 2000.   The background color was previously incorrect for these operating systems.
Version 2.0.0
Added Column.Pinned property.  If a column is pinned it does not scroll - allowing you to define columns that act as fixed headers.
Added AllowUserPinnedColumns property.  This determines whether the end user can pin and unpin columns.  If set to true the user can pin/unpin columns by either drag and drop or using the right mouse context menu.
Added AutoFitColumns property.   If this is set to true the displayed columns are automatically sized to fit in the available width - thus eliminating the horizontal scrollbar.   The relative sizes of columns is determined by the Column.AutoFitWeight property
Added Height and AutoFitHeight and Resizable properties to RowData and RowBinding.  These allow you to specify the default height (in pixels) to use for an individual row (or type of row).  AutoFitHeight allows you to specify that Virtual Tree should automatically calculate the row height to fit the contents of the row.  Resizable allows you to specify whether the user can resize the row by dragging the row header divider.
Added AllowIndividualRowResize property.  If set to true (the default) the user can resize individual rows by dragging the row header divider.
Added automatic display of a tooltip containing the cell text when the cell text is truncated.
Added ToolTip property to CellData and CellBindings.   This allows you to set a tooltip that will always be displayed for a cell.  
Added EnableRowHeaderDragSelection property.  This allows you to specify whether dragging the mouse over the row header region will perform drag selection or standard drag and drop.  This property can be combined with the EnableDragSelection property to allow drag selection when dragging over the row headers and drag and drop over the remainder of the control (or vica versa).
Add double click behaviour to ColumnDividerWidgets.  Double clicking now performs a best fit for the column.
Added CellMouseDown, CellMouseUp, CellClick and CellDoubleClick events to provide a mechanism for adding simple mouse behaviour to cells.  Previously you had to derive a new CellWidget class to extend mouse behaviour for cells.
Added IconSize property to RowData and RowBinding classes.  This allows you to specify the icon size to use when an icon contains multiple image sizes.
Changed the Virtual Tree widget hierarchy to facilitate pinned columns.  Virtual Tree now uses two separate PanelWidgets to display the scrolling and pinned portions of the display.  Each PanelWidget manages a HeaderWidget (containing ColumnHeaderWidgets) and RowWidgets (which in turn contain RowHeaderWidgets and CellWidgets).  These changes mean that the signatures of the overridable methods used to create widgets have changed.
Restructured CellWidget painting code to make it more managable.  Added virtual methods to return the rectangles used to paint contents, preview and text.
Changed name of protected GetColumnLocation method to GetScrollableColumnOffset.
Added GetVisibleRow(index) method to provide optimised retrieval of currently visible rows.
Added call to UpdateColumnsContext in OnLayout.  This makes it easier to implement alternative algorithms for the display of context sensitive columns.  The default algorithm displays columns relevant to the current focus row.
Added BottomRow convenience property. 
Removed PaintFocusIndicator method.   Painting of the focus indicator is now done by the OnPaint method of the PanelWidget.
Changes to Infralution.Controls Library
Changed UniversalEditBox to implement the ITypeDescriptorContext interface.  This interface is now passed to TypeConverter and UITypeEditor calls.  Previously this a null value was passed for these parameters which could cause issues for user defined TypeConverters and UITypeEditors that checked this parameter.
Add OnClick method to Widget base class to allow distinction between double click and single click events without having to handle the OnMouseUp event.
Added CaptureWidget property to WidgetControl to better distinguish between the widget currently receiving mouse events and the widget that the mouse button was last clicked on (MouseDownWidget)
Version 1.6.1
Fixed behaviour when XP Themes are changed while application is running.   Control now repaints correctly using the new theme.  Also fixed the same issue in Infralution.Controls library controls.
Changed CellWidget.OnEditorGotFocus to "protected virtual" to allow derived CellWidget classes to override and handle this event.
Changed the sorting mechanism.   RowBindings no longer are responsible for handling OnSortColumnChanged (the RowBinding.SortColumnChanged method has been removed).  Instead OnSortColumnChanged now simply calls UpdateRows(reloadChildren => true) and it is left up to the RowBinding.GetChildrenForRow to return the children sorted based on the current SortColumn.  This is a more efficient mechanism and removes the reliance that the DataSet bindings had on synchronizing sorting via the DefaultView of a table.   The new sorting mechanism is also smarter about preserving your current location in the list of diplayed items.  If there is a currently selected item then it will keep that item visible.   This makes sorting of child items much more usable.
Changed DataRowCellBindings class to set the CellData TypeConverter and TypeEditor properties.   This means you can now use a UniversalEditBox to edit cells which have an initial DbNull value. 
Fixed issue with visibility of vertical scrollbar in some circumstances.   Previously if the scrollbar was not visible and you added items to the data source above the current top item then the scrollbar would be made visible even if the all items would have fitted in the available space.   In this case VirtualTree now adjusts the top item to display all of the items rather than displaying a scrollbar.
Fixed issue with adding new CellEditors in the VirtualTree editor that could result in a TargetInvocationError message being displayed.
Version 1.6.0
Changed RowBindings designers to enable selection of mulitple items.
Changed the Column, RowBindings and CellEditor designers so that when multiple items are selected the property grid displays the common properties.  This enables much quicker setting of multiple properties.
Added support for ITypedList data sources.   ObjectRowBindings now have a TypedListName that can be used to specify that the binding should be used for items belonging to the named typed list (if this is set you do not need to set the TypeName property of the ObjectRowBinding).  If the TypedListName property is set then the ObjectRowBindings and associated ObjectCellBindings use the properties supplied by the parent ITypedList object to display data. 
Auto Generate will now automatically generate columns and bindings using ITypedList information if the DataSource supports ITypedList.
Added protected GetRowBinding method that takes a Row parameter in addition to the item parameter.   This is required to support ITypedList data binding.   The public GetRowBinding(item) method now calls the protected method.  If you wish to programmatically control DataBinding you should either override the protected GetRowBinding(item, row) method or handle the GetBinding event.    
Added RowBinding.BindsTo method that takes a Row parameter in addition to the item parameter.   This is required to support ITypedList data binding.   By default this simply calls the RowBinding.BindsTo(item).
Changed VirtualTree so that columns and bindings are automatically generated when the DataSource is set at design time if there are not already RowBindings defined.   This makes initial configuration quicker and more intuitive for novice users.
Added UpdateDisplay button to RowBindings designer to allow you to update the design time tree representation after making changes to the row or cell bindings. 
Fixed ShowRootRow property so that it updates the display correctly at design time.
Added GetChildren and GetParent events to ObjectRowBinding class.  This makes it easier to use object row bindings where you need to programmatically set up relationships between items in the tree but can use object binding for everything else.  Previously you had to handle the GetChildren event from the VirtualTree control and handle all possible item types.
Changed name of RowBinding GetChildren and GetParent methods to GetChildrenForRow and GetParentForItem.  This was necessary to allow the addition of GetChildren and GetParent events and brings the naming convention for RowBindings into line with VirtualTree method naming.
Changed ADOBrowser sample to DatabaseBrowser sample and change it to use the new Infralution Virtual Data Objects Library
Changed ObjectCellBinding.SetValue to convert between related types if necessary ie if the editor returns a Decimal SetValue will now convert this if necessary to the correct numeric type for the object property.  Previously using a NumericUpDown control (which returns a decimal value) as an editor for a floating point property did not work correctly. 
Added workaround for bug in  .NET Framework 2.0.40607 (VS2005 Beta2) PerformLayout method which meant that tree would not update correctly when expand/collapse buttons were clicked.
Fixed installation of documentation shortcut and toolbox items under VS2005 Beta2
Changes to Infralution.Controls Library
Fixed behaviour of drop down button for UniversalEditBox and VirtualDropDownList.  If the dropdown list is displayed clicking on the drop down button now dismisses the list.
Fixed Controls library licensing so that when you add any control from the library to a form and install the license the whole library is automatically licensed.  Previously if using UniversalEditBox with drop down lists you also needed to include a license for the VirtualListBox control in your .licx file even though you weren't using it directly. 
Version 1.5.1
Fixed bug in VirtualTree.Print which meant that the last row of each page printed using VirtualTreePrintDocument was not printed.
Version 1.5.0
Changed VirtualTree editor to allow for selection of multiple columns and editors (using VirtualListBox).   This makes it easier to remove a number of columns or editors.
Made SortColumn property visible in the property pane and changed it so that the SortColumn may no be null.  Previously the if there was no SortColumn defined it defaulted to the first column.   This meant there was no way not to have a sort column.
Added UpdateRows(bool reloadChildren) method.  This provides an alternative to the UpdateRows() method that allows you to specify whether the lists of children should be reloaded for each row.  This is a convenience method as you could always obtain this functionality by calling RootRow.UpdateChildren().
Changed FocusRow to default to the TopRow if no focus row is set.  This means you no longer have to do this in application code to get context sensitive columns to display.   The focus indicator is now only displayed if the control has focus.
Fixed issues with binding to collections that fire IBindingList ListChanged events in a reentrant fashion (ie while VirtualTree is calling the list methods).  This does not apply to any of the standard framework collections - but may apply to user implemented collections for iterating over large datasources.
Added GetBinding event and GetBindingForItem method.  These allow clients to add an event handler that specifies the RowBinding to use to display a given item.    This can be useful where the RowBinding to use should be selected on the basis of a runtime condition (such as the value of the object) rather than simply the object type.
Changed ObjectRowBinding.BindTo method so that an object binding will bind to any item that implements the specified type.  Previously this method simply compared the TypeName property with the names of the item type.   If TypeName does not specify a resolvable type than the method reverts to binding this basis.
Fixed Tab navigations issues so that Tab/Shift can be used to navigate into and out of the control (within a parent control or form) as well as internally naviagating between editable cells.
Added EditFirstCellInFocusRow and EditLastCellInFocusRow methods to allow client applications to easily start editing the current focus row.
Added EditOnKeyboardFocus property.  This allows you to specify that the first/last visible cell should automatically be edited when focus is set to the VirtualTree control using the Tab or Shift Tab keys.  This is useful when using VirtualTree as a grid editor in conjunction with other controls on a form.
Added default behaviour for F2 function key to call EditFirstCellInFocusRow
Changes to Infralution.Controls Library
Added VirtualListBox and VirtualDropDownList controls to provide replacement controls for ListBox and ComboBox that provide true virtual loading of items from data source.   While you can configure VirtualTree to be a simple list box VirtualListBox provides a much simpler interface when all you require is to display a simple list.
Fixed issues with EnhancedMenuItem display of accelerators and separators.
Fixed ThemedButton display when focused or defaulted.
Fixed UniversalEditBox handling of shift tab navigation when used in a standard form.
Use of controls (including UniversalEditBox) from the Infralution.Controls library now requires a valid license key.   Existing VirtualTree customers can simply use their existing VirtualTree license key.  If you have an existing project that uses the UniversalEditBox you will need to add a line to your licenses.licx file as follows:
Infralution.Controls.UniversalEditBox, Infralution.Controls
Alternatively you can use VisualStudio designer to add a UniversalEditBox to any form in your project and VisualStudio will automatically add this for you.
Version 1.4.1
Fixed issues with validation of edit controls when using the enter key to complete editing.  This problem meant that changes made in a UniversalEditBox editor were not saved if the enter key was used to complete editing.
Changed UniversalEditBox to allow more control over error handling when converting the entered text to a typed value.
Added ability to add the CellEditor.InitializeControl event handler from the VirtualTree editor (by selecting the event tab in the property window).
Fixed issue with drag and drop.  If you clicked and dragged the empty space below the last row over the row area this would cause an exception.
Changed handling of binding errors.  Error messages are now written to the debug console (using Trace) rather than displaying MessageBoxes.  This makes the debugging bindings easier because you no longer have to dismiss a multitude of message boxes.  The SuppressErrorMessages property can still be used to suppress output - but since error message are much less intrusive it should generally be left set at the default value of false.
Version 1.4.0
Changed Drag and Drop mechanism to support dragging and dropping multiple rows.  If you are handling drag and drop programmatically then you will need to change your code to handle the fact that the drop data is now an array of Rows (instead of a single row).   If you are using Object or ADO.NET data binding to implement drag and drop then no change to client code is required.
Changed RowWidget left click behaviour to allow click and drag on an existing multiple selection without deselecting it.  
Changed RowWidget right click behaviour so that right click now selects the row if it was not selected and then displays the context menu (if any).  If the row is already selected then the selection is left unchanged and the context menu displayed.
Added RowBinding registration methods to allow derived RowBinding classes to be plugged in and used by the VirtualTree editor.
Changed RowBinding AutoGeneration methods to “protected virtual” to allow derived classes to customize auto-generation. 
Fixed designer drop down controls which display type names so that they only display types from assemblies referenced by the project and can now also display types defined in the project itself – provided it has been previously compiled.
Fixed bug in UniversalEditBox which caused an error when displaying drop down lists for types which have a TypeConverter that returns a null value in the list of standard values (in particular this applies to CultureInfo).
Changed ObjectCellBindings so that they set the TypeConverter and UITypeEditor to use in addition to setting the cell value.  This allows the UniversalEditBox to be used for selection when the cell value is null.
Removed ReflectionUtilities SetNamedValue and GetNamedValue methods (used by ObjectCellBindings).  ObjectCellBindings now use cached PropertyDescriptors to access property values, improving the performance when using ObjectBindings.
Fixed bug when changing the DataSource for a VirtualTree with an active editor.   Previously the editor would remain active until the user clicked on another cell.
Changed CellEditor so that properties of the template control are always copied when a new editor control is initialized.  Previously the properties were not copied if the user handled the InitializeControl event.
Enabled drag selection of rows when RowHeaders are displayed.  Can now drag select rows by dragging over the RowHeaders (as well as over the row)
Version 1.3.3
Added HorizontalDragScroll function to handle scrolling the tree horizontally when dragging and dropping (called from OnDragOver).
Fixed bug which meant that the SelectionChanging event was not fired if the keyboard was used to navigate.
Fixed display location of drag indicators when RowHeaders are shown.
Fixed issue with CellBinding styles which caused the SelectedStyle to be incorrect in some circumstances
Fixed problem in UpdateRowData which caused a NullReferenceException to be thrown if the CellEditor returned by GetCellData was changed programmatically ie if the CellEditor returned for a given row/column is dependant on some runtime state.
Fixed issue which caused corrupted painting of other controls on the same form if the VirtualTree control is anchored Left, Right, Top, Bottom and the form resized so that the Width or Height of the VirtualTree control become less than zero.
Added cross references to Task Based Help in the reference section.
Version 1.3.2
Removed redundant RefreshRowData method.  The intended purpose of this method was identical to the UpdateRowData method.  RefreshRowData had a bug which caused issues with editor controls being replicated.  Any client calls to RefreshRowData should be replaced with calls to UpdateRowData.
Fixed problem with UpdateRowData and UpdateRows not updating the data for the row that is currently being edited.  If the data in the row currently being edited is changed externally than the displayed data would not update correctly.
Fixed VirtualTree designer so that deleting the control from a form also deletes the associated columns, bindings and editors.  Copying the VirtualTree control from one form to another now also copies the associated columns, bindings and editors. 
Changed behaviour of CellEditors when the VirtualTree RowHeight is insufficient to fit the editing control.  Previously the editor control was not shown if there was insuffient width or height.  Because there was no other feedback it was sometimes difficult to ascertain why the editor control was not being displayed.   Editor controls are now displayed regardless of the row height - allowing the developer to see the layout problem and adjust the row height accordingly.
Version 1.3.1.1
Fixed problem in sample project references which prevented the VirtualTree Editor from being displayed when clicking on the Columns, RowBindings or Editor properties in the Visual Studio property pane.
Version 1.3.1
Fixed problem in column editor which caused the selected column to be reset each time a property was changed.  This was caused by a bug in the Windows.Forms.ListBox in MultiSelect mode.    To avoid the problem the list selection mode has been set back to single.
Version 1.3.0
Added auto generation of bindings and columns from data source
Added RowHeaders.  To display RowHeaders set ShowRowHeaders to true and set the RowHeaderWidth.
Added support for the IDataErrorInfo interface.  This allows errors to be flagged in the VirtualTree in the same ways as for the standard DataGrid using the DataRow RowError property and SetColumnError method.
Changed BindingListBase to make SuspendChangeNotification mechanism public and support re-entrant calls
Removed the error message if a binding is not found for a displayed item.   The tree now simply displays the item ToString value in the main column for items which have no associated binding.
Implemented the DisplayRectangle property to return the row display rectangle.  Changed RowClientWidth and RowClientHeight properties to DisplayWidth and DisplayHeight for consistency.
Fixed DataBinding problem where changes to data source properties were not reflected in the VirtualTree.
Added UpdateRowData method to provide a less expensive mechanism for refreshing the displayed data from the data source.
Version 1.2.0
Added AlphaBlend property to styles to allow rows and cells to be transparent
Added BackgroundImageMode property to provide support for tiled and stretched background images
Added CellStyles to Columns to make it easier to set the visual style for all cells in a given column.  This means you no longer have to set the column style on each CellBinding.   The Column.Style properties have been renamed to Column.HeaderStyle properties.
Added CellEditor property to Columns to allow the editor to be set for all cells in a given column.  This means you no longer have to set the Editor for  each CellBinding.   
Added EditorDisplayMode property to CellEditors that allows the editing control to either be always displayed or displayed when the user clicks on the cell.
Added UpdateValueEvent property to CellEditor to allow you to specify the control event that should trigger an update of the value in the underlying data source.  This is particularly useful for controls like CheckBoxes.
Added PrefixColumn support.   This allows CheckBoxes (or other controls) to be displayed within the main column immediately following the row icon.
Added FindRowByIndex method to allow location of rows based on the the position of the row within its parent row.
Changed CellEditors to support caching of editor controls.  CellWidgets use the CellEditor to create the editor controls which they manage.  The CellEditor class no longer directly manages a single editor control which means it does not need to be copied when creating new editor controls.   The CellEditor is now returned as part of the GetCellData event/method and the GetCellEditor event/method has been removed
Fixed FirstRowIndex, LastRowIndex, TopRowIndex and BottomRowIndex properties so that they are not visible in the designer or serialized.
Fixed designer category of WheelDelta property.
Fixed editing of floating point values using NumericUpDown controls (was causing an error when the value was changed).
Fixed horizontal scrollbar behaviour when using AutoSize columns.
Added auto horizontal scrolling when using tab or shift tab to move the edit focus.  Fixed tab issues.
Version 1.1.0
Added printing support.
Added MainColumn property to VirtualTree to allow applications to specify the column that should be used to display the tree connections and icons.
Changed Widget.Bounds set to call OnLayout.  Changed RowWidget and HeaderWidgets layout strategy - bounds are now set by VirtualTree rather than calculated by the widgets.
Version 1.0.2
Fixed problems with installation and running samples under VS2005 Beta.   Removed Help Collection merge from install (speeds up install greatly) - this now occurs the first time you open VisualStudio Help following installation
Version 1.0.1
Fixed potential problem during installation of VS IDE toolbar items caused by a pending update to the Visual Studio Help Collection causing a timeout 
Version 1.0.0
Initial Release