我正在动态创建表单中的一些单选按钮,我希望用户能够取消选择它们。用户选项应选择一个,或选择无(使用单选按钮比复选框更安全)。我尝试使用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;
}
}
当我编译时,我得到按钮,但无法选择或取消选择它们。我觉得我很接近,但我无法弄清楚我在这里做错了什么。
答案 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。
您的代码恰恰相反!
修改强>
只需删除处理程序即可。