/// <summary> /// Handles only single selection with keyboard. /// </summary> public void HandleKeyUp(int selectedIndex) { OnSelectionNotReady?.Invoke(this, EventArgs.Empty); Listbox.SelectedIndexChanged -= Listbox_SelectedIndexChanged; Listbox.SelectedIndex = selectedIndex; if (Listbox.SelectedIndex == -1) { OnSelectionReady?.Invoke(this, EventArgs.Empty); } else { _mouseDownIndex = selectedIndex; _mouseUpIndex = selectedIndex; SelectionOld = GetListboxItemsSelection(Listbox.Items.Count, Listbox.SelectedIndices); SelectedItemsOrdered?.Clear(); SelectedItemsOrdered = new List <string> { Listbox.SelectedItem.ToString() }; SelectedIndexesOrdered?.Clear(); SelectedIndexesOrdered = new List <int> { Listbox.SelectedIndex }; HandleSelectionChange(); OnSelectionReady?.Invoke(this, EventArgs.Empty); } Listbox.SelectedIndexChanged += Listbox_SelectedIndexChanged; }
public void Cancel(bool unsubscribeToEvents = true) { if (unsubscribeToEvents) { UnsubscribeToEvents(); Listbox = null; } SelectedIndexesOrdered?.Clear(); SelectedItemsOrdered?.Clear(); _mouseDownIndex = -1; _posY = -1; _ctrlPressed = false; _shiftPressed = false; _mouseUpIndex = -1; SelectionOld = null; _shiftSelectionStartIndex = -1; }
/// <summary> /// To be used when one selection is removed programmatically and not by mouse. /// </summary> private void Listbox_SelectedIndexChanged(object sender, EventArgs e) { SetPressedModifierKeys(); if (_ctrlPressed || _shiftPressed) { return; } var selectionCurrent = GetListboxItemsSelection(Listbox.Items.Count, Listbox.SelectedIndices); var selectionChangeType = DetermineSelectionChangeType(SelectionOld, selectionCurrent, ThisIndexHasBeenChangedProgrammatically, ThisIndexHasBeenChangedProgrammatically); SelectedIndexesOrdered = GetSelectedIndexesInOrder(selectionChangeType, selectionCurrent, SelectedIndexesOrdered, ThisIndexHasBeenChangedProgrammatically, ThisIndexHasBeenChangedProgrammatically, Listbox); if (SelectedItemsOrdered != null) { if (SelectedItemsOrdered.Count != 0) { SelectedItemsOrdered.RemoveAt(0); } } SelectionOld = GetListboxItemsSelection(Listbox.Items.Count, Listbox.SelectedIndices); }