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

本文关键字:动态 创建 单选按钮 何取消 取消 | 更新日期: 2023-09-27 17:53:45

我正在表单中动态创建一些单选按钮,我希望用户能够取消选择它们。用户的选项应该是选择一个,或者不选择(使用单选按钮比使用复选框更安全)。我尝试使用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;
        }
    }

当我编译时,我得到按钮,但不能选择或取消选择它们。我觉得我已经很接近了,但是我就是不知道我在这里做错了什么。

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

默认情况下自动选中单选按钮。您可以通过在创建它们时将它们的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)。

是您的事件处理程序代码造成了混乱。

当用户点击单选按钮时,自动选中/不选中。

你的代码做了相反的!

编辑

只需要删除处理程序。