/// <summary> /// Raises the <see cref="TreeView.AfterSelect"/> event. /// </summary> /// <remarks> /// This handles the selection and unselection of nodes. /// </remarks> /// <param name="e">A <see cref="TreeViewEventArgs"/> describing the event arguments.</param> protected override void OnAfterSelect(TreeViewEventArgs e) { if (MultiSelect) { if (((ModifierKeys & Keys.Control) > 0)) { if (!SelectedNodes.Contains(e.Node)) { SelectedNodes.Add(e.Node); } else { SelectedNodes.Remove(e.Node); } } else { if (((ModifierKeys & Keys.Shift) > 0) && (m_tndFirst != null)) { SelectedNodes.Clear(); SelectedNodes.AddRange(FindPath(m_tndFirst, e.Node)); } else { if (SelectedNodes.Count > 0) { SelectedNodes.Clear(); } SelectedNodes.Add(e.Node); } } } base.OnAfterSelect(e); if (!MultiSelect) { if (!SelectedNodes.Contains(e.Node)) { SelectedNodes.Clear(); SelectedNodes.Add(e.Node); } } }