c# menuItem1 不会禁用

本文关键字:menuItem1 | 更新日期: 2023-09-27 18:33:01

这是错的吗?

即使选中了复选框2,我也总是得到"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;
            }
        }

c# menuItem1 不会禁用

即使选中了复选框2,我也总是得到"cb1和固件"。

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

目前还不清楚你在这里想做什么,但我想说前两个if陈述需要颠倒过来。

似乎您只希望在未选中 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

尝试对代码重新排序

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();
}
相关文章: