public ref class ListView : System::Windows::Forms::Control
public class ListView : System.Windows.Forms.Control
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDispatch)]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Windows.Forms.Docking(System.Windows.Forms.DockingBehavior.Ask)]
public class ListView : System.Windows.Forms.Control
[System.Windows.Forms.Docking(System.Windows.Forms.DockingBehavior.Ask)]
public class ListView : System.Windows.Forms.Control
type ListView = class
inherit Control
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDispatch)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Windows.Forms.Docking(System.Windows.Forms.DockingBehavior.Ask)>]
type ListView = class
inherit Control
[<System.Windows.Forms.Docking(System.Windows.Forms.DockingBehavior.Ask)>]
type ListView = class
inherit Control
Public Class ListView
Inherits Control
ListView
下面的代码示例创建一个控件,其中为每个项指定了三
ListViewItem
个
ListView
对象和三个
ListViewItem.ListViewSubItem
对象。 该示例还创建
ColumnHeader
对象以在详细信息视图中显示子项。 此外,在代码示例中创建两
ImageList
个对象来为
ListViewItem
对象提供图像。 这些
ImageList
对象将添加到
LargeImageList
和
SmallImageList
属性中。 该示例在创建
ListView
控件时使用以下属性:
LabelEdit
AllowColumnReorder
CheckBoxes
FullRowSelect
GridLines
Sorting
此示例要求已将代码添加到 ,
Form
并从窗体上的构造函数或另一个方法调用在示例中创建的方法。 该示例还要求名为
MySmallImage1
、
MySmallImage2
、
MyLargeImage1
和
MyLargeImage2
的映像位于驱动器 C 的根目录中。
private:
void CreateMyListView()
// Create a new ListView control.
ListView^ listView1 = gcnew ListView;
listView1->Bounds = Rectangle(Point(10,10),System::Drawing::Size( 300, 200 ));
// Set the view to show details.
listView1->View = View::Details;
// Allow the user to edit item text.
listView1->LabelEdit = true;
// Allow the user to rearrange columns.
listView1->AllowColumnReorder = true;
// Display check boxes.
listView1->CheckBoxes = true;
// Select the item and subitems when selection is made.
listView1->FullRowSelect = true;
// Display grid lines.
listView1->GridLines = true;
// Sort the items in the list in ascending order.
listView1->Sorting = SortOrder::Ascending;
// Create three items and three sets of subitems for each item.
ListViewItem^ item1 = gcnew ListViewItem( "item1",0 );
// Place a check mark next to the item.
item1->Checked = true;
item1->SubItems->Add( "1" );
item1->SubItems->Add( "2" );
item1->SubItems->Add( "3" );
ListViewItem^ item2 = gcnew ListViewItem( "item2",1 );
item2->SubItems->Add( "4" );
item2->SubItems->Add( "5" );
item2->SubItems->Add( "6" );
ListViewItem^ item3 = gcnew ListViewItem( "item3",0 );
// Place a check mark next to the item.
item3->Checked = true;
item3->SubItems->Add( "7" );
item3->SubItems->Add( "8" );
item3->SubItems->Add( "9" );
// Create columns for the items and subitems.
// Width of -2 indicates auto-size.
listView1->Columns->Add( "Item Column", -2, HorizontalAlignment::Left );
listView1->Columns->Add( "Column 2", -2, HorizontalAlignment::Left );
listView1->Columns->Add( "Column 3", -2, HorizontalAlignment::Left );
listView1->Columns->Add( "Column 4", -2, HorizontalAlignment::Center );
//Add the items to the ListView.
array<ListViewItem^>^temp1 = {item1,item2,item3};
listView1->Items->AddRange( temp1 );
// Create two ImageList objects.
ImageList^ imageListSmall = gcnew ImageList;
ImageList^ imageListLarge = gcnew ImageList;
// Initialize the ImageList objects with bitmaps.
imageListSmall->Images->Add( Bitmap::FromFile( "C:\\MySmallImage1.bmp" ) );
imageListSmall->Images->Add( Bitmap::FromFile( "C:\\MySmallImage2.bmp" ) );
imageListLarge->Images->Add( Bitmap::FromFile( "C:\\MyLargeImage1.bmp" ) );
imageListLarge->Images->Add( Bitmap::FromFile( "C:\\MyLargeImage2.bmp" ) );
//Assign the ImageList objects to the ListView.
listView1->LargeImageList = imageListLarge;
listView1->SmallImageList = imageListSmall;
// Add the ListView to the control collection.
this->Controls->Add( listView1 );
private void CreateMyListView()
// Create a new ListView control.
ListView listView1 = new ListView();
listView1.Bounds = new Rectangle(new Point(10,10), new Size(300,200));
// Set the view to show details.
listView1.View = View.Details;
// Allow the user to edit item text.
listView1.LabelEdit = true;
// Allow the user to rearrange columns.
listView1.AllowColumnReorder = true;
// Display check boxes.
listView1.CheckBoxes = true;
// Select the item and subitems when selection is made.
listView1.FullRowSelect = true;
// Display grid lines.
listView1.GridLines = true;
// Sort the items in the list in ascending order.
listView1.Sorting = SortOrder.Ascending;
// Create three items and three sets of subitems for each item.
ListViewItem item1 = new ListViewItem("item1",0);
// Place a check mark next to the item.
item1.Checked = true;
item1.SubItems.Add("1");
item1.SubItems.Add("2");
item1.SubItems.Add("3");
ListViewItem item2 = new ListViewItem("item2",1);
item2.SubItems.Add("4");
item2.SubItems.Add("5");
item2.SubItems.Add("6");
ListViewItem item3 = new ListViewItem("item3",0);
// Place a check mark next to the item.
item3.Checked = true;
item3.SubItems.Add("7");
item3.SubItems.Add("8");
item3.SubItems.Add("9");
// Create columns for the items and subitems.
// Width of -2 indicates auto-size.
listView1.Columns.Add("Item Column", -2, HorizontalAlignment.Left);
listView1.Columns.Add("Column 2", -2, HorizontalAlignment.Left);
listView1.Columns.Add("Column 3", -2, HorizontalAlignment.Left);
listView1.Columns.Add("Column 4", -2, HorizontalAlignment.Center);
//Add the items to the ListView.
listView1.Items.AddRange(new ListViewItem[]{item1,item2,item3});
// Create two ImageList objects.
ImageList imageListSmall = new ImageList();
ImageList imageListLarge = new ImageList();
// Initialize the ImageList objects with bitmaps.
imageListSmall.Images.Add(Bitmap.FromFile("C:\\MySmallImage1.bmp"));
imageListSmall.Images.Add(Bitmap.FromFile("C:\\MySmallImage2.bmp"));
imageListLarge.Images.Add(Bitmap.FromFile("C:\\MyLargeImage1.bmp"));
imageListLarge.Images.Add(Bitmap.FromFile("C:\\MyLargeImage2.bmp"));
//Assign the ImageList objects to the ListView.
listView1.LargeImageList = imageListLarge;
listView1.SmallImageList = imageListSmall;
// Add the ListView to the control collection.
this.Controls.Add(listView1);
Private Sub CreateMyListView()
' Create a new ListView control.
Dim listView1 As New ListView()
listView1.Bounds = New Rectangle(New Point(10, 10), New Size(300, 200))
' Set the view to show details.
listView1.View = View.Details
' Allow the user to edit item text.
listView1.LabelEdit = True
' Allow the user to rearrange columns.
listView1.AllowColumnReorder = True
' Display check boxes.
listView1.CheckBoxes = True
' Select the item and subitems when selection is made.
listView1.FullRowSelect = True
' Display grid lines.
listView1.GridLines = True
' Sort the items in the list in ascending order.
listView1.Sorting = SortOrder.Ascending
' Create three items and three sets of subitems for each item.
Dim item1 As New ListViewItem("item1", 0)
' Place a check mark next to the item.
item1.Checked = True
item1.SubItems.Add("1")
item1.SubItems.Add("2")
item1.SubItems.Add("3")
Dim item2 As New ListViewItem("item2", 1)
item2.SubItems.Add("4")
item2.SubItems.Add("5")
item2.SubItems.Add("6")
Dim item3 As New ListViewItem("item3", 0)
' Place a check mark next to the item.
item3.Checked = True
item3.SubItems.Add("7")
item3.SubItems.Add("8")
item3.SubItems.Add("9")
' Create columns for the items and subitems.
' Width of -2 indicates auto-size.
listView1.Columns.Add("Item Column", -2, HorizontalAlignment.Left)
listView1.Columns.Add("Column 2", -2, HorizontalAlignment.Left)
listView1.Columns.Add("Column 3", -2, HorizontalAlignment.Left)
listView1.Columns.Add("Column 4", -2, HorizontalAlignment.Center)
'Add the items to the ListView.
listView1.Items.AddRange(New ListViewItem() {item1, item2, item3})
' Create two ImageList objects.
Dim imageListSmall As New ImageList()
Dim imageListLarge As New ImageList()
' Initialize the ImageList objects with bitmaps.
imageListSmall.Images.Add(Bitmap.FromFile("C:\MySmallImage1.bmp"))
imageListSmall.Images.Add(Bitmap.FromFile("C:\MySmallImage2.bmp"))
imageListLarge.Images.Add(Bitmap.FromFile("C:\MyLargeImage1.bmp"))
imageListLarge.Images.Add(Bitmap.FromFile("C:\MyLargeImage2.bmp"))
'Assign the ImageList objects to the ListView.
listView1.LargeImageList = imageListLarge
listView1.SmallImageList = imageListSmall
' Add the ListView to the control collection.
Me.Controls.Add(listView1)
End Sub
ListView
控件允许显示包含项文本的项列表以及用于标识项类型的图标(可选)。 例如,Windows 资源管理器文件列表的外观与
ListView
控件类似。 它显示树中当前选定的文件和文件夹的列表。 每个文件和文件夹都显示与其关联的图标,以帮助标识文件或文件夹的类型。 类
ListViewItem
表示 控件中的项
ListView
。 列表中显示的项可以以五种不同视图之一显示。 项目可以显示为大图标、小图标或垂直列表中的小图标。 项还可以包含子项,其中包含与父项相关的信息。 通过详细信息视图,可以在网格中显示项及其子项,其中列标题标识子项中显示的信息。 磁贴视图的可用性有限,如下所述,使你可以将项及其子项显示为包含文本信息旁边的大图标的磁贴。
ListView
支持单选或多选。 多选功能允许用户以类似于
ListBox
控件的方式从项列表中进行选择。 此外,用户可以激活所选项来执行任务。 例如,可以使用 控件
ListView
显示应用程序随后可以打开和利用的文件列表。 用户可以选择要打开的文件,然后双击它们以激活项目并在应用程序中打开文件。
ListView
还可以使用
CheckBoxes
属性显示检查框,以允许用户检查要对其执行操作的项。 可以通过多种方式使用该
ListView
控件。 控件可用于显示应用程序、数据库或文本文件中的信息。
ListView
还可用于从用户获取信息,例如选择要处理的一组文件。
ListView
提供了大量属性,这些属性在外观和行为方面提供了灵活性。 属性
View
允许更改项的显示方式。 使用
LargeImageList
、
SmallImageList
和
StateImageList
属性可以指定
ImageList
对象,这些对象包含为项显示的图像,对于 ,
StateImageList
检查当 属性设置为
true
时
CheckBoxes
显示的框。 若要确定要检查的项,可以使用
CheckedItems
属性访问
ListView.CheckedListViewItemCollection
集合。 属性
Columns
允许访问
ListView.ColumnHeaderCollection
,后者存储控件的 属性设置为
Details
时
View
显示的列标题。 通过
Items
属性从
ListView
中添加和删除项。 属性
Items
允许你访问
ListView.ListViewItemCollection
控件的 ,该控件提供用于操作控件中的项的方法。 如果要允许用户编辑项的文本,可以使用
LabelEdit
属性。 当控件包含大量项时,用户通常更容易在排序列表中查看它们。 可以使用
Sorting
属性按字母顺序对项进行排序。 还可以完全自定义控件的外观
ListView
。 为此,请将
OwnerDraw
属性设置为
true
并处理以下一个或多个事件:
DrawItem
、
DrawSubItem
、
DrawColumnHeader
。
当控件的
ListView
属性设置为
Details
时,
View
将使用 控件的许多属性。 属性
AllowColumnReorder
允许控件的
ListView
用户在运行时重新配置列的顺序。 属性
FullRowSelect
允许选择项及其子项,而不仅仅是该项。 若要在详细信息视图中显示网格线以标识 中的
ListView
项和子项的边界,可以使用
GridLines
属性。 属性
HeaderStyle
允许您指定要显示的列标题的类型。
ListView
控件可以在虚拟模式下运行,其中
ListViewItem
对象是动态生成的,而不是存储在集合中
Items
。 这对于处理内容经常更改的非常大的列表或列表很有用。 若要启用虚拟模式,请将
VirtualMode
属性设置为
true
并处理
RetrieveVirtualItem
、
CacheVirtualItems
和
SearchForVirtualItem
事件。
除了可用于
ListView
控件的许多属性外,还有一些方法和事件可供应用程序用来为
ListView
提供其他功能。
BeginUpdate
通过 和
EndUpdate
方法,可以在向 中添加多个项
ListView
时提高性能,方法是防止控件在每次添加项时重新绘制。
ListView
如果控件显示项和子项,你可能希望在用户右键单击子项时提供功能。 若要确定要单击其子项的项,可以使用
GetItemAt
方法。 在用户编辑项目后对项目执行验证时,可能需要向用户显示要更改的特定项。
EnsureVisible
可以调用 方法,以确保特定项位于控件的可见区域中。
如果 属性
LabelEdit
设置为
true
,则可以执行一些任务,例如通过为
BeforeLabelEdit
和
AfterLabelEdit
事件创建事件处理程序来验证文本更改之前和之后正在编辑的文本。 若要执行打开文件或显示对话框等任务以编辑 中显示的
ListView
项,可以为 事件创建事件处理程序
ItemActivate
。 如果允许用户在单击列标题时对 中的
ListView
项进行排序,则可以为
ColumnClick
事件创建事件处理程序来执行排序。 当 属性
CheckBoxes
设置为
true
时,可以通过处理
ItemCheck
事件来确定项的检查状态何时发生更改。
还可以使用
BackgroundImage
属性设置 的背景
ListView
图像。 应用程序必须在其
Main
方法上具有
STAThreadAttribute
,才能正确显示控件的背景图像
ListView
。 此外,如果具有背景图像的
ListView
控件托管在 Internet Explorer 中,请在应用程序清单文件中将 comctl32.dll 版本 6.0 指定为依赖程序集,以确保背景图像显示属性。
Windows XP 和 Windows Server 2003 提供三项功能,这些功能可在应用程序调用
Application.EnableVisualStyles
方法时增强
ListView
控件:磁贴视图、分组和插入标记。
通过磁贴视图,可以通过在大图标旁边显示项和子项文本来平衡图形和文本信息。 将
View
属性设置为
View.Tile
以启用此行为。
分组功能使你可以直观地将项分组到相关类别中。 如果要启用此功能,
Groups
ListView
请使用 属性将对象添加到
ListViewGroup
控件。 若要暂时禁用该功能,请将
ShowGroups
属性设置为
false
。
借助插入标记功能,可以通过视觉反馈提供拖放项重新定位,以指示放置位置。
ListViewInsertionMark
使用通过
InsertionMark
属性检索到的对象来显示插入标记。
这些功能仅在 Windows XP 和 Windows Server 2003 下可用。 在较早的操作系统中,与这些功能相关的代码不起作用,磁贴视图显示为大图标视图,并且不显示插入标记和组。 在某些情况下,你可能希望包含用于确定这些功能是否可用的代码,并在这些功能不可用时提供备用功能。 这些功能由提供操作系统主题功能的同一库提供。 若要检查此库的可用性,请调用
FeatureSupport.IsPresent(Object)
方法重载并传入
OSFeature.Themes
值。
下表显示了一些
ListView
成员及其有效视图。
ListView 成员