C#VS - 选中一个单选按钮后,取消选中另一个

时间:2017-07-18 07:21:43

标签: c# visual-studio

我有一个表格,上面放了2个单选按钮。我的问题是我需要它以某种方式运行,如果单击一个,另一个将被取消。我有以下代码,但是一旦你做了第一次点击它就陷入了一个无限循环,我明白为什么。想知道你们中是否有人知道如何在c#中制作这个?我是c#

的新手
public partial class Form1 : Form
{
    public Form1()
    {
        radAllCols.CheckedChanged += new EventHandler(this.radAllCols_Checked);
        radSelCols.CheckedChanged += new EventHandler(this.radSelCols_Checked);
    }

    private void radAllCols_Checked(object sender, EventArgs e)
    {
        if (radAllCols.Checked == true)
        {
            radAllCols.Checked = false;
            radSelCols.Checked = true;
        }
    }

    private void radSelCols_Checked(object sender, EventArgs e)
    {
        if (radSelCols.Checked == true)
        {
            radSelCols.Checked = false;
            radAllCols.Checked = true;
        }
    }
}

4 个答案:

答案 0 :(得分:2)

如果单选按钮具有不同的RadioGroup值,则必须先取消注册Checked事件,更改Checked属性值并重新注册Checked事件。

private void radAllCols_Checked(object sender, EventArgs e)
{
    if (radAllCols.Checked == true)
    {
        radAllCols.CheckedChanged -= new 
                 EventHandler(this.radAllCols_Checked);
         radSelCols.CheckedChanged -= new 
                 EventHandler(this.radSelCols_Checked);
        radAllCols.Checked = false;
        radSelCols.Checked = true;
        radAllCols.CheckedChanged += new 
                 EventHandler(this.radAllCols_Checked);
         radSelCols.CheckedChanged += new 
                 EventHandler(this.radSelCols_Checked);
    }
}

private void radSelCols_Checked(object sender, EventArgs e)
{
    if (radSelCols.Checked == true)
    {
        radAllCols.CheckedChanged -= new 
                 EventHandler(this.radAllCols_Checked);
         radSelCols.CheckedChanged -= new 
                 EventHandler(this.radSelCols_Checked);
        radSelCols.Checked = false;
        radAllCols.Checked = true;
        radAllCols.CheckedChanged += new 
                 EventHandler(this.radAllCols_Checked);
         radSelCols.CheckedChanged += new 
                 EventHandler(this.radSelCols_Checked);
    }
}

上面的代码适用于非常自定义的场景,应尽可能避免。收音机盒应该按照您想要的方式自动运行。确保两者都具有相同的RadioGroup属性值。

答案 1 :(得分:1)

如果您使用 GroupBox容器元素 用于您想要选择其中一个的相同单选按钮,则您不需要手动检查单选按钮的状态,当您选择一个单选按钮将取消选中同一组中的所有其他单选按钮。

答案 2 :(得分:0)

放置在同一父控件(如面板)中的RadioButtons默认以这种方式运行。

无需为此使用已检查的事件。

设置radAllCols.Checked = true属性的值会触发radAllCols_Checked事件,这会导致您的无限循环"

因为你试图取消选中相同的radioButton来检查

private void radSelCols_Checked(object sender, EventArgs e)
{
    if (radSelCols.Checked == true)
    {
        radSelCols.Checked = false; // reversed
        radAllCols.Checked = true; // reversed
     }
}

答案 3 :(得分:0)

你的其余代码很好,但是你需要在下面提到的Checked methods()中更改你的代码以防止无限循环然后它将正常工作:

private void radAllCols_Checked(object sender, EventArgs e)
 {
   radAllCols.Checked = !radSelCols.Checked;
 }

private void radSelCols_Checked(object sender, EventArgs e)
 {
   radSelCols.Checked = !radAllCols.Checked;
 }