Практическое руководство. Добавление в элемент управления ListView возможностей поиска
Иногда при работе с большой список элементов в ListView элемента управления, необходимо предоставить пользователям возможности поиска. ListView Управления обеспечивает такую функцию двумя разными способами: совпадений текста и поиск расположения.
FindItemWithText Метод позволяет выполнять поиск текста на ListView в представлении списка или подробных сведений, учитывая строку поиска и необязательного начального и конечного индекса. Напротив FindNearestItem метод позволяет находить элементы в ListView в представлении значок или элемент, определенный набор координат x и y и направление для поиска.
Чтобы найти элемент с использованием текста
Создание ListView с View свойству присвоено Details или List, а затем заполнить ListView с элементами.
Вызовите FindItemWithText , передавая текст элемента, который вы хотите найти.
В следующем примере кода показано, как создать простую ListView, заполнить его элементами и использовать введенный текст от пользователя для поиска элемента в списке.
private ListView textListView = new ListView();
private TextBox searchBox = new TextBox();
private void InitializeTextSearchListView()
{
searchBox.Location = new Point(10, 60);
textListView.Scrollable = true;
textListView.Width = 80;
textListView.Height = 50;
// Set the View to list to use the FindItemWithText method.
textListView.View = View.List;
// Populate the ListViewWithItems
textListView.Items.AddRange(new ListViewItem[]{
new ListViewItem("Amy Alberts"),
new ListViewItem("Amy Recker"),
new ListViewItem("Erin Hagens"),
new ListViewItem("Barry Johnson"),
new ListViewItem("Jay Hamlin"),
new ListViewItem("Brian Valentine"),
new ListViewItem("Brian Welker"),
new ListViewItem("Daniel Weisman") });
// Handle the TextChanged to get the text for our search.
searchBox.TextChanged += new EventHandler(searchBox_TextChanged);
// Add the controls to the form.
this.Controls.Add(textListView);
this.Controls.Add(searchBox);
}
private void searchBox_TextChanged(object sender, EventArgs e)
{
// Call FindItemWithText with the contents of the textbox.
ListViewItem foundItem =
textListView.FindItemWithText(searchBox.Text, false, 0, true);
if (foundItem != null)
{
textListView.TopItem = foundItem;
}
}
Чтобы найти элемент с помощью координат x и y
Создание ListView с View свойству присвоено SmallIcon или LargeIcon, а затем заполнить ListView с элементами.
Вызовите FindNearestItem , передавая нужные координаты x и y- и направление, нужно выполнить поиск.
В следующем примере кода показано, как создать базовый значков ListView, заполнить его элементами и захватите MouseDown событий для поиска ближайшего элемента по оси вверх.
ListView iconListView = new ListView();
TextBox previousItemBox = new TextBox();
private void InitializeLocationSearchListView()
{
previousItemBox.Location = new Point(150, 20);
// Create an image list for the icon ListView.
iconListView.LargeImageList = new ImageList();
iconListView.Height = 400;
// Add an image to the ListView large icon list.
iconListView.LargeImageList.Images.Add(
new Bitmap(typeof(Control), "Edit.bmp"));
// Set the view to large icon and add some items with the image
// in the image list.
iconListView.View = View.LargeIcon;
iconListView.Items.AddRange(new ListViewItem[]{
new ListViewItem("Amy Alberts", 0),
new ListViewItem("Amy Recker", 0),
new ListViewItem("Erin Hagens", 0),
new ListViewItem("Barry Johnson", 0),
new ListViewItem("Jay Hamlin", 0),
new ListViewItem("Brian Valentine", 0),
new ListViewItem("Brian Welker", 0),
new ListViewItem("Daniel Weisman", 0) });
this.Controls.Add(iconListView);
this.Controls.Add(previousItemBox);
// Handle the MouseDown event to capture user input.
iconListView.MouseDown +=
new MouseEventHandler(iconListView_MouseDown);
//iconListView.MouseWheel += new MouseEventHandler(iconListView_MouseWheel);
}
void iconListView_MouseDown(object sender, MouseEventArgs e)
{
// Find the an item above where the user clicked.
ListViewItem foundItem =
iconListView.FindNearestItem(SearchDirectionHint.Up, e.X, e.Y);
// Display the results in a textbox..
if (foundItem != null)
previousItemBox.Text = foundItem.Text;
else
previousItemBox.Text = "No item found";
}