从输出列表框中删除指定项时如何重新启用列表框

How to re-enable listbox when removing a specified item from an output listbox

我正在尝试仅重新启用与已从输出列表框中删除的项目相关的列表框。例如,如果我从 Body Type 列表框 select "Wagon" 和 Package 列表框 "Advance",则名为 "lstOutPut" 的列表框显示以下内容:

我想做的是,如果我要删除 "SUV",我只想重新启用 Body Type 列表框,而不是其余的

这是我的代码

private void lstBody_SelectedIndexChanged(object sender, EventArgs e)
{
    if (lstBody.SelectedItem != null)
    {
        lstOutput.Items.Add(lstBody.SelectedItem);
        lstBody.SelectionMode = SelectionMode.None;
        lstBody.Enabled = false;             
    }
}

private void lstPackage_SelectedIndexChanged(object sender, EventArgs e)
{         
    if (lstPackage.SelectedItem != null)
    {
        lstOutput.Items.Add(lstPackage.SelectedItem);
        lstPackage.SelectionMode = SelectionMode.None;
        lstPackage.Enabled = false;
    }
}

这就是我的删除按钮

private void btnRemove_Click(object sender, EventArgs e)
{
    //remove selected item only
    while (lstOutput.SelectedItems.Count > 0)
    {
        lstOutput.Items.Remove(lstOutput.SelectedItems[0]);           
    }

    lstBody.Enabled = true;
    lstPackage.Enabled = true;
}

有什么想法吗?

谢谢。

对于每个列表框,如果其项不存在于 lstOutput 中,则启用它:

var listBoxes = new ListBox[] {body, package, wheel, accessories};
foreach(var lst in listBoxes)     
   lst.Enabled = !lst.Items.Cast<string>().Any(x => lstOutput.Items.Contains(x));

假设不同输入列表框之间不会有重复值,您可以在btnRemove_Click事件

中执行以下操作
 var inputListBoxes = new[] { lstPackage, lstBody };
 while (lstOutput.SelectedItems.Count > 0)
 {
   inputListBoxes.First(x => x.Items.Contains(lstOutput.SelectedItems[0])).Enabled = true;
   lstOutput.Items.Remove(lstOutput.SelectedItems[0]);
  }