2017-04-07 52 views
0

在winforms应用程序中,我有一种情况。 当某个复选框被选中时,应该禁用该复选框。 我知道这不是一个理想的设计,但目前相当多的依赖于此,所以我不知道如何使代码在下面的工作,因为它将是大代码基地的最小的变化。通过事件中的另一个复选框更改复选框

private void cbCalibrate_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckState CalibrationBussy; 
    CalibrationBussy = cbDenoise.CheckState; 
    cbDenoise.Checked = false; 
    cbDenoise.Show();      // the cbDenoise checkbox doesnt change 
    cbDenoise.CheckState = CalibrationBussy; 
    cbDenoise.Show(); 
} 

更新我应该使用Checked而不是checkstate,但问题仍然存在。 (因为Checked实际上是启用vs禁用),其中checkedstate有第三个选项,因为没有确定(用户没有触摸控件)。

 bool CalibrationBussy; 
     CalibrationBussy = cbDenoise.Checked; 
     cbDenoise.Checked =false; 
     cbDenoise.Show(); 
     cbDenoise.Checked = CalibrationBussy; 
     cbDenoise.Show(); 

回答

1
public void cbCalibrate_CheckedChanged(object sender, EventArgs e) 
     { 
      CheckState CalibrationBussy; 
      SatusBeforeCalibrating = cbDenoise.CheckState; 
      if (cbDenoise.Checked == true) 
      { 
       account = "Active"; 
       cbDenoise.Show(); 
      } 
      else if (cbDenoise.Checked == false) 
      { 
       account = "Deactive"; 
       cbDenoise.Show(); 
      } 
     } 
+0

不使用CheckState?为什么不省略? –

+0

检查状态确实是错误的,但问题接缝在cbDenoise.Show它不会更新,而在cbCalibrate事件内。 – user3800527

+0

哦,废话......我看到问题,我用尽了咖啡 – user3800527

0

使用这个简单的模板:

public void cbCalibrate_CheckedChanged(object sender, EventArgs e) 
{ 
checkBox1.Enabled = checkBox2.Checked; 
} 
0

这将解决您的问题

CheckState Before; 
private void cbCalibrate_CheckedChanged(object sender, EventArgs e) 
{ 
    if(cbCalibrate.Checked == true) 
    { 
    Before = cbDenoise.CheckState; 
    cbDenoise.Enabled = false; 
    cbDenoise.Checked = false; 
    } 
    if(cbCalibrate.Checked == false && Before = true) 
    { 
     cbDenoise.Checkd = true 
     cbDenoise.Enabled = true; 
    } 
} 
相关问题