当我更新它时,如何检查listBox中的项是否已经存在?

时间:2014-08-24 00:23:19

标签: c# .net winforms

这是我刷新和更新listBox List的方法:

private void RefreshWindowsList()
        {
            ClearGraphics = true;
            this.listBoxSnap.Items.Clear();
            this.pictureBoxSnap.Image = null;
            buttonSnap.Enabled = false;
            this.listBoxSnap.Items.AddRange(WindowSnap.GetAllWindows(true, true).ToArray());
            buttonSnap.Enabled = true;
            for (int i = listBoxSnap.Items.Count - 1; i >= 0; i--)
            {
                string tt = listBoxSnap.Items[i].ToString();
                if (tt.Contains(" ,"))
                {
                    listBoxSnap.Items.RemoveAt(i);
                }
            }
            rectangles = new Rectangle[listBoxSnap.Items.Count];
            textBoxIndex.Text = listBoxSnap.Items.Count.ToString();
            if (this.listBoxSnap.Items.Count > 0)
                this.listBoxSnap.SetSelected(0, true);
            listBoxSnap.Select();
        }

我清除列表框我清除了pictureBox,然后我又将这些项目添加到列表框中:

this.listBoxSnap.Items.AddRange(WindowSnap.GetAllWindows(true, true).ToArray());

我在form1构造函数中调用此方法一次,然后在其他两个位置调用此方法:单击按钮事件和计数器计时器中的倒计时事件。

相反,我想更改此方法,以便检查是否有任何新项目或已删除项目:

WindowSnap.GetAllWindows(true, true).ToArray()

如果有新的窗口(项目)将它们添加到listBox,如果从上次删除了一些项目然后从listBox中删除它们而不清除listBox和pictureBox只是根据WindowSnap的方式和方式添加/删除项目。 GetAllWindows(true,true).ToArray()已更改。

所以我可以在以后删除/删除这两行:

this.listBoxSnap.Items.Clear();
this.pictureBoxSnap.Image = null;

编辑:

另一个问题是,如果我删除一个窗口,例如我打开一个新的镀铬窗口(不是标签但是窗口)列表框已更新我点击了这个项目并看到它拍摄了快照但是我该怎么做我关上了这个窗口?带有此项目内图片的pictureBox现在怎么知道不显示它?我不想做:

this.listBoxSnap.Items.Clear();
this.pictureBoxSnap.Image = null;

因为它眨眼了。我想以其他方式根据WindowSnap.GetAllWindows中的更改更新listBox和pictureBoxSnap(true,true).ToArray()

2 个答案:

答案 0 :(得分:0)

删除旧的:

IEnumerable<TypeIDontKnow> someCollection = WindowSnap.GetAllWindows(true, true).ToArray();
foreach (var item in listBoxSnap.Items)
{
     if (!someCollection.Contains(item))
          listBoxSnap.Items.Remove(item);
}

添加新的:

listBoxSnap.Items.AddRange(someCollection.Where(x => !listBoxSnap.Contains(x))

我从头脑中写下这一点 - 我不确定演员阵容是否合适等。

答案 1 :(得分:0)

您可以搜索该项目是否存在并替换它。

// Set the search string:
string myString = "ITEM NAME";
// Search starting from index -1:
int index = listBox1.FindString(myString, -1);
if (index != -1)
{
    // Select the found item:
    listBox1.SetSelected(index, true);
    // Send a success message:
    MessageBox.Show("Found the item \"" + myString + "\" at index: " + index);
}
else
{
    MessageBox.Show("Item not found.");
}

Source