Ejemplo n.º 1
0
        private MultiSelectTreeViewDoEvents _substituteTreeView(MultiSelectTreeViewDoEvents oldTreeView)
        {
            var newTreeView = _createTreeViewClone(oldTreeView);

            Controls.Add(newTreeView);

            return(newTreeView);
        }
Ejemplo n.º 2
0
        public FastMultiSelectTreeViewsControl()
        {
            var treeView = new MultiSelectTreeViewDoEvents {
                Dock = DockStyle.Fill
            };

            Controls.Add(treeView);

            Font = new Font("Arial", 9F);
        }
Ejemplo n.º 3
0
        private void _switchTreeViews(MultiSelectTreeViewDoEvents oldTreeView, MultiSelectTreeViewDoEvents newTreeView)
        {
            if (oldTreeView != null && newTreeView != null)
            {
                Controls.SetChildIndex(oldTreeView, Controls.Count - 1);
                oldTreeView.Visible = false;

                _AsyncRemoveTreeView(oldTreeView);
            }
        }
Ejemplo n.º 4
0
        private MultiSelectTreeViewDoEvents _createTreeViewClone(MultiSelectTreeView treeView)
        {
            var treeViewClone = new MultiSelectTreeViewDoEvents
            {
                Name                    = treeView.Name,
                Location                = treeView.Location,
                Size                    = treeView.Size,
                TabIndex                = treeView.TabIndex,
                BackColor               = treeView.BackColor,
                Visible                 = treeView.Visible,
                Enabled                 = treeView.Enabled,
                ForeColor               = treeView.ForeColor,
                ContextMenuStrip        = treeView.ContextMenuStrip,
                Dock                    = treeView.Dock,
                ImageIndex              = treeView.ImageIndex,
                ImageList               = treeView.ImageList,
                SelectedImageIndex      = treeView.SelectedImageIndex,
                Font                    = treeView.Font,
                IsMultiSelectSameParent = treeView.IsMultiSelectSameParent,
                StateImageList          = treeView.StateImageList,
                ShowRootLines           = treeView.ShowRootLines,
                ShowPlusMinus           = treeView.ShowPlusMinus,
                ShowNodeToolTips        = treeView.ShowNodeToolTips,
                ShowLines               = treeView.ShowLines,
                Scrollable              = treeView.Scrollable,
                AutoScrollOffset        = treeView.AutoScrollOffset,
                PathSeparator           = treeView.PathSeparator,
                Margin                  = treeView.Margin,
                LineColor               = treeView.LineColor,
                LabelEdit               = treeView.LabelEdit,
                ItemHeight              = treeView.ItemHeight,
                HotTracking             = treeView.HotTracking,
                HideSelection           = treeView.HideSelection,
                FullRowSelect           = treeView.FullRowSelect,
                Cursor                  = treeView.Cursor,
                CheckBoxes              = treeView.CheckBoxes,
                BorderStyle             = treeView.BorderStyle,
                AllowDrop               = treeView.AllowDrop,
                AccessibleDescription   = treeView.AccessibleDescription,
                AccessibleName          = treeView.AccessibleName
            };

            _onCreateTreeView(treeViewClone, treeView);
            return(treeViewClone);
        }
Ejemplo n.º 5
0
        //-----------------------------------------------------------------------
        private MultiSelectTreeView _fastClearNodes(MultiSelectTreeViewDoEvents treeView)
        {
            var tmpTreeView = treeView;

            if (tmpTreeView != null)
            {
                if (_availableSubstitute(tmpTreeView.Nodes.Count))
                {
                    var newTreeView = _substituteTreeView(tmpTreeView);

                    _switchTreeViews(tmpTreeView, newTreeView);

                    return(newTreeView);
                }

                tmpTreeView.ClearSelectedNodes();
                tmpTreeView.Nodes.Clear();
            }

            return(tmpTreeView);
        }
Ejemplo n.º 6
0
        private TreeNode _fastRemoveNodes(MultiSelectTreeViewDoEvents treeView, int removeNodesCount, IEnumerable <TreeNode> removeNodes)
        {
            TreeNode nextNode = null;

            if (treeView.Nodes.Count == removeNodesCount)
            {
                _fastClearNodes(treeView);
            }
            else
            {
                var removeNodesIndexes  = _createSortNodeIndexs(removeNodes);
                var lastRemoveNodeIndex = removeNodesIndexes.Count == 0 ? -1 : removeNodesIndexes[0];
                nextNode = _getNextTreeNode((lastRemoveNodeIndex > -1 && lastRemoveNodeIndex < treeView.Nodes.Count) ? treeView.Nodes[lastRemoveNodeIndex] : null);

                if (_availableSubstitute(removeNodesCount))
                {
                    var nodes = _createTreeNodeArray(treeView, removeNodesIndexes, nextNode?.Index ?? -1, out nextNode);

                    var newTreeView = _substituteTreeView(treeView);
                    newTreeView.Nodes.AddRange(nodes);

                    _switchTreeViews(treeView, newTreeView);
                }
                else
                {
                    treeView.BeginUpdate();

                    foreach (var removeNodesIndex in removeNodesIndexes.Where(removeNodesIndex => (removeNodesIndex > -1) && (removeNodesIndex < treeView.Nodes.Count)))
                    {
                        treeView.Nodes.RemoveAt(removeNodesIndex);
                    }

                    treeView.EndUpdate();
                }
            }

            return(nextNode);
        }
Ejemplo n.º 7
0
        private static void _RemoveTreeView(MultiSelectTreeViewDoEvents treeView)
        {
            if (!treeView.IsDisposed)
            {
                var action = new Action(() =>
                {
                    treeView.Parent = null;
                    treeView.Size   = new Size(1, 1);

                    treeView.BeginUpdate();
                    while (treeView.Nodes.Count != 0)
                    {
                        treeView.RemoveAt(treeView.Nodes.Count - 1);
                    }
                    treeView.EndUpdate();

                    treeView.Dispose();

                    GC.Collect();
                });

                try
                {
                    if (treeView.InvokeRequired)
                    {
                        treeView.Invoke(() => action());
                    }
                    else
                    {
                        action();
                    }
                }
                catch (Exception)
                { }
            }
        }
Ejemplo n.º 8
0
        //-----------------------------------------------------------------------
        private static void _AsyncRemoveTreeView(MultiSelectTreeViewDoEvents treeView)
        {
            var thread = new Thread(() => _RemoveTreeView(treeView));

            thread.Start();
        }