/// <summary>
        /// 
        /// </summary>
        /// <param name="e"></param>
        protected override void OnItemDrag(ItemDragEventArgs e)
        {
            _selectedNode = (TreeNode) e.Item;

            // Call dragstart event
            if (DragStart != null)
            {
                DragItemEventArgs ea = new DragItemEventArgs();
                ea.Node = _selectedNode;

                DragStart(this, ea);
            }
            // Change any previous node back
            if (_previousNode != null)
            {
                _previousNode.BackColor = BackColor;
                _previousNode.ForeColor = ForeColor;
            }

            // Move the form with the icon/label on it
            // A better width measurement algo for the form is needed here

            int width = Width = _selectedNode.Text.Length*(int) _formDrag.labelText.Font.Size;
            if (_selectedNode.Text.Length < 5)
                width += 20;

            _formDrag.Size = new Size(width, _formDrag.Height);

            _formDrag.labelText.Size = new Size(width, _formDrag.labelText.Size.Height);
            _formDrag.labelText.Text = _selectedNode.Text;

            // Start drag drop
            DoDragDrop(e.Item, _dragMode);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="e"></param>
        protected override void OnKeyUp(KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                if (_selectedNode != null)
                {
                    SelectedNode = _selectedNode;
                }

                if (_previousNode != null)
                {
                    _previousNode.BackColor = BackColor;
                    _previousNode.ForeColor = ForeColor;
                }

                Cursor = Cursors.Default;
                _formDrag.Visible = false;

                // Call cancel event
                if (DragCancel != null)
                {
                    DragItemEventArgs ea = new DragItemEventArgs();
                    ea.Node = _selectedNode;

                    DragCancel(this, ea);
                }
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="e"></param>
        protected override void OnDragLeave(EventArgs e)
        {
            if (_selectedNode != null)
            {
                SelectedNode = _selectedNode;
            }

            if (_previousNode != null)
            {
                _previousNode.BackColor = _dragOverNodeBackColor;
                _previousNode.ForeColor = _dragOverNodeForeColor;
            }

            _formDrag.Visible = false;
            Cursor = Cursors.Default;

            // Call cancel event
            if (DragCancel != null)
            {
                DragItemEventArgs ea = new DragItemEventArgs();
                ea.Node = _selectedNode;

                DragCancel(this, ea);
            }
        }