internal void RemoveAtInternal(int index)
        {
//			if(TreeListView != null)
//				if(TreeListView.InvokeRequired)
//					throw(new Exception("Invoke required"));
            TreeListViewItem item = this[index];

            if (this[index].Visible && this.TreeListView != null)
            {
                item.Hide();
            }
            List.RemoveAt(index);
            item.SetParent(null);
            // Redraw parent if no more children
            if (Count == 0 && TreeListView != null && Parent != null)
            {
                Parent.Redraw();
            }
            // Redraw new last item
            if (Count > 0 && TreeListView != null && index == Count)
            {
                this[index - 1].Redraw();
            }
            OnItemRemoved(new TreeListViewEventArgs(item, TreeListViewAction.Unknown));
        }
        /// <summary>
        /// Adds an item in the collection and in the TreeListView
        /// </summary>
        /// <param name="item"></param>
        /// <returns>Index of the item in the collection</returns>
        public virtual int Add(TreeListViewItem item)
        {
//			if(TreeListView != null)
//				if(TreeListView.InvokeRequired)
//					throw(new Exception("Invoke required"));
            // Do not add the item if the collection owns a TreeListView recursively
            // and the item already owns a TreeListView
            if (TreeListView != null && item.ListView != null)
            {
                throw(new Exception("The Item is already in a TreeListView"));
            }
            int index = GetInsertCollectionIndex(item);

            if (index == -1)
            {
                return(-1);
            }
            if (Parent != null)
            {
                item.SetParent(Parent);
            }
            item.Items.Comparer = this.Comparer;
            int treelistviewindex = GetInsertTreeListViewIndex(item, index);

            // Insert in the ListView
            if (treelistviewindex > -1)
            {
                ListView listview = (ListView)TreeListView;
                listview.Items.Insert(treelistviewindex, (ListViewItem)item);
                if (item.IsExpanded)
                {
                    item.Expand();
                }
                item.SetIndentation();
            }
            // Insert in this collection
            if (index > -1)
            {
                List.Insert(index, item);
            }
            if (index > -1)
            {
                OnItemAdded(new TreeListViewEventArgs(item, TreeListViewAction.Unknown));
            }
            if (Count == 1 && TreeListView != null && Parent != null)
            {
                if (Parent.Visible)
                {
                    Parent.Redraw();
                }
            }
            return(index);
        }