喂!
我会在这里和我的情况中更好地解释我的问题:)
我的应用程序中有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
}
}
}
无法找到任何相关信息。只有“选中时 - >删除行”
可以像在视觉中的错误窗口一样思考这个问题,当你得到一个红色错误时,你可以修复代码。它有点荒谬:)
答案 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;
}