0

编码:

private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            crawlLocaly1 = new CrawlLocaly();
            crawlLocaly1.StartPosition = FormStartPosition.CenterParent;
            OptionsDB.Set_localOnly(checkBox2.Checked);
            if (checkBox2.Checked)
            {
                DialogResult dr = crawlLocaly1.ShowDialog(this);
                if (dr == DialogResult.Cancel)
                {
                    crawlLocaly1.Close();
                }
                else if (dr == DialogResult.OK)
                {
                    LocalyKeyWords.Add(crawlLocaly1.getText());
                    crawlLocaly1.Close();
                }
                removeExt = true;
            }
            else
            {
                removeExt = false;
            }
        }

这一行:

OptionsDB.Set_localOnly(checkBox2.Checked);

如果 checkBox2 被选中,则保存它的状态。如果下次选中它,我将运行我的程序,我将在 checkBox2 复选框中看到 V。如果我下次运行我的程序时取消选中复选框,则复选框 2 的框将被取消选中。

问题是当我关闭我的程序并再次运行它时检查checkBox2,因为现在检查了checkBox,然后由于某种原因它会这样做:

DialogResult dr = crawlLocaly1.ShowDialog(this);

Wich 将打开并向用户显示一个新表单。但我不希望它是那样的。

我希望如果用户在程序运行时选中了复选框,新表单就会显示出来。但是,如果用户从一开始就运行程序并且选中了复选框,则不显示新表单,只显示选中了复选框!

我应该如何解决?

4

2 回答 2

0

您需要一个checkedInThisSession最初设置为的其他布尔标志false,并在复选框OnChecked处理程序中将其设置为 true,然后您可以轻松检查此状态。希望一切都清楚

private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
       crawlLocaly1 = new CrawlLocaly();
       crawlLocaly1.StartPosition = FormStartPosition.CenterParent;
       OptionsDB.Set_localOnly(checkBox2.Checked);

       // UPDATED
       if (checkedInThisSession && checkBox2.Checked)
       {
           DialogResult dr = crawlLocaly1.ShowDialog(this);
           // ...
       }
       else
       {
           removeExt = false;
       }


       // UPDATED
       checkedInThisSession = checkBox2.Checked;
}

// In constructor    
checkedInThisSession = false;
checkBox2.Checked = OptionsDB.Get_localOnly(); 
于 2012-10-08T15:02:20.337 回答
0

CheckedChanged每次设置复选框时都会触发该事件,也以编程方式触发。因此,要解决此问题,您需要忽略第一次触发事件。因此,布尔值可能是您的解决方案:

private bool ignore = true;
private void checkBox2_CheckedChanged(object sender, EventArgs e){
   if(ignore == false){
      //your code here
   }
   else 
      ignore = false;    
}
于 2012-10-08T15:17:58.020 回答