【问题标题】:Removing Selected Values from ListBox从 ListBox 中删除选定的值
【发布时间】:2013-10-22 11:12:07
【问题描述】:

我从 COL_name 获取值的集合并将每个值添加到名为 lstDisplay 的列表框,并且这些值正在被添加。同时我需要从 COl_name 中删除相同的值lstAvailable 列表框,但值仅在 lstDispaly 中添加,它不会从名为 lstAvailable 的另一个列表框中删除。

            foreach (string drr in COl_name)
            {
                lstDispaly.Items.Add(drr);
                lstAvailable.Items.Remove(drr);
            }

谢谢你..

【问题讨论】:

  • 您能介绍更多的上下文吗?您共享的代码段对我来说看起来不错。问题可能出在其他地方。
  • @ByteBlast :ya 在 lstDisplay 中调试时,值正在被添加,但在 LstAvailable 中没有被删除。

标签: c# arraylist listbox


【解决方案1】:

ListBox.ObjectCollection.Remove 使用Equals 来确定两个对象是否相等。因此,如果您的对象(它是什么类型?)没有完全覆盖Equals,您将比较引用。如果两个对象不是同一个引用,那么它们不被认为是相等的。

另一个原因可能是 ListBox 包含不是字符串的对象,但您正在“删除”字符串。然后你可以使用RemoveAt:

var obj = lstAvailable.Items.Cast<object>()
   .Select((obj, index) => new{ obj, index })
   .FirstOrDefault(x => (x.obj == null ? "" : x.obj.ToString()) == drr);
if(obj != null)
    lstAvailable.Items.RemoveAt(obj.index);

【讨论】:

  • 空值即将到来。
【解决方案2】:

这意味着,您在 lstAvailable 中没有 drr 对象。 尝试这样做:

foreach (string drr in COl_name)
            {
                lstDispaly.Items.Add(drr);
                lstAvailable.Items.RemoveAt(COL_name.IndexOf(drr));
            }

或者你可以尝试在你的类中重写 Equals() 方法

【讨论】:

  • 但最好的方法是覆盖你拥有的类女巫集合中的 Equals() 方法。如果你这样做,.Remove 方法就可以正常工作
  • 添加到您收藏中的帖子类,我会帮助您
  • 对不起,我找不到你??能详细说说吗../
猜你喜欢
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多