不知道如何获得在C#代码中创建的单选按钮的价值

问题描述:

我正在尝试开发一个将元数据写入日志文件的程序。 我已经动态地(从xml文件)创建了一些单选按钮到表单中,但我不知道如何获取它们的值并将它们写入日志文件。创建单选按钮不知道如何获得在C#代码中创建的单选按钮的价值

代码:

foreach (XmlNode node in nodes) 
{ 
    count += 1; 
    if (count < 4) 
    { 
     int heightRadioButtons = 0; 
     WidthPanelsRow1 += 155; 
     Panel panel = new Panel(); 
     panel.Size = new Size(140, 200); 
     panel.Location = new Point(WidthPanelsRow1, heightPanelsRow1); 
     panel.BackColor = Color.LightGray; 

     Label lbl = new Label(); 
     lbl.Text = node["Titel"].InnerText; 
     lbl.Location = new Point(0, 0); 
     lbl.Font = font1; 
     panel.Controls.Add(lbl); 

     int counterLastRadioButton = 0; 
     XmlNodeList waardeNodes = node.SelectNodes("Waardes"); 
     foreach (XmlNode wNode in waardeNodes) 
     { 
      counterLastRadioButton += 1; 
      heightRadioButtons += 20; 
      RadioButton rb = new RadioButton(); 
      rb.Text = wNode.InnerText; 
      rb.Location = new Point(5, heightRadioButtons); 
      rb.Name = "rb" + count.ToString(); 
      if (waardeNodes.Count - 1 < counterLastRadioButton) 
      { 
        rb.Checked = true; 
      } 
      panel.Controls.Add(rb); 
     } 
     this.Controls.Add(panel); 
    } 
} 

在当前XML文件,9个单选按钮选项将被创建。我试图达到的是,对于每个9“标题”我用另一种方法得到选定的“Waardes”。

UPDATE

我设法这样做是为了得到1个单选按钮组的最后一个值:

for (int i = 1; i < radioButtonCounter; i++) 
{ 
    RadioButton rb = this.Controls.Find("rb"+i.ToString(), true).LastOrDefault() as RadioButton; 
    MessageBox.Show(rb.Text); 
} 

这只会给我一组的最后一个元素,我怎么能得到整个组,看看哪一个被检查?

由于

+0

一组中的所有单选按钮可被归结为一个单一的值来存储。所以你需要为每个单选按钮组存储一个值。事实上,每个组的行为就像一个单独的“ComboBox”或单选列表框。为了使它更容易,看看这个自定义[Windows Forms'RadioButtonList'](https://*.com/a/41355419/3110834)。 –

固定它,请参阅下面的溶液代码:

var panels = Controls.OfType<Panel>().ToList(); 
foreach (Panel p in panels) 
{ 
    var selectedRadioButton = p.Controls.OfType<RadioButton>().FirstOrDefault(rb => rb.Checked); 
    if (selectedRadioButton != null) 
    { 
      MessageBox.Show($"{p.Name}.{selectedRadioButton.Text}"); 
    } 
}