C#如何取消选中动态创建的单选按钮?

时间:2016-07-01 15:27:49

标签: c# asp.net

我正在动态创建表单中的一些单选按钮,我希望用户能够取消选择它们。用户选项应选择一个,或选择无(使用单选按钮比复选框更安全)。我尝试使用EventHandler并创建一个事件,但我没有太多运气让它正常工作。

这就是我制作按钮的原因:

private void makeRadioButtons(string size, Panel pnl)
    {
        for (int i = 0; i < 2; i++)
        {
            RadioButton btn = new RadioButton();
            btn.AutoSize = true;
            btn.Name = i;
            btn.Text = i;
            btn.Location = new Point(100*i, 0);
            btn.Click += new EventHandler(radioHandler);
            pnl.Controls.Add(btn);
        }
}

这是我的事件处理程序:

private void radioHandler(object sender, EventArgs e)
    {
        RadioButton rdo = sender as RadioButton;
        if(rdo.Checked)
        {
            rdo.Checked = false;
        }
        else
        {
            rdo.Checked = true;
        }
    }

当我编译时,我得到按钮,但无法选择或取消选择它们。我觉得我很接近,但我无法弄清楚我在这里做错了什么。

2 个答案:

答案 0 :(得分:1)

默认情况下会自动检查RadioButtons。您可以在创建AutoCheck属性时将其设置为false来避免这种情况。

然后你需要改变你的处理程序:

private void radioHandler(object sender, System.EventArgs e)
{
    RadioButton rbt = (RadioButton)sender;
    if (rbt.Checked)
    {
        rbt.Checked = false;
        return;
    }

    rbt.Checked = true;
    foreach (RadioButton r in pnl.Controls.OfType<RadioButton>())
        if (r != rbt) r.Checked = false;
}

因此,如果选中了单击的按钮,则取消选中该按钮。如果未选中,我们会检查并取消选中所有其他内容(这是必要的,因为我们将AutoCheck设置为false)。

答案 1 :(得分:0)

这是你的事件处理程序代码造成混乱。

用户点击时会自动选中/取消选中Radiobuttons。

您的代码恰恰相反!

修改

只需删除处理程序即可。