C# 列表框删除

C# 列表框删除,c#,winforms,C#,Winforms,我有一个列表框,有两个按钮,新建和删除。新建会将一个项目添加到列表框中,删除按钮会将该项目从列表框中删除。列表框项目绑定到一个类,该类存储下面文本框中用户输入的数据 private void AddListBox() { lstCondition.BeginUpdate(); Condition cond = new Condition(""); cond.Name = string.Format("Conditi

我有一个列表框,有两个按钮,新建和删除。新建会将一个项目添加到列表框中,删除按钮会将该项目从列表框中删除。列表框项目绑定到一个类,该类存储下面文本框中用户输入的数据

 private void AddListBox()
    {           
        lstCondition.BeginUpdate();
        Condition cond = new Condition("");

        cond.Name = string.Format("Condition {0}", _selection.NetConditions.Count + 1);
        _selection.NetConditions.Add(cond);

        lstCondition.EndUpdate();

        lstCondition.SelectedItem = cond;                     

        cboNetCondition.Properties.Items.Clear();
        cboNetCondition.Properties.Items.AddRange(NetCondition);
        cboControlType.Properties.Items.Clear();
        cboControlType.Properties.Items.AddRange(ControlType);
        cboFlowRate.Properties.Items.Clear();
        cboFlowRate.Properties.Items.AddRange(FlowRate);
    }

 private void btnNew_Click(object sender, EventArgs e)
        {
            AddListBox();

        }
cbo项是组合框,其数据在条件类中绑定到列表框的每个实例

 public frmNetConditions(Condition condo, Selection selection)
    {
        InitializeComponent();
        _selection = selection;
        lstCondition.DataSource = _selection.NetConditions;
        condition = _selection.NetConditions.Count;

    }

 private void btnDelete_Click(object sender, EventArgs e)
    {

        selectedCondition = (Condition)lstCondition.SelectedItem;

        cboControlType.SelectedIndex = -1;
        cboNetCondition.SelectedIndex = -1;
        cboFlowRate.SelectedIndex = -1;
        txtFlowRate.Text = string.Empty;
        txtStatPressure.Text = string.Empty;
        txtDampOpening.Text = string.Empty;
        txtDensity.Text = string.Empty;
        cboDensity.SelectedIndex = -1;

        lstCondition.Items.Remove(lstCondition.SelectedItem);
        lstCondition.Refresh();


    }
按下这个删除按钮后,列表框仍然包含我想删除的项目,我不确定为什么会这样

使用数据源更新

 public List<Condition> NetConditions { get { return _netconditions; } }
public List NetConditions{get{return}\u NetConditions;}

如前所述,您应该绑定到
绑定列表,而不是
列表
。这允许您更改数据源和控件(
ListBox
),以获得更改通知。代码应该如下所示:

lstCondition.ValueMember = "ConditionId";
lstCondition.DisplayMember = "Name";
lstCondition.DataSource = NetConditions;
定义绑定后,对
列表框
项进行操作的正确方法是从
数据源
中删除,而不是从
列表框
本身中删除:

// SelectedItem should be checked for null (no selection is an option)
NetCondition.Remove((Condition)lstCondition.SelectedItem);

但是,如果您计划更改某个元素的属性(因此,不是列表本身),则仅当您的元素(条件)实现了接口时,才会通知控件。

是否可以发布与列表框相关的全部代码?是否将列表绑定到列表或类似的内容?
lstCondition
似乎没有填充,但是您尝试分配它的SelectedItem.lstCondition是listbox让我编辑用户当前突出显示的选定项目。好的,这是不可能的,因为它是列表,而不是绑定列表。我认为这是最方便的方式。这只是一个增强的通用列表,可以在绑定场景中使用。