微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使多个返回true的条件在C#中执行?

如何解决如何使多个返回true的条件在C#中执行?

我有一个checkedListBox用户可以在其中选择想要更新的内容。我希望他们能够自由更新1台机器的5个特征。因此,当他们只想更新1件东西时,就不必提供其他4个特性。另外,当他们想要更新5个特征时, 一口气就能做到。为此,我有以下if语句:


if (clbcharacteristicsToUpdate.CheckedItems.Count != 0)
{
                        if (clbcharacteristicsToUpdate.GetSelected(0))
                        {
                            currentITime = Convert.Todouble(tbCurrentITime.Text);
                            MessageBox.Show(currentITime.ToString());
                            dh.UpdateCurrentITime(machineNr,currentITime);
                        }
                        if (clbcharacteristicsToUpdate.GetSelected(1))
                        {
                            cycleTime = Convert.Todouble(tbCycleTime.Text);
                            MessageBox.Show(cycleTime.ToString());
                            dh.UpdateCycleTime(machineNr,cycleTime);
                        }
                        if (clbcharacteristicsToUpdate.GetSelected(2))
                        {
                            nrOfLinesPerCm = Convert.ToInt32(tbNrOfLinesPerCm.Text);
                            MessageBox.Show(nrOfLinesPerCm.ToString());
                            dh.UpdateNrOfLinesPerCm(machineNr,nrOfLinesPerCm);
                        }
                        if (clbcharacteristicsToUpdate.GetSelected(3))
                        {
                            heightOfLamallae = Convert.Todouble(tbHeightOfLamallae.Text);
                            MessageBox.Show(heightOfLamallae.ToString());
                            dh.UpdateHeightOfLamallae(machineNr,heightOfLamallae);
                        }
                        if (clbcharacteristicsToUpdate.GetSelected(4))
                        {
                            if (rbLTB.Checked)
                            {
                                machineType = 2;
                                MessageBox.Show(machineType.ToString());
                            }
                            else if (rbSTB.Checked)
                            {
                                machineType = 1;
                                MessageBox.Show(machineType.ToString());
                            }
                            if(!rbLTB.Checked && !rbSTB.Checked)
                            {
                                MessageBox.Show("Select a machine type to update!");
                                return;
                            }
                            dh.UpdateType(machineNr,machineType);  
                         }

}

我的问题是,当我选择并更新1件东西时,它可以很好地工作。但是当我选择多个时,它只会执行最后一个返回true的if语句。我考虑过使用if-else,但是只有第一个返回true的将被执行。我还考虑过为每种可能性使用if语句。但是,由于我可以更新5个特征,因此有25种可能性,而我不想有25条if语句。预先感谢!

解决方法

GetSelected不会检查该项目是否已被检查,而是已被实际选择。
例如,在下面的图像中,“ {2}”将对GetSelected返回true。是选中的,而不是选中的

checkedlistbox

相反,您可以执行类似检查clbCharacteristicsToUpdate.CheckedItems属性的操作,以获取实际检查的项目。

GetSelected方法实际上来自ListBox继承的CheckedListBox类。

,

尝试一下: 这是我在按钮上创建的辅助方法。

private void button1_Click(object sender,EventArgs e)
{
    CheckList();
}

此方法查看是否已检查项目,并遍历已检查项目的集合,调用最后一个方法。

private void CheckList()
{
    if (clbCharacteristicsToUpdate.SelectedItems.Count != 0)
    {
        foreach (int indexChecked in clbCharacteristicsToUpdate.CheckedIndices)
        {
            CheckSelectedItem(indexChecked);
        }
    }
}

最后,这里根据索引采取适当的操作。

private void CheckSelectedItem(int index)
{
    if (index == 0)
    {
        //Do stuff on Zero
        MessageBox.Show("Zero");
    }

    if (index == 3)
    {
        //Do stuff on One
        MessageBox.Show("Three");  
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。