如何通过软件取消链接所有不带GroupBox的单选按钮

时间:2019-04-19 18:31:59

标签: c# radio-button unlink

我在表单上有一组单选按钮,它们的形状像矩阵(6x10)。我想通过检查它们来绘制图案或显示任何数字(我想像点阵led一样使用它)。我通过软件创建单选按钮,因此我可以创建60个单选按钮,其中的20个被选中,其中40个未被选中,然后绘制我的图案,但是当我更改图案时,我无法绘制新的单选按钮,因为如果我选中一个,其他则变成未经检查。 我从不单击单选按钮,所有代码均有效。

我需要分别检查它们,所以有什么方法可以检查一个单选按钮,但要避免其他按钮从此生效并让它们保持其状态?

这是它的样子 https://i.hizliresim.com/V9m0Vq.jpg https://i.hizliresim.com/lqmd7l.jpg

当我旋转它时,我希望所有人都向地面移动(屏幕底部) 但只有其中一个跌倒了。

1 个答案:

答案 0 :(得分:0)

这是一个快速的“点”用户控件,您可以使用其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);
            }
        }            
    }

}