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;
}
}
当我编译时,我得到按钮,但不能选择或取消选择它们。我觉得我已经很接近了,但是我就是不知道我在这里做错了什么。
默认情况下自动选中单选按钮。您可以通过在创建它们时将它们的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
)。
是您的事件处理程序代码造成了混乱。
当用户点击单选按钮时,自动选中/不选中。
你的代码做了相反的!
编辑
只需要删除处理程序。