using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Volian.Controls.Library { //Class to handle bug in Windows WinForms ListBox // that autoselects first item when no items are selected public partial class ListBoxMulti : ListBox { public ListBoxMulti() { Visible = true; SelectionMode = SelectionMode.MultiSimple; SelectedIndexChanged += lb_SelectedIndexChanged; Disposed += ListBoxMulti_Disposed; } //singleselectedindex // will help to fix bug in Winforms ListBox // that autoselects first item when no items are selected // -1 = multi or set to this after 1st initialization // if this = 0 and only 1 item selected, // that means item was autoselected, so clear all items. public int singleselectedindex { get; set; } private void lb_SelectedIndexChanged(object sender, EventArgs e) { ListBoxMulti tmp = (ListBoxMulti)sender; if (tmp.SelectedItems.Count == 1 && tmp.singleselectedindex == 0) { tmp.ClearSelected(); } else if (tmp.SelectedItems.Count == 1) tmp.singleselectedindex = tmp.SelectedIndex; else tmp.singleselectedindex = -1; } //remove event when get rid of object private void ListBoxMulti_Disposed(object sender, EventArgs e) { SelectedIndexChanged -= lb_SelectedIndexChanged; } } }