使用动态创建的单选按钮,检查C#中选中了哪个单选按钮

时间:2020-11-10 18:29:00

标签: c# visual-studio radio-button

我找不到关于此问题的任何解决方案或提示。此代码后描述的问题。

我必须为在特定路径上找到的每个文件夹创建一个图片框和单选按钮:

        {
            InitializeComponent();
            string pathtocircuits = "../../tracks";
            string[] allfiles = Directory.GetDirectories(pathtocircuits, "*.*", SearchOption.TopDirectoryOnly);
            int imgx = 387;
            int imgy = 153;
            int radx = 428; 
            int rady = 259;
            String track = "";
            String pici = "";
            String pic = "pictureBox";
            String rad = "radiobutton";
            String radr = "";
            String picr = "";
            
            foreach (String file in allfiles)
            {   
                track = Path.GetFileName(file);
                pici = "../../tracks/" + track + "/p_" + track + ".png";
                picr = pic + element.ToString();
                radr = rad + element.ToString(); 
                PictureBox pb = new PictureBox();
                pb.Location = new System.Drawing.Point(imgx, imgy); ;
                pb.Image = Image.FromFile(pici);
                pb.Width = 100;
                pb.Height = 100;
                pb.SizeMode = PictureBoxSizeMode.StretchImage;
                pb.Name = picr;
                Controls.Add(pb);

                RadioButton rdo = new RadioButton();
                rdo.Name = radr;
                rdo.Text = "";
                rdo.Tag = track;
                rdo.Location = new Point(radx, rady);
                this.Controls.Add(rdo);
                

                element += 1;
                imgx += 110;
                radx += 110;
            }
            
        }

通过这一部分,我可以创建所需的元素(它可以工作)。

我的问题是当我按一个按钮到达Form2时。如何检查选中的单选按钮并将其Tag值存储在字符串中?

for(int i = 0; i<element; i++)
            {
                if( ??? .Checked == true )
                {
                     globalstring = ??? .Tag;
                }
            }

如果我尝试使用创建的单选按钮的名称而不是???它给我一个像'element ???的错误没有Checked或Tag属性”

3 个答案:

答案 0 :(得分:0)

在下面添加方法

添加到For循环:rdo.CheckedChanged + = new EventHandler(radioButton_CheckedChanged);

       private void radioButton_CheckedChanged(object sender, EventArgs e)
        {
            RadioButton button = sender as RadioButton;

            string name = button.Text;

        }

答案 1 :(得分:0)

RadioButtons和其他任何控件都存储在其容器的Controls集合中。如果将它们直接添加到表单中,则可以使用以下代码检索它们。

protected void Button1_Click(object sender, EventArgs e)
{
    var radio = this.Controls.OfType<RadioButton>().FirstOrDefault(x => x.Checked);
    if(radio != null)
    {
        string tag = radio.Tag.ToString();
        .....
        // Form2 = new Form2(tag);

    }
}

答案 2 :(得分:0)

默认情况下,单选按钮被添加到同一组中,因此您可以按照以下步骤获取选中的单选按钮。

List<RadioButton> radioButtons = this.Controls.OfType<RadioButton>().ToList();
RadioButton rb = radioButtons
        .Where(r => r.Checked) 
        .Single();
string tag = rb.Tag.ToString();