在我的项目中,有两个radioButtons。通过执行,我已经给了相同的CheckedChanged
事件
像这样的东西:
DoctorRadioButton.CheckedChanged += new EventHandler(RadioButton_CheckedChanged);
PatientRadioButton.CheckedChanged += new EventHandler(RadioButton_CheckedChanged);
我将两个RadioButton保存在Panel
中,使其成为真,而另一个则为假。
现在的问题是我在RadioButton_CheckedChanged
事件中实现了一个非常大的代码
每当用户改变两个RadioButton中任何一个的状态时,事件就会提升两次。
经过这么多个小时,我得到了答案,事件正在提升两次,因为两个RadioButton状态都被改变了(因此,事件将被提升两次)。为了解决这个问题,我试图暂时取消事件:
RadioButton_CheckedChanged 事件:(不工作)
if (DoctorRadioButton.Checked)
{
PatientRadioButton.CheckedChanged -= RadioButton_CheckedChanged; //Un
//
//My functions
//
PatientRadioButton.CheckedChanged += new EventHandler(RadioButton_CheckedChanged);
}
else
{
DoctorRadioButton.CheckedChanged -= RadioButton_CheckedChanged;
//
//My functions
//
DoctorRadioButton.CheckedChanged += new EventHandler(RadioButton_CheckedChanged);
}
尽管事件正在执行两次。我知道我在挂钩和脱钩方面做错了什么。请帮助。
答案 0 :(得分:2)
您可以检查发件人RadioButton并相应地放置您的代码 -
void RadioButton_CheckedChanged(object sender, EventArgs e)
{
RadioButton senderRadioButton = sender as RadioButton;
if (senderRadioButton.Equals(DoctorRadioButton))
// OR senderRadioButton.Name == "DoctorRadioButton"
{
// Place your code here for DoctorRadioButton.
}
else
{
// Place your code here for PatientRadioButton.
}
}
<强>更新强>
如果你不能为两个radioButtons使用两个不同的处理程序,并且只想勾选复选框,你可以执行此操作 -
void RadioButton_CheckedChanged(object sender, EventArgs e)
{
RadioButton senderRadioButton = sender as RadioButton;
if (senderRadioButton.IsChecked)
{
// Place your code here for check event.
}
}
答案 1 :(得分:1)
对于一个非常简单(尽管粗糙)的解决方案,不挂钩两个单选按钮,并只将其中一个挂钩到处理程序:因为检查一个无线电取消选中另一个,它会按计划工作。
更复杂的方法是使用支持属性,如下所示:
class myForm
{
private bool radioStatus = false; // depends on the default status of the radios
private bool RadioStatus
{
get{return radioStatus;} set {radioStatus = value; Checked_Changed();}
}
public myForm()
{
// Lambdas as handlers to keep code short.
DoctorRadioButton.CheckedChanged += (s,args)=>
{ if((s as RadioButton).Checked) RadioStatus = true; };
PatientRadioButton.CheckedChanged += (s,args)=>
{ if((s as RadioButton).Checked) RadioStatus = false; };
}
void Checked_Changed()
{
if (RadioStatus) // = true --> DoctorRadioButton was checked
{
//code
}
else // = false --> PatientRadioButton was checked
{
//other code
}
}
}
这种方法的优点是可以让你从UI中抽象出来。
答案 2 :(得分:-1)
将两个单选按钮放在同一个面板或组框中,并自动将它们分组,以便一次只能选择一个。
答案 3 :(得分:-1)
这是一个迟到的解决方案,但我发现你的问题没有正确答案,所以我发布它可能对你有用
为单选按钮创建单击事件,简单地将代码用于每次点击你的单选按钮检查并执行代码:):))
private void DoctorRadioButtons_Click(object sender, EventArgs e)
{
//Your code on Doctor Radio Button
}
private void PatientRadioButton_Click(object sender, EventArgs e)
{
// Your code on Patient Radio Button
}