If-Else语句的复选框

时间:2016-03-09 13:33:44

标签: c# checkbox

我遇到了以下问题:
当我的程序检查确定的条件并且复选框被选中时,它会抛出ElseIf Pass 'Any code here that return to the rest of the script 两次;根据调试器,它进入if,抛出MessageBox,然后发出messagebox。之后,它再次执行整个if条件 我已经尝试了Checkbox1.Checked == false关于MSDN的文档,但我无法实现它。如何解决此复选框问题?

Checkbox1.Threestate

4 个答案:

答案 0 :(得分:2)

由于您更改了checkchange事件中的检查,它会再次触发它,您应该取消订阅该事件,然后重新订阅

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    checkBox1.CheckedChanged -= checkBox1_CheckedChanged;

    try
    {
        // Your conditions
    }
    finally
    {
        checkBox1.CheckedChanged += checkBox1_CheckedChanged;
    }
}

答案 1 :(得分:1)

只要设置Checked = false,就会更改其值,并再次触发Changed事件。

解决此问题的一种方法是使用一个保护变量,确保在处理事件时不再检查代码:

private bool handlingCheckboxChanged;
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
  if(handlingCheckboxChanged) { return; }
  handlingCheckboxChanged = true;
  try {
    // Your original code
  } finally {
    handlingCheckboxChanged = false;
  }
}

更好的做法是确保用户无法首先检查复选框,例如通过处理文本框的更改事件,并且只有在满足所有条件后才启用复选框。

答案 2 :(得分:1)

如果未选中复选框,则可以跳过它。

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if (!checkBox1.Checked) return; //<- this.

    string currPath = textBox1.Text;
    if (!textBox1.Text.Contains("\\"))
    {
        MessageBox.Show("Please define the input folder before starting");
        checkBox1.Checked = false;                
    }
    else if (!textBox2.Text.Contains("\\"))
    {
        MessageBox.Show("Please define the XML Output folder before starting");
        checkBox1.Checked = false;
    }
    else if (!textBox3.Text.Contains("\\"))
    {
        MessageBox.Show("Please define the Converted PPF Output Folder before starting");
        checkBox1.Checked = false;
    }
    else if (!textBox4.Text.Contains("\\"))
    {
        MessageBox.Show("Please define the Invalid PPF Output Folder before starting");
        checkBox1.Checked = false;
    }
    else
    {
        // calls the watcher
        prg.ProgramProcessing(textBox1.Text);
    }
}

答案 3 :(得分:1)

您有多种解决方案:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    checkBox1.CheckedChanged -= checkBox1_CheckedChanged;
    // Yours conditions
    checkBox1.CheckedChanged += checkBox1_CheckedChanged;
}

OR

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if(checkBox1.Checked == false)
    {
        return;
    }
    // your conditions..
}