using Components.Exceptions; using System.Windows.Forms; namespace Components { public enum Types : int { Exception = 0, DeleteFirst = 1, } public partial class UserControlCheckedList : UserControl { public int MaxCheckedItemsCount { get; set; } = 1; private Types typeOfMaxChecked = Types.DeleteFirst; private EventHandler _onCheckedItemChangedEvent; public void ChangeTypeOfMaxChecked(Types type) { typeOfMaxChecked = type; } public event EventHandler CheckedItemChanged { add { _onCheckedItemChangedEvent += value; } remove { _onCheckedItemChangedEvent -= value; } } public string CheckedItem { get { return checkedListBox.CheckedItems[0] as string ?? string.Empty; } set { if (checkedListBox.Items.Contains(value)) { checkedListBox.SetItemCheckState(checkedListBox.Items.IndexOf(value), CheckState.Checked); } } } public List CheckedItemss { get { List list = new List(); foreach (var item in checkedListBox.CheckedItems) { list.Add(item.ToString()); } return list; } set { foreach (var item in value) { if (checkedListBox.Items.Contains(item)) { checkedListBox.SetItemCheckState(checkedListBox.Items.IndexOf(item), CheckState.Checked); } } } } public UserControlCheckedList() { InitializeComponent(); } public void SetCheckedListBoxValues(List values) { ClearCheckedListBoxValues(); foreach (var item in values) { checkedListBox.Items.Add(item); } } public void ClearCheckedListBoxValues() { checkedListBox.Items.Clear(); } private void checkedListBox_ItemCheck(object sender, ItemCheckEventArgs e) { this.BeginInvoke((MethodInvoker)( () => { if (checkedListBox.CheckedItems.Count > MaxCheckedItemsCount) { if (typeOfMaxChecked == Types.Exception) { MessageBox.Show("Превышено максимальное число выбранных элементов"); checkedListBox.SetItemChecked(e.Index, false); } else if (typeOfMaxChecked == Types.DeleteFirst) { checkedListBox.SetItemCheckState(checkedListBox.Items.IndexOf(CheckedItem), CheckState.Unchecked); } } _onCheckedItemChangedEvent?.Invoke(sender, e); })); } } }