Как отменить связь всех кнопок Radio без GroupBox с помощью программного обеспечения - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть группа радиокнопок на форме, которые имеют форму матрицы (6x10).Я хочу нарисовать шаблон или отобразить любое число, отметив их (я хочу использовать его как матричный светодиодный индикатор).Я создаю радиокнопки с помощью программного обеспечения, чтобы я мог создать 60 радиокнопок, из которых 20 из них отмечены, 40 из них не отмечены и рисуют мой шаблон, но когда я меняю шаблон, я не могу нарисовать новый, потому что если я выберу один, другие станутбесконтрольно.Я никогда не нажимаю на радио кнопки, все работает над кодом.

Мне нужно проверить их отдельно, поэтому есть ли способ проверить одну радиокнопку, но избегать влияния других на то, чтобы они оставались в своем статусе?

так выглядит https://i.hizliresim.com/V9m0Vq.jpg https://i.hizliresim.com/lqmd7l.jpg

Когда я поворачиваю его, я хочу, чтобы все двигались к земле (внизу экрана), но только один из них падает.

1 Ответ

0 голосов
/ 19 апреля 2019

Вот быстрый пользовательский элемент управления "Dot", который вы можете включать / выключать с помощью свойства Checked ():

public partial class Dot : UserControl
{

    private bool _Checked = false;
    public bool Checked
    {
        get
        {
            return _Checked;
        }
        set
        {
            _Checked = value;
            this.Invalidate();
        }
    }

    public Dot()
    {
        InitializeComponent();
        this.DoubleBuffered = true;
        this.SizeChanged += Dot_SizeChanged;
    }

    private void Dot_SizeChanged(object sender, EventArgs e)
    {
        this.Invalidate();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);            
        int radius = (int)(Math.Min(this.ClientRectangle.Width, this.ClientRectangle.Height) / 2);
        if (radius > 0)
        {
            double outerCircle = 0.95;
            double innerCircle = 0.80;
            Rectangle rc = new Rectangle(new Point(0, 0), new Size(1, 1));
            rc.Inflate((int)(radius * outerCircle), (int)(radius * outerCircle));
            Point center = new Point(this.ClientRectangle.Width / 2, this.ClientRectangle.Height / 2);
            e.Graphics.TranslateTransform(center.X, center.Y);
            e.Graphics.DrawEllipse(Pens.Black, rc);
            if (this.Checked)
            {
                rc = new Rectangle(new Point(0, 0), new Size(1, 1));
                rc.Inflate((int)(radius * innerCircle), (int)(radius * innerCircle));
                e.Graphics.FillEllipse(Brushes.Black, rc);
            }
        }            
    }

}
...