private MultiSelectTreeViewDoEvents _substituteTreeView(MultiSelectTreeViewDoEvents oldTreeView) { var newTreeView = _createTreeViewClone(oldTreeView); Controls.Add(newTreeView); return(newTreeView); }
public FastMultiSelectTreeViewsControl() { var treeView = new MultiSelectTreeViewDoEvents { Dock = DockStyle.Fill }; Controls.Add(treeView); Font = new Font("Arial", 9F); }
private void _switchTreeViews(MultiSelectTreeViewDoEvents oldTreeView, MultiSelectTreeViewDoEvents newTreeView) { if (oldTreeView != null && newTreeView != null) { Controls.SetChildIndex(oldTreeView, Controls.Count - 1); oldTreeView.Visible = false; _AsyncRemoveTreeView(oldTreeView); } }
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); }
//----------------------------------------------------------------------- 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); }
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); }
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) { } } }
//----------------------------------------------------------------------- private static void _AsyncRemoveTreeView(MultiSelectTreeViewDoEvents treeView) { var thread = new Thread(() => _RemoveTreeView(treeView)); thread.Start(); }