如何删除ListView中显示的特定文本/消息?

时间:2012-04-17 11:59:02

标签: c# .net listview

喂!

我会在这里和我的情况中更好地解释我的问题:)

我的应用程序中有ListView,此ListView用于输出错误,因此它用于错误日志。

我的程序主要是一个计时器,它检查int值的变化。

发生错误时我想在列表中显示它。 问题是,错误将被添加3-4次,甚至更多。

如果我检查是否(exist.in.listbox)我将无法第二次添加相同的错误。我想要做的是删除特定的消息/错误,然后在其“修复”或不再对系统构成威胁时将其删除。 这是代码片段:

                if (Convert.ToInt32(x) == 1 && Convert.ToInt32(y) == 1)
                {

                    found = false;
                    ListViewItem item = new ListViewItem(message);
                    foreach (ListViewItem z in listView1.Items)
                    {
                        if (z.Text == message)
                        { found = true; }
                    }

                    if (found == false)
                    {
                        item.SubItems.Add(now.ToString());
                        listView1.Items.Add(item);
                        listView1.EnsureVisible(item.Index);
                    }
                }
                else
                {
                    foreach (ListViewItem z in listView1.Items)
                    {
                        if (z.Text == message)
                        {
                           //no longer a threat, delete the message added aboue
                        }
                    }
                }

无法找到任何相关信息。只有“选中时 - >删除行”

可以像在视觉中的错误窗口一样思考这个问题,当你得到一个红色错误时,你可以修复代码。它有点荒谬:)

1 个答案:

答案 0 :(得分:2)

您应该采用与添加项目时相同的方法。首先,检查是否要执行删除,然后删除该项。

如果这不能很好地执行(在每次定时器迭代时迭代列表两次),您还可以将“添加/删除”逻辑移出ListView(即,可以保留字典以便更快地查找)。

void DeleteIfNecessary(string message)
{
    ListViewItem listViewItem = FindListViewItemForMessage(message);
    if (listViewItem == null)
    {
        // item doesn't exist
        return;
    }

    this.listView1.Items.Remove(listViewItem);
}

private ListViewItem FindListViewItemForMessage(string s)
{
    foreach (ListViewItem lvi in this.listView1.Items)
    {
        if (StringComparer.OrdinalIgnoreCase.Compare(lvi.Text, s) == 0)
        {
            return lvi;
        }
    }

    return null;
}