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

发布于 2024-12-06 12:18:18 字数 254 浏览 0 评论 0原文

参考 msdn 链接

我该如何使用字符串删除项目??? (我不想通过使用选定的索引来删除它)
我想要类似的东西

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

refferring to msdn link

how can I remove an item using string???
(I don't want to remove it by using selected index)
I want something like

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

原来分手还会想你 2024-12-13 12:18:18

您无法更改 Items 集合,但可以更改数据源(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"; 

You can't change Items collection but you can change the DataSource (List or ArrayList).

First of all override GetHashCode() and Equals() methods in USState type.

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

Now, you can remove an element,

 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"; 
想挽留 2024-12-13 12:18:18

更新:我假设您添加了一个可以单击以删除项目的按钮。

    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。

Updated: I assume you add a button that you can click to remove an item.

    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: I thought you're using WPF in my previous answer.

深海不蓝 2024-12-13 12:18:18

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

    list.Remove("whatever"); 

First of all, don't use an ArrayList, use a List. Then you can remove based on whatever the type T is,

    list.Remove("whatever"); 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文