我对C#很新,我在Windows窗体应用程序中遇到了事件处理程序问题。我在运行时创建了多个单选按钮(存储在buttonz
列表中),并且都分配了相同的事件处理程序。
在foreach
循环中:
buttonz.Add(new RadioButton());
buttonz[buttonz.Count - 1].CheckedChanged += new EventHandler(radio_checked);
以下是我的事件处理程序:
private void radio_checked(object sender, EventArgs e)
{
RadioButton btn = (RadioButton)sender;
Console.WriteLine("{0} Radio checked!", btn.Text);
}
输出结果为:
Button1 Radio checked! (1st button is checked)
Button1 Radio checked! (2nd button is checked)
Button2 Radio checked!
Button2 Radio checked! (3rd button is checked)
Button3 Radio checked!
因此,当取消选中该按钮时,也会调用事件处理程序。我怎么能阻止这个?我已经阅读了几个问题,但是我的水平很复杂,因此无法提取我需要的信息。解释性答案非常受欢迎。感谢。
答案 0 :(得分:1)
您可以检查处理程序中是否选中了按钮:
if(btn.Checked)
{
Console.WriteLine("{0} Radio checked!", btn.Text);
}
答案 1 :(得分:0)
您遇到的问题是该事件被调用 a)检查控制时 b)未选中控件时。 对此的提示是该事件被称为CheckedChanged。
在事件处理程序中,您需要过滤调用。将发件人转发给CheckBox并检查“已检查”属性:
private void radio_checked(object sender, EventArgs e)
{
//Check if this is a radio button. It might be a checkbox!
if(sender is RadioButton)
{
RadioButton btn = (RadioButton)sender;
if(btn.Checked)
Console.WriteLine("{0} Radio checked!", btn.Text);
}
}
答案 2 :(得分:0)
您订阅的活动是CheckedChanged
,因此当您检查和取消选中时,它会被点击。
将您的功能更改为仅显示已选中的内容。
private void radio_checked(object sender, EventArgs e)
{
RadioButton btn = (RadioButton)sender;
if(btn.Checked)
Console.WriteLine("{0} Radio checked!", btn.Text);
}
答案 3 :(得分:0)
试试这个:
private void radio_checked(object sender, EventArgs e)
{
RadioButton btn = (RadioButton)sender;
if (btn.Checked)
Console.WriteLine("{0} Radio checked!", btn.Text);
}
答案 4 :(得分:0)
如果您只想在已选中的单选按钮上写行,请在以下情况下添加:
private void radio_checked(object sender, EventArgs e)
{
RadioButton btn = (RadioButton)sender;
if (btn.Checked)
{
Console.WriteLine("{0} Radio checked!", btn.Text);
}
}
答案 5 :(得分:0)
这里的问题是,当选中单选按钮并且未选中单选按钮时会触发CheckedChanged
事件处理程序,这就是它触发2次的原因。
private void radio_checked(object sender, EventArgs e)
{
if((sender as RadioButton).Checked)
{
RadioButton btn = (RadioButton)sender;
Console.WriteLine("{0} Radio checked!", btn.Text);
}
}
这样的方法的功能性仅在选中按钮时运行,而不是在未选中时运行。
答案 6 :(得分:0)
您订阅的事件称为“CheckedChanged”,因此这意味着当RadioButton的检查状态为已更改时将引发此事件 - 这意味着在检查时它将被抬起或未选中