The best, simplest, graceful way to find nodes(next, next) in a ListView
假设有个ListView,有许多节点,有一个文本框,如何按回车,不断搜索匹配的节点?
最简单优雅高效的方法是什么?
在文本框的KeyPress事件当中,编写如下代码即可:
using System.Linq;
private ListViewItem LastItem;
private void teFind_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != 13 || lvDevice.Items.Count == 0) return;
if (LastItem != null) LastItem.BackColor = Color.White;
int skip = LastItem == null ? 0 : LastItem.Index + 1;
LastItem = lvDevice.Items.Cast<ListViewItem>().Skip(skip).FirstOrDefault(x => x.Text.Contains(teFind.Text));
if (LastItem != null)
{
LastItem.BackColor = Color.Yellow;
LastItem.Focused = true;
LastItem.EnsureVisible();
}
}
上面的代码,可以简单快速去不断搜索到匹配的节点,而且可以不断循环查找!