2012-02-10 63 views
2

我有一个胜利的形式,其上有几个radionbuttons和标签和一些其他控件,我在运行时生成。当我检查一个单选按钮时,不是我想要的,除了我检查的那个之外,所有的radionbutton都不应该被选中。这适用于每个单选按钮。简而言之,我想每次检查一个radionbutton。防止单选按钮

private RadioButton GenerateRadioButton(string id) 
     { 
      RadioButton _radioButton = new RadioButton(); 
      _radioButton.Location = new Point(32, 20); 
      _radioButton.Margin = new Padding(4, 4, 4, 4); 
      _radioButton.Size = new Size(130, 36); 
      _radioButton.Name = id; 
      _radioButton.AutoSize = true; 
      _radioButton.Font = new Font("Arial", 16, FontStyle.Bold); 
      _radioButton.CheckedChanged += new System.EventHandler(RadioButton_CheckedChanged); 
      return _radioButton; 
     } 

    private void RadioButton_CheckedChanged(object sender, EventArgs e) 
     { 
      HandleRadioButtinClick(((RadioButton)sender).Name); 
      ((RadioButton)sender).Checked = true; 
     } 

    private void HandleRadioButtinClick(string ctrlId) 
      { 
       FrmSpace objFrmSpace = new FrmSpace(); 
       foreach (Control ctrl in pictureBox1.Controls) 
       { 
        if (ctrl is Panel) 
        { 
         foreach (Control ctl in ctrl.Controls) 
         { 
          if (ctl is RadioButton && ctl.Name != ctrlId) 
           ((RadioButton)ctl).Checked = false; 
         } 
        } 
       } 
      } 

这是上面的代码。这个代码的问题是,当我检查单选按钮时,如果有其他单选按钮被选中,并且我试图取消选中它,checkedchanged事件也会被触发,导致所有的单选按钮再次被取消选中。我希望我清楚我想传达的是什么。

请提供一些解决方案。

感谢

+0

为什么你手动取消选中单选按钮?你为什么不把它们分组来处理这部分。 – 2012-02-10 06:45:00

+0

我很乐意这样做。但是请问,如何在运行时产生它们的同时对它们进行分组? – 2012-02-10 06:46:23

+0

将它们添加到表单中时,将它们添加到组框中而不是表单。 – 2012-02-10 06:50:00

回答

1

您是否尝试过使用全部单选按钮的groupbox?这是您要求的默认功能。

编辑:澄清你的疑问

 // some function 
     GroupBox g = createGBox(); 
     this.Controls.Add(g); 
     g.Controls.Add(radioButton1); 
     g.Controls.Add(radioButton2); 
    } 

    public GroupBox createGBox() 
    { 
     GroupBox gBox = new GroupBox(); 
     gBox.Location = new System.Drawing.Point(72, 105); 
     gBox.Name = "BOX"; 
     gBox.Size = new System.Drawing.Size(200, 100); 
     gBox.Text = "This is a group box"; 
     return gBox; 
    } 
+0

我有一个图片框,然后在运行时创建面板并将其添加到图片框。然后我创建标签和单选按钮,然后将它们添加到面板中。每个面板都有一组一个单选按钮和一个标签。 – 2012-02-10 06:49:58

+0

Groupbox仍然可以工作。只需更换groupbox,而不是包含单选按钮的面板。检查链接。 Groupbox有一个内置的标签,您也可以使用。 – Jeremy 2012-02-10 06:55:25

+0

是否有任何groupbox属性,我需要设置。其实它不工作。与面板相同的结果。 – 2012-02-10 07:02:18

0

把所有radiobuttons到同一GroupBox控制,你可以在运行时创建了。在这种情况下,预期的行为应该由控制自己处理,而不需要编码。

希望这会有所帮助。

+0

如果我在设计时使用组框,并在运行时向此组框添加面板(包含单选按钮和标签)。它会工作吗? – 2012-02-10 06:53:03

+0

伊莫,不,你需要GroupBox,就像一个素质父母。你为什么要使用面板?直接添加到GroupBox。 – Tigran 2012-02-10 08:01:20