方法 : ListView コントロールに検索機能を追加する
ListView コントロールで大きな項目リストを使用するときは、多くの場合、ユーザーに検索機能を提供する必要があります。 ListView コントロールは、テキスト一致および位置検索という 2 つの方法でこの機能を提供します。
FindItemWithText メソッドを使用すると、検索文字列とオプションの開始インデックスと終了インデックスを指定して、リスト ビューや詳細ビューの ListView でテキスト検索を実行できます。 これと対照的に、FindNearestItem メソッドを使用すると、x 座標と y 座標および検索方向を指定して、アイコン ビューや並べて表示ビューの ListView で項目を検索できます。
テキストを使用して項目を検索するには
View プロパティを Details または List に設定して ListView を作成し、ListView に項目を設定します。
FindItemWithText メソッドを呼び出して、検索項目のテキストを渡します。
次のコード例は、基本的な ListView を作成して項目を設定し、ユーザーによるテキスト入力を使用してリスト内の項目を検索する方法を示しています。
Private textListView As New ListView()
Private WithEvents searchBox As New TextBox()
Private Sub InitializeTextSearchListView()
searchBox.Location = New Point(150, 20)
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 ListView with items.
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")})
' Add the controls to the form.
Me.Controls.Add(textListView)
Me.Controls.Add(searchBox)
End Sub
Private Sub searchBox_TextChanged(ByVal sender As Object, ByVal e As EventArgs) _
Handles searchBox.TextChanged
' Call FindItemWithText with the contents of the textbox.
Dim foundItem As ListViewItem = _
textListView.FindItemWithText(searchBox.Text, False, 0, True)
If (foundItem IsNot Nothing) Then
textListView.TopItem = foundItem
End If
End Sub
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;
}
}
private:
ListView^ textListView;
TextBox^ searchBox;
private:
void InitializeTextSearchListView()
{
textListView = gcnew ListView();
searchBox = gcnew TextBox();
searchBox->Location = Point(150, 20);
textListView->Scrollable = true;
textListView->Width = 100;
// Set the View to list to use the FindItemWithText method.
textListView->View = View::List;
// Populate the ListViewWithItems
textListView->Items->AddRange(gcnew array<ListViewItem^>{
gcnew ListViewItem("Amy Alberts"),
gcnew ListViewItem("Amy Recker"),
gcnew ListViewItem("Erin Hagens"),
gcnew ListViewItem("Barry Johnson"),
gcnew ListViewItem("Jay Hamlin"),
gcnew ListViewItem("Brian Valentine"),
gcnew ListViewItem("Brian Welker"),
gcnew ListViewItem("Daniel Weisman") });
// Handle the TextChanged to get the text for our search.
searchBox->TextChanged += gcnew EventHandler(this,
&Form1::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 != nullptr)
{
textListView->TopItem = foundItem;
}
}
x 座標と y 座標を使用して項目を検索するには
View プロパティを SmallIcon または LargeIcon に設定して ListView を作成し、ListView に項目を設定します。
FindNearestItem メソッドを呼び出して、適切な x 座標と y 座標および検索方向を渡します。
次のコード例は、基本アイコン ListView を作成して項目を設定し、MouseDown イベントをキャプチャして、最も近い項目を上方向に検索する方法を示しています。
Private WithEvents iconListView As New ListView()
Private previousItemBox As New TextBox()
Private Sub InitializeLocationSearchListView()
previousItemBox.Location = New Point(150, 20)
' Create an image list for the icon ListView.
iconListView.LargeImageList = New ImageList()
' Add an image to the ListView large icon list.
iconListView.LargeImageList.Images.Add(New Bitmap(GetType(Control), "Edit.bmp"))
' Set the view to large icon and add some items with the image
' in the image list.
iconListView.View = View.SmallIcon
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)})
Me.Controls.Add(iconListView)
Me.Controls.Add(previousItemBox)
End Sub
Sub iconListView_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) _
Handles iconListView.MouseDown
' Find the next item up from where the user clicked.
Dim foundItem As ListViewItem = _
iconListView.FindNearestItem(SearchDirectionHint.Up, e.X, e.Y)
' Display the results in a textbox.
If (foundItem IsNot Nothing) Then
previousItemBox.Text = foundItem.Text
Else
previousItemBox.Text = "No item found"
End If
End Sub
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";
}
ListView^ iconListView;
TextBox^ previousItemBox;
private:
void InitializeLocationSearchListView()
{
previousItemBox = gcnew TextBox();
iconListView = gcnew ListView();
previousItemBox->Location = Point(150, 20);
// Create an image list for the icon ListView.
iconListView->SmallImageList = gcnew ImageList();
// Add an image to the ListView small icon list.
iconListView->SmallImageList->Images->Add(
gcnew Bitmap(Control::typeid, "Edit.bmp"));
// Set the view to small icon and add some items with the image
// in the image list.
iconListView->View = View::SmallIcon;
iconListView->Items->AddRange(gcnew array<ListViewItem^>{
gcnew ListViewItem("Amy Alberts", 0),
gcnew ListViewItem("Amy Recker", 0),
gcnew ListViewItem("Erin Hagens", 0),
gcnew ListViewItem("Barry Johnson", 0),
gcnew ListViewItem("Jay Hamlin", 0),
gcnew ListViewItem("Brian Valentine", 0),
gcnew ListViewItem("Brian Welker", 0),
gcnew ListViewItem("Daniel Weisman", 0) });
this->Controls->Add(iconListView);
this->Controls->Add(previousItemBox);
// Handle the MouseDown event to capture user input.
iconListView->MouseDown += gcnew MouseEventHandler(
this, &Form1::iconListView_MouseDown);
}
void iconListView_MouseDown(Object^ sender, MouseEventArgs^ e)
{
// Find the next item up from where the user clicked.
ListViewItem^ foundItem = iconListView->FindNearestItem(
SearchDirectionHint::Up, e->X, e->Y);
// Display the results in a textbox..
if (foundItem != nullptr)
{
previousItemBox->Text = foundItem->Text;
}
else
{
previousItemBox->Text = "No item found";
}
}
参照
処理手順
方法 : Windows フォーム ListView コントロールで項目を追加および削除する
参照
ListView コントロールの概要 (Windows フォーム)