private void Listbox_MouseUp(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) { return; } ThisIndexHasBeenChangedProgrammatically = -1; if (Listbox.SelectedIndex == -1) //true when nothing is selected { } else if (!CheckIfThumbMouseButtonsHaveBeenPressed(e)) { if (Listbox.Items.Count > 0) { Listbox.MouseDown -= Listbox_MouseDown; _mouseUpIndex = Listbox.IndexFromPoint(Listbox.PointToClient(Cursor.Position)); HandleSelectionChange(); if (Listbox.SelectedIndex != -1) { OnSelectionReady?.Invoke(this, EventArgs.Empty); } } } Listbox.SelectedIndexChanged += Listbox_SelectedIndexChanged; }
/// <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; }