如何使用 foreach 检查项是否不在控件中
本文关键字:控件 是否 何使用 foreach 检查 | 更新日期: 2023-09-27 18:36:28
我目前正在尝试使用 foreach 循环来检查列表视图项是否不在列表视图中,以及是否不再写入它。这是我到目前为止的代码。
private void button1_Click(object sender, EventArgs e)
{
TextReader reader = new StringReader(richTextBox1.Text);
string[] strItems = null;
foreach (ListViewItem item in listView1.Items)
{
strItems = reader.ReadLine().Split("-".ToCharArray());
item.Text = strItems[0].ToString();
item.SubItems.Add(strItems[1].ToString());
item.SubItems.Add(strItems[2].ToString());
item.SubItems.Add(strItems[3].ToString());
item.SubItems.Add(strItems[4].ToString());
listView1.Items.Add(item);
}
}
感谢所有帮助!
您也可以先阅读所有行,使用 File.ReadAllLines
.然后,可以使用 LINQ 的.Distinct()
扩展删除重复项:
private void button1_Click(object sender, EventArgs e)
{
string[] lines = File.ReadAllLines(richTextBox1.Text);
foreach (string line in lines.Distinct())
{
listView1.Items.Add(new ListViewItem(line.Split({'-'})));
}
}
我还使用了ListViewItem
更方便的构造函数。
我认为@minitech的答案遗漏了一块:您不仅要仅添加不同的新条目,还希望过滤掉列表框中已有的任何新条目。
private void button1_Click(object sender, EventArgs e)
{
string[] lines = richTextBox1.Lines;
// Not sure about the exact Items.Contains() and item.Text usage, but that's the idea
foreach (string line in lines.Distinct().Where(line =>
!listView1.Items.Contains(item => line == item.Text)))
{
string[] items = line.Split('-');
listView1.Items.Add(new ListViewItem(items));
}
}
有一些方法可以优化这一点,但选择正确的方法将取决于列表视图的项目首先来自哪里(以及列表视图中有多少项目,即您需要多少来优化它)。
我不确定我是否理解你的问题。
如果要在列表视图中搜索特定匹配项中已有的所有项,那么为什么不直接使用"FindItemWithText()"或等效项:
-
http://msdn.microsoft.com/en-us/library/y3h4x385.aspx
-
http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.listviewitemcollection.find.aspx
如果查询未返回任何内容,则该项不在列表中。
"希望对...至少一点点...
您的代码仅用于检查现有的 ListViewItem 吗?如果希望代码向空 ListView 添加新项,则它将失败,因为如果 ListView 中没有任何内容,它不会进入 foreach 循环。
如果可以尝试以下方法来检查现有的列表视图项
private void button1_Click(object sender, EventArgs e)
{
TextReader reader = new StringReader(richTextBox1.Text);
string[] strItems = null;
foreach (ListViewItem item in listView1.Items)
{
strItems = reader.ReadLine().Split("-".ToCharArray());
if (ListView1.FindItemWithText(strItems[0].ToString()) != null)
{
item.Text = strItems[0].ToString();
item.SubItems.Add(strItems[1].ToString());
item.SubItems.Add(strItems[2].ToString());
item.SubItems.Add(strItems[3].ToString());
item.SubItems.Add(strItems[4].ToString());
listView1.Items.Add(item);
}
}
}
请参考下面的网址
http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.listviewitemcollection.find(v=vs.85).aspx