c#menuItem1不会禁用

时间:2013-09-27 16:41:57

标签: c# windows visual-studio-2008 .net-2.0

这是错的吗?

即使检查了checkBox2,我也总是得到“cb1和固件”。我也尝试过& amp;而不是&&。

在我必须将其添加到线程中以使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;

            }
        }

3 个答案:

答案 0 :(得分:1)

  

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

检查checkBox2的事实不会改变checkBox1也被检查的事实,因此第一个if语句成功。如果未选中checkBox1,则会归结为其他集。

目前尚不清楚你在这里要做什么,但我会说前两个if陈述需要逆转。

答案 1 :(得分: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

答案 2 :(得分: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();
}