2017-10-16 5 views
-2

Ich versuche, ein Programm zu entwickeln, das Metadaten in einer Protokolldatei schreibt. Ich habe einige Radiobuttons dynamisch (aus XML-Datei) in das Formular erstellt, aber ich bin nicht sicher, wie sie ihre Werte erhalten und sie in eine Logdatei schreiben.Nicht sicher, wie man Wert von radiobuttons in C# code erstellt

-Code Radiobuttons zu erstellen:

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); 
    } 
} 

In der aktuellen XML-Datei, wird 9 Radiobutton Optionen erstellt werden. Was ich versuche zu erreichen ist, dass ich für jeden 9 "Titel" das ausgewählte "Waardes" in einer anderen Methode bekomme.

UPDATE

ich es geschafft, den letzten Wert von 1 Radiobutton Gruppe zu erhalten, indem dies zu tun:

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

Das gibt mir nur das letzte Element einer Gruppe, wie kann ich das bekommen ganze Gruppe und sehen, welche überprüft wird?

Dank

+0

Alle Optionsfelder in einer Gruppe auf einen einzelnen Wert zu speichern zusammengefasst werden können. Sie müssen also nur einen einzigen Wert pro Optionsfeldgruppe speichern. Tatsächlich verhält sich jede Gruppe wie eine einzelne "ComboBox" oder Single-Select "ListBox". Um es einfacher zu machen, werfen Sie einen Blick auf diese benutzerdefinierte [Windows Forms 'RadioButtonList'] (https://Stackoverflow.com/a/41355419/3110834). –

Antwort

0

es behoben, siehe Code der Lösung unter:

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}"); 
    } 
}