using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace GUI.GUIUtils { public class CheckGroup : LinkedList> where UICheckableType : Control, ICheckableUI { public void AddSafe(params UICheckableType[] checkable) { foreach (var it in checkable) { it.ResetClick(); it.Click += (sender, _) => CheckedObject = (UICheckableType)sender; _ = AddFirst(new WeakReference(it)); } } WeakReference checkedObjectReference; public UICheckableType CheckedObject { get { if (checkedObjectReference == null) return null; if (checkedObjectReference.TryGetTarget(out UICheckableType target)) return target; else checkedObjectReference = null; return null; } set { foreach (var it in this) if (it.TryGetTarget(out UICheckableType target)) target.IsChecked = target == value; } } } }