using Components.Exceptions; 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 CheckedItems { get { List list = new List(); foreach(var item in checkedListBox.CheckedItems ) { list.Add(item.ToString()); } return list; } set { if (checkedListBox.Items.Contains(value)) { checkedListBox.SetItemCheckState(checkedListBox.Items.IndexOf(value), 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) { if (checkedListBox.CheckedItems.Count > MaxCheckedItemsCount) { if (typeOfMaxChecked == Types.Exception) { checkedListBox.SetItemChecked(e.Index, false); throw new MaxCheckedItemsCountExceedException("Превышено максимальное число выбранных элементов"); } else if (typeOfMaxChecked == Types.DeleteFirst) { checkedListBox.SetItemChecked(0, false); } } _onCheckedItemChangedEvent?.Invoke(sender, e); } } }