如何在c#中使用字符串从具有数据源集的列表框中删除项

本文关键字:数据源 列表 删除 字符串 | 更新日期: 2023-09-27 18:09:27

指MSDN链接

如何删除一个项目使用字符串??(我不想通过使用selected index删除它)
比如

USStates.Remove("Alabama","AL");

如何在c#中使用字符串从具有数据源集的列表框中删除项

你不能改变Items集合,但你可以改变DataSource (List或ArrayList)。

首先覆盖USState类型的GetHashCode()Equals()方法。

public override int GetHashCode()
{
     return myLongName.GetHashCode() + myShortName.GetHashCode();
} 
public override bool Equals(object obj)
{
     return GetHashCode() == obj.GetHashCode();
} 

现在,你可以删除一个元素

 listBox1.DataSource = null; // Set null so you can update DataSource
 USStates.Remove(new USState("Wisconsin", "WI"));
 listBox1.DataSource = USStates;
 listBox1.DisplayMember = "LongName";
 listBox1.ValueMember = "ShortName"; 

更新:我假设你添加了一个按钮,你可以点击它来删除一个项目。

    BindingList<USState> USStates;
    public Form1()
    {
        InitializeComponent();
        USStates = new BindingList<USState>();
        USStates.Add(new USState("Alabama", "AL"));
        USStates.Add(new USState("Washington", "WA"));
        USStates.Add(new USState("West Virginia", "WV"));
        USStates.Add(new USState("Wisconsin", "WI"));
        USStates.Add(new USState("Wyoming", "WY"));
        listBox1.DataSource = USStates;
        listBox1.DisplayMember = "LongName";
        listBox1.ValueMember = "ShortName";
    }
    private void button1_Click(object sender, EventArgs e)
    {
        var removeStates = (from state in USStates
                            where state.ShortName == "AL"
                            select state).ToList();
        removeStates.ForEach( state => USStates.Remove(state) );
    }

PS:我以为你在我之前的回答中使用的是WPF

首先,不要使用ArrayList,使用List。然后你可以根据T的类型来删除

    list.Remove("whatever");