首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复选框的If-Else语句

复选框的If-Else语句
EN

Stack Overflow用户
提问于 2016-03-09 13:33:44
回答 4查看 2.5K关注 0票数 1

我有以下问题:

当我的程序检查一个确定的条件,如果复选框被选中,它会抛出MessageBox两次;根据调试器,它进入if,抛出messagebox,然后发出Checkbox1.Checked == false。之后,它再次执行整个if条件。

我尝试过关于MSDNCheckbox1.Threestate文档,但是无法实现它。我能做些什么来解决这个复选框问题?

代码语言:javascript
复制
   private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {

        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);
        }
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-09 13:37:29

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

代码语言:javascript
复制
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    checkBox1.CheckedChanged -= checkBox1_CheckedChanged;

    try
    {
        // Your conditions
    }
    finally
    {
        checkBox1.CheckedChanged += checkBox1_CheckedChanged;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-03-09 13:38:03

一旦设置了Checked = false,就会更改它的值,并再次触发Changed事件。

解决这一问题的一种方法是使用一个保护变量,以确保在处理事件时不会再次遍历代码:

代码语言:javascript
复制
private bool handlingCheckboxChanged;
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
  if(handlingCheckboxChanged) { return; }
  handlingCheckboxChanged = true;
  try {
    // Your original code
  } finally {
    handlingCheckboxChanged = false;
  }
}

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

票数 1
EN

Stack Overflow用户

发布于 2016-03-09 13:39:00

如果没有选中复选框,可以跳过它。

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35893075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档