请阅读我的问题,它不是一个重复的一个。
我已经在Windows窗体三个单选按钮,所有这些按钮具有共同“的CheckedChanged”事件相关联。 当我点击这些单选按钮,它会触发两次“的CheckedChanged”事件。
这里是我的代码:
private void radioButtons_CheckedChanged(object sender, EventArgs e)
{
//My Code
}
我插入这个事件迭代中的断点和整个代码的两倍。 请告诉我为什么它的行为就像这样?
至于其他的应答者正确地说,该事件被触发两次,因为每当一个组中的一个单选按钮被选中另一个,将取消选中 - 因此检查更改事件会触发两次。
只做这个事件刚刚被选中,你可以看看发送对象,做这样的事情的单选按钮中的任何工作:
void radioButtons_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = sender as RadioButton;
if (rb != null)
{
if (rb.Checked)
{
// Only one radio button will be checked
Console.WriteLine("Changed: " + rb.Name);
}
}
}
为了避免它,只是检查,如果radioButton
被选中
例如:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
if (radioButton1.Checked == true)
//your code
}
的CheckedChanged升高每当经过属性更改。 如果您选择一个单选按钮,则先前选定的单选按钮没有被选中(解雇的CheckedChanged),然后将新的单选按钮被选中(解雇的CheckedChanged)。
从检查未选中,再从选中的单选按钮转换到检查它的单选按钮迁移触发一次(即选中状态的任何变化将触发事件)
你可以设置自动检查属性真正为每个单选按钮,然后赶上Click事件,而不是CheckChanged事件。 这将确保只有一个事件被触发,并在处理程序逻辑可以投发件人,如果需要处理的点击式单选按钮。 通常,如果能在处理程序逻辑很简单回避的演员。 这里是处理三个控件,rbTextNumeric,rbTextFixed和rbTextFromFile一个例子:
private void rbText_Click(object sender, EventArgs e)
{
flowLayoutPanelTextNumeric.Enabled = rbTextNumeric.Checked;
txtBoxTextFixed.Enabled = rbTextFixed.Checked;
flowLayoutPanelTextFromFile.Enabled = rbTextFromFile.Checked;
}
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
int click = 0;
private void radioButton1_Click(object sender, EventArgs e)
{
click++;
if (click %2==1)
{
radioButton1.Checked = true;
}
if (click %2==0)
{
radioButton1.Checked = false;
}
if (radioButton1.Checked==true)
{
label1.Text = "Cheked";
}
if (radioButton1.Checked==false)
{
label1.Text = "Uncheked";
}
}
}
}