在我的项目中,有两个单选按钮。我通过做
给出了相同的
CheckedChanged
DoctorRadioButton.CheckedChanged += new EventHandler(RadioButton_CheckedChanged);
PatientRadioButton.CheckedChanged += new EventHandler(RadioButton_CheckedChanged);
我将两个单选按钮保留在
Panel
中,以使它们一个为 true,另一个为 false。RadioButton_CheckedChanged
事件中实现了非常大的代码。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);
}
尽管事件执行了两次。我知道我在“挂钩”和“脱钩”中做错了什么。请帮忙。
您可以检查发件人单选按钮并相应地放置您的代码,如下所示 -
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.
}
}
更新
如果您不能对两个单选按钮使用两个不同的处理程序,并且只想在选中复选框时执行代码,您可以这样做 -
void RadioButton_CheckedChanged(object sender, EventArgs e)
{
RadioButton senderRadioButton = sender as RadioButton;
if (senderRadioButton.IsChecked)
{
// Place your code here for check event.
}
}
对于一种极其简单(尽管粗略)的解决方案,不挂钩两个单选按钮,而仅将其中一个挂钩到处理程序:由于检查一个单选按钮会取消选中另一个单选按钮,因此它将按预期工作。
更复杂的方法是使用支持属性,如下所示:
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 中进行一些抽象。
我添加了“已选中”复选框,因为一次只能选中一个单选按钮(它们分组在一个组框中)。如果sender.Checked==false,则不会运行处理。仅当其中一个按钮切换到 Checked==true 时才会运行处理。 如果您想用其他方法进行处理,请将变量“选择”替换为您选择的开关。
private void rbMatchType_CheckedChanged(object sender, EventArgs e) {
RadioButton senderRadioButton = sender as RadioButton;
string selection = "";
if (senderRadioButton.Checked) {
if (senderRadioButton.Equals(DoctorRadioButton)) {
selection="DOCTOR";
} else {
selection="PATIENT";
}// add "else if" if you have more than 2 buttons
Processing(selection); // Only processes when the event is triggered by Checked==true
}
将两个单选按钮放在同一个面板或组框中,它们将自动分组,以便一次只能选择一个。
这是一个迟到的解决方案,但我发现你的问题没有正确的答案,所以我发布它可能对你有用
为单选按钮创建单击事件并简单地放置您的代码,因为每次单击时您的单选按钮都会被选中并且您的代码会执行:):):)
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
}