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が表示されます。次回プログラムを実行するときにcheckBoxのチェックを外すと、checkBox2のボックスがチェックされなくなります。

問題は、checkBox2をチェックしてプログラムを閉じて再度実行すると、checkBoxがチェックされているため、何らかの理由で次のようになることです。

DialogResult dr = crawlLocaly1.ShowDialog(this);

これにより、新しいフォームが開き、ユーザーに表示されます。しかし、私はそれがそのようであってほしくない。

プログラムの実行中にユーザーがチェックボックスをオンにすると、新しいフォームが表示されます。しかし、ユーザーがプログラムを最初から実行していて、checkBox がチェックされている場合は、新しいフォームを表示しないでください。checkBox がチェックされていることだけを示してください。

どうすれば直せますか?

4

2 に答える 2

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 に答える
0

checkedInThisSession最初に に設定された他のブール値フラグが必要falseで、チェックボックス ハンドラで true に設定するだけで、OnCheckedこの状態を簡単に確認できます。すべてが明確であることを願っています

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 に答える