0

嘿!

我将尝试在这里更好地解释我的问题和我的情况:)

ListView我的应用程序中有一个,ListView它用于输出错误,所以它有点用于错误日志。

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

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

如果我检查 if(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
                        }
                    }
                }

找不到任何关于此的信息。仅“选择时->删除该行”

可以把它想象成视觉上的错误窗口,当你得到一个红色错误时,你可以修复代码。它会破坏:)

4

1 回答 1

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;
}
于 2012-04-17T12:23:25.793 回答