У меня есть ListView
с элементами, и я хочу создать фильтр, который покажет мне только элементы, содержащие слово, написанное в TextBox
. Я пытался:
bool containsAnyLetter = textBox2.Text.IndexOfAny(letters) >= 0;
Что код для заполнения ListView
:
private void button1_Click_1(object sender, EventArgs e)
{
listView1.Items.Clear();
listView2.Items.Clear();
int places, count;
string keyword, site;
count = 1;
keyword = keywords.Text;
site = sites.Text;
places = Convert.ToInt32(textBox1.Text);
var client = new GwebSearchClient("http://www.google.com");
var results = client.Search(keyword, places);
foreach (var webResult in results)
{
ListViewItem item = listView1.Items.Add(count++ + " " + webResult.ToString());
item.SubItems.Add(string.Empty);
ListViewItem itemz = listView2.Items.Add(webResult.Url.ToString());
listView1.FullRowSelect = true;
}
}
Теперь я хочу сделать что-то подобное, но он должен обменивать текущие элементы списка, только то, что содержит слово в TextBox
.
if (listView2.Items.ToString().Contains(textBox2.Text))
{
//the should exchange the listview items for a that one which contains a word from a textbox.
}
Но, похоже, это плохо работает. Есть ли другой способ найти и показать элементы, содержащие слово в TextBox
?
Другим способом сделать это было бы включение элементов ListView в IEnumerable и использование Linq для выполнения запроса.
IEnumerable<ListViewItem> lv = listViewItems.Items.Cast<ListViewItem>();
var matchingItems = lv.Where(i => i.Text.Contains(textBoxCriteria.Text));
Вы можете перемещаться по Listbox
и проверять, содержит ли элемент это слово, но вы не можете скрыть элемент, потому что ListBox не может этого сделать. У вас есть выбор:
1. Скройте фактический ListBox и создайте новый в том же месте ИЛИ
2. Используйте WPF.
Используйте этот код, чтобы проверить, содержит ли элемент текст в текстовом поле:
foreach (var listBoxItem in listBox1.Items)
{
if(listBoxItem.ToString().Contains(txtBox.Text))
{
//Item contains word, do something
}
}
WpfHost
управления WpfHost