1

这是错的吗?

即使我的 checkBox2 被选中,我总是得到“cb1 和固件”。我也尝试使用 & 而不是 &&。

在我不得不将其添加到线程以使 UI 正确更新之前,它工作正常。

 private void MyWorkerThread2()
            {
             if (this.IsChecked(checkBox1) && (this.IsChecked(checkBox2) && (myString == "86.09.0000")))
            {
                MessageBox.Show("cb1 and firmware and cb2");
                Prep.clean();
                startedimage();
                fscreate();
                wipefiles();
            }
            else if ((this.IsChecked(checkBox1) && (myString == "86.09.0000")))
            {
                MessageBox.Show("cb1 and firmware");
                Prep.clean();
                startedimage();
                wipefiles();
            }
            else if (myString == "86.09.0000") 
            {
                MessageBox.Show("firmware");
                if (myThread == null)
                {

                    Prep.clean();
                    startedimage();
                    myThread = new Thread(MyWorkerThread);
                    myThread.IsBackground = true;
                    myThread.Start();
                }
            }

            else
            {

                FactoryReset();
            }
        }



public delegate bool IsCheckedDelegate(CheckBox cb);
        public bool IsChecked(CheckBox cb)
        {
            if (cb.InvokeRequired)
            {
                return (bool)cb.Invoke(new IsCheckedDelegate(IsChecked), new Object[] { cb });
            }
            else
            {
                return cb.Checked;

            }
        }
4

3 回答 3

1

即使我的 checkBox2 被选中,我总是得到“cb1 和固件”。

检查的事实checkBox2不会改变checkBox1也检查的事实,因此第一个if语句成功。如果checkBox1不检查,它将落入其他集合。

目前尚不清楚您要在这里做什么,但我想说前两个if语句需要颠倒。

于 2013-09-27T16:54:05.940 回答
1

似乎您只希望在未选中 checkBox2 时执行第一个。

改变:

if ((this.IsChecked(checkBox1) && (myString == "86.09.0000")))

至:

if ((this.IsChecked(checkBox1) && (!this.IsChecked(checkBox2) && (myString == "86.09.0000")))

这里有四种可能:

none
cb1
cb2
cb1, cb2
于 2013-09-27T16:56:03.100 回答
1

尝试重新排序代码

if (this.IsChecked(checkBox1) && (this.IsChecked(checkBox2) && (myString == "86.09.0000")))    
{
    MessageBox.Show("cb1 and firmware and cb2");
    Prep.clean();
    startedimage();
    fscreate();
    wipefiles();
}
else if ((this.IsChecked(checkBox1) && (myString == "86.09.0000")))
{
    MessageBox.Show("cb1 and firmware");
    Prep.clean();
    startedimage();
    wipefiles();
}
于 2013-09-27T16:56:06.943 回答