private void OnTimerTick(object sender, EventArgs e)
        {
            if (_index == HCylLayouts.Count)
            {
                timer.Stop();
                if (Controls.Count > 0)
                {
                    var            bt     = Controls[0] as Button;
                    HCylLayoutItem btItem = bt.Tag as HCylLayoutItem;
                    btItem.Selected = true;
                    OnLayoutSelected(bt, null);
                }
                RefreshFinished?.Invoke(this, null);
                return;
            }
            bool selected = (0 == Controls.Count) ? FirstLayoutSelected : false;
            var  layout   = HCylLayouts[_index];

            // create pattern and add to panel
            var btn = new Button
            {
                Image    = TryGeneratePatternImage(HCylLayouts[_index], szButtons, selected),
                Location = new Point(_x, _y) + (Size)AutoScrollPosition,
                Size     = new Size(szButtons.Width, szButtons.Height),
                Tag      = new HCylLayoutItem(layout, selected)
            };

            btn.Click += OnLayoutSelected;
            Controls.Add(btn);
            // give button a tooltip
            tooltip.SetToolTip(btn, layout.Tooltip);
            // adjust i, x and y for next image
            AdjustXY(ref _x, ref _y);
            ++_index;
        }
        private void OnLayoutSelected(object sender, EventArgs e)
        {
            Button bnSender = sender as Button;

            foreach (var ctrl in Controls)
            {
                if (ctrl is Button bt && bt != bnSender)
                {
                    if (bt.Tag is HCylLayoutItem btItem && btItem.Selected)
                    {
                        btItem.Selected = false;
                        bt.Image        = TryGeneratePatternImage(btItem.Layout, szButtons, btItem.Selected);
                    }
                }
            }
            // ***
            HCylLayoutItem lItem    = bnSender.Tag as HCylLayoutItem;
            bool           selected = true;

            bnSender.Image = TryGeneratePatternImage(lItem.Layout, szButtons, selected);
            bnSender.Tag   = new HCylLayoutItem(lItem.Layout, selected);
            LayoutSelected?.Invoke(this, e);
        }