ListView.Groups プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
コントロールに割り当てられた ListViewGroup オブジェクトのコレクションを取得します。
public:
property System::Windows::Forms::ListViewGroupCollection ^ Groups { System::Windows::Forms::ListViewGroupCollection ^ get(); };
public System.Windows.Forms.ListViewGroupCollection Groups { get; }
member this.Groups : System.Windows.Forms.ListViewGroupCollection
Public ReadOnly Property Groups As ListViewGroupCollection
プロパティ値
ListViewGroupCollection コントロール内のすべてのグループを格納する ListView。
例
次のコード例では、グループ化機能を使用して、詳細ビューの ListView サブ項目値で項目を整理する方法を示します。 このグループ化の形式は、Windows エクスプローラーで使用されるグループ化に似ています。 この例では、グループは動的に作成されます。 サブ項目列ごとに、一意のサブ項目値ごとに 1 つのグループが作成されます。 親項目列の場合、一意の最初の文字ごとに 1 つのグループが作成されます。 列のヘッダーをクリックすると、その列に対して作成されたグループに項目が並べ替えられます。 同じ列ヘッダーをもう一度クリックすると、グループの順序が逆になります。
#using <mscorlib.dll>
#using <System.Drawing.dll>
#using <System.dll>
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Collections;
using namespace System::Windows::Forms;
public ref class ListViewGroupsExample : public Form
{
private:
ListView^ myListView;
bool isRunningXPOrLater;
// Declare a Hashtable array in which to store the groups.
array<Hashtable^>^ groupTables;
// Declare a variable to store the current grouping column.
int groupColumn;
public:
ListViewGroupsExample()
{
groupColumn = 0;
// Initialize myListView.
myListView = gcnew ListView();
myListView->Dock = DockStyle::Fill;
myListView->View = View::Details;
myListView->Sorting = SortOrder::Ascending;
// Create and initialize column headers for myListView.
ColumnHeader^ columnHeader0 = gcnew ColumnHeader();
columnHeader0->Text = "Title";
columnHeader0->Width = -1;
ColumnHeader^ columnHeader1 = gcnew ColumnHeader();
columnHeader1->Text = "Author";
columnHeader1->Width = -1;
ColumnHeader^ columnHeader2 = gcnew ColumnHeader();
columnHeader2->Text = "Year";
columnHeader2->Width = -1;
// Add the column headers to myListView.
array<ColumnHeader^>^ temp0 = {columnHeader0, columnHeader1, columnHeader2};
myListView->Columns->AddRange(temp0);
// Add a handler for the ColumnClick event.
myListView->ColumnClick +=
gcnew ColumnClickEventHandler(this, &ListViewGroupsExample::myListView_ColumnClick);
// Create items and add them to myListView.
array<String^>^ temp1 = {"Programming Windows", "Petzold, Charles", "1998"};
ListViewItem^ item0 = gcnew ListViewItem( temp1 );
array<String^>^ temp2 = {"Code: The Hidden Language of Computer Hardware and Software",
"Petzold, Charles", "2000"};
ListViewItem^ item1 = gcnew ListViewItem( temp2 );
array<String^>^ temp3 = {"Programming Windows with C#", "Petzold, Charles", "2001"};
ListViewItem^ item2 = gcnew ListViewItem( temp3 );
array<String^>^ temp4 = {"Coding Techniques for Microsoft Visual Basic .NET",
"Connell, John", "2001"};
ListViewItem^ item3 = gcnew ListViewItem( temp4 );
array<String^>^ temp5 = {"C# for Java Developers", "Jones, Allen & Freeman, Adam",
"2002"};
ListViewItem^ item4 = gcnew ListViewItem( temp5 );
array<String^>^ temp6 = {"Microsoft .NET XML Web Services Step by Step",
"Jones, Allen & Freeman, Adam", "2002"};
ListViewItem^ item5 = gcnew ListViewItem( temp6 );
array<ListViewItem^>^ temp7 = {item0, item1, item2, item3, item4, item5};
myListView->Items->AddRange( temp7 );
// Determine whether Windows XP or a later
// operating system is present.
isRunningXPOrLater = false;
if (System::Environment::OSVersion->Version->Major > 5 ||
( System::Environment::OSVersion->Version->Major == 5 &&
System::Environment::OSVersion->Version->Minor >= 1) )
{
isRunningXPOrLater = true;
}
if (isRunningXPOrLater)
{
// Create the groupsTable array and populate it with one
// hash table for each column.
groupTables = gcnew array<Hashtable^>(myListView->Columns->Count);
for (int column = 0; column < myListView->Columns->Count; column++)
{
// Create a hash table containing all the groups
// needed for a single column.
groupTables[column] = CreateGroupsTable(column);
}
// Start with the groups created for the Title column.
SetGroups(0);
}
// Initialize the form.
this->Controls->Add(myListView);
this->Size = System::Drawing::Size(550, 330);
this->Text = "ListView Groups Example";
}
// Groups the items using the groups created for the clicked
// column.
private:
void myListView_ColumnClick(
Object^ /*sender*/, ColumnClickEventArgs^ e)
{
// Set the sort order to ascending when changing
// column groups; otherwise, reverse the sort order.
if ( myListView->Sorting == SortOrder::Descending ||
( isRunningXPOrLater && (e->Column != groupColumn) ) )
{
myListView->Sorting = SortOrder::Ascending;
}
else
{
myListView->Sorting = SortOrder::Descending;
}
groupColumn = e->Column;
// Set the groups to those created for the clicked column.
if (isRunningXPOrLater)
{
SetGroups(e->Column);
}
}
// Sets myListView to the groups created for the specified column.
private:
void SetGroups(int column)
{
// Remove the current groups.
myListView->Groups->Clear();
// Retrieve the hash table corresponding to the column.
Hashtable^ groups = dynamic_cast<Hashtable^>(groupTables[column]);
// Copy the groups for the column to an array.
array<ListViewGroup^>^ groupsArray = gcnew array<ListViewGroup^>(groups->Count);
groups->Values->CopyTo(groupsArray, 0);
// Sort the groups and add them to myListView.
Array::Sort(groupsArray, gcnew ListViewGroupSorter(myListView->Sorting));
myListView->Groups->AddRange(groupsArray);
// Iterate through the items in myListView, assigning each
// one to the appropriate group.
IEnumerator^ myEnum = myListView->Items->GetEnumerator();
while (myEnum->MoveNext())
{
ListViewItem^ item = safe_cast<ListViewItem^>(myEnum->Current);
// Retrieve the subitem text corresponding to the column.
String^ subItemText = item->SubItems[column]->Text;
// For the Title column, use only the first letter.
if (column == 0)
{
subItemText = subItemText->Substring(0, 1);
}
// Assign the item to the matching group.
item->Group = dynamic_cast<ListViewGroup^>(groups[subItemText]);
}
}
// Creates a Hashtable object with one entry for each unique
// subitem value (or initial letter for the parent item)
// in the specified column.
private:
Hashtable^ CreateGroupsTable(int column)
{
// Create a Hashtable object.
Hashtable^ groups = gcnew Hashtable();
// Iterate through the items in myListView.
IEnumerator^ myEnum1 = myListView->Items->GetEnumerator();
while (myEnum1->MoveNext())
{
ListViewItem^ item = safe_cast<ListViewItem^>(myEnum1->Current);
// Retrieve the text value for the column.
String^ subItemText = item->SubItems[column]->Text;
// Use the initial letter instead if it is the first column.
if (column == 0)
{
subItemText = subItemText->Substring(0, 1);
}
// If the groups table does not already contain a group
// for the subItemText value, add a new group using the
// subItemText value for the group header and Hashtable key.
if (!groups->Contains(subItemText))
{
groups->Add( subItemText, gcnew ListViewGroup(subItemText,
HorizontalAlignment::Left) );
}
}
// Return the Hashtable object.
return groups;
}
// Sorts ListViewGroup objects by header value.
ref class ListViewGroupSorter : public IComparer
{
private:
SortOrder order;
// Stores the sort order.
public:
ListViewGroupSorter(SortOrder theOrder)
{
order = theOrder;
}
// Compares the groups by header value, using the saved sort
// order to return the correct value.
virtual int Compare(Object^ x, Object^ y)
{
int result = String::Compare(
(dynamic_cast<ListViewGroup^>(x))->Header,
(dynamic_cast<ListViewGroup^>(y))->Header
);
if (order == SortOrder::Ascending)
{
return result;
}
else
{
return -result;
}
}
};
};
[STAThread]
int main()
{
Application::EnableVisualStyles();
Application::Run(gcnew ListViewGroupsExample());
}
using System;
using System.Collections;
using System.Windows.Forms;
public class ListViewGroupsExample : Form
{
private ListView myListView;
// Determine whether Windows XP or a later
// operating system is present.
private bool isRunningXPOrLater =
OSFeature.Feature.IsPresent(OSFeature.Themes);
// Declare a Hashtable array in which to store the groups.
private Hashtable[] groupTables;
// Declare a variable to store the current grouping column.
int groupColumn = 0;
public ListViewGroupsExample()
{
// Initialize myListView.
myListView = new ListView();
myListView.Dock = DockStyle.Fill;
myListView.View = View.Details;
myListView.Sorting = SortOrder.Ascending;
// Create and initialize column headers for myListView.
ColumnHeader columnHeader0 = new ColumnHeader();
columnHeader0.Text = "Title";
columnHeader0.Width = -1;
ColumnHeader columnHeader1 = new ColumnHeader();
columnHeader1.Text = "Author";
columnHeader1.Width = -1;
ColumnHeader columnHeader2 = new ColumnHeader();
columnHeader2.Text = "Year";
columnHeader2.Width = -1;
// Add the column headers to myListView.
myListView.Columns.AddRange(new ColumnHeader[]
{columnHeader0, columnHeader1, columnHeader2});
// Add a handler for the ColumnClick event.
myListView.ColumnClick +=
new ColumnClickEventHandler(myListView_ColumnClick);
// Create items and add them to myListView.
ListViewItem item0 = new ListViewItem( new string[]
{"Programming Windows",
"Petzold, Charles",
"1998"} );
ListViewItem item1 = new ListViewItem( new string[]
{"Code: The Hidden Language of Computer Hardware and Software",
"Petzold, Charles",
"2000"} );
ListViewItem item2 = new ListViewItem( new string[]
{"Programming Windows with C#",
"Petzold, Charles",
"2001"} );
ListViewItem item3 = new ListViewItem( new string[]
{"Coding Techniques for Microsoft Visual Basic .NET",
"Connell, John",
"2001"} );
ListViewItem item4 = new ListViewItem( new string[]
{"C# for Java Developers",
"Jones, Allen & Freeman, Adam",
"2002"} );
ListViewItem item5 = new ListViewItem( new string[]
{"Microsoft .NET XML Web Services Step by Step",
"Jones, Allen & Freeman, Adam",
"2002"} );
myListView.Items.AddRange(
new ListViewItem[] {item0, item1, item2, item3, item4, item5});
if (isRunningXPOrLater)
{
// Create the groupsTable array and populate it with one
// hash table for each column.
groupTables = new Hashtable[myListView.Columns.Count];
for (int column = 0; column < myListView.Columns.Count; column++)
{
// Create a hash table containing all the groups
// needed for a single column.
groupTables[column] = CreateGroupsTable(column);
}
// Start with the groups created for the Title column.
SetGroups(0);
}
// Initialize the form.
this.Controls.Add(myListView);
this.Size = new System.Drawing.Size(550, 330);
this.Text = "ListView Groups Example";
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new ListViewGroupsExample());
}
// Groups the items using the groups created for the clicked
// column.
private void myListView_ColumnClick(
object sender, ColumnClickEventArgs e)
{
// Set the sort order to ascending when changing
// column groups; otherwise, reverse the sort order.
if ( myListView.Sorting == SortOrder.Descending ||
( isRunningXPOrLater && (e.Column != groupColumn) ) )
{
myListView.Sorting = SortOrder.Ascending;
}
else
{
myListView.Sorting = SortOrder.Descending;
}
groupColumn = e.Column;
// Set the groups to those created for the clicked column.
if (isRunningXPOrLater)
{
SetGroups(e.Column);
}
}
// Sets myListView to the groups created for the specified column.
private void SetGroups(int column)
{
// Remove the current groups.
myListView.Groups.Clear();
// Retrieve the hash table corresponding to the column.
Hashtable groups = (Hashtable)groupTables[column];
// Copy the groups for the column to an array.
ListViewGroup[] groupsArray = new ListViewGroup[groups.Count];
groups.Values.CopyTo(groupsArray, 0);
// Sort the groups and add them to myListView.
Array.Sort(groupsArray, new ListViewGroupSorter(myListView.Sorting));
myListView.Groups.AddRange(groupsArray);
// Iterate through the items in myListView, assigning each
// one to the appropriate group.
foreach (ListViewItem item in myListView.Items)
{
// Retrieve the subitem text corresponding to the column.
string subItemText = item.SubItems[column].Text;
// For the Title column, use only the first letter.
if (column == 0)
{
subItemText = subItemText.Substring(0, 1);
}
// Assign the item to the matching group.
item.Group = (ListViewGroup)groups[subItemText];
}
}
// Creates a Hashtable object with one entry for each unique
// subitem value (or initial letter for the parent item)
// in the specified column.
private Hashtable CreateGroupsTable(int column)
{
// Create a Hashtable object.
Hashtable groups = new Hashtable();
// Iterate through the items in myListView.
foreach (ListViewItem item in myListView.Items)
{
// Retrieve the text value for the column.
string subItemText = item.SubItems[column].Text;
// Use the initial letter instead if it is the first column.
if (column == 0)
{
subItemText = subItemText.Substring(0, 1);
}
// If the groups table does not already contain a group
// for the subItemText value, add a new group using the
// subItemText value for the group header and Hashtable key.
if (!groups.Contains(subItemText))
{
groups.Add( subItemText, new ListViewGroup(subItemText,
HorizontalAlignment.Left) );
}
}
// Return the Hashtable object.
return groups;
}
// Sorts ListViewGroup objects by header value.
private class ListViewGroupSorter : IComparer
{
private SortOrder order;
// Stores the sort order.
public ListViewGroupSorter(SortOrder theOrder)
{
order = theOrder;
}
// Compares the groups by header value, using the saved sort
// order to return the correct value.
public int Compare(object x, object y)
{
int result = String.Compare(
((ListViewGroup)x).Header,
((ListViewGroup)y).Header
);
if (order == SortOrder.Ascending)
{
return result;
}
else
{
return -result;
}
}
}
}
Imports System.Collections
Imports System.Windows.Forms
Public Class ListViewGroupsExample
Inherits Form
Private myListView As ListView
' Determine whether Windows XP or a later
' operating system is present.
Private isRunningXPOrLater As Boolean = _
OSFeature.Feature.IsPresent(OSFeature.Themes)
' Declare a Hashtable array in which to store the groups.
Private groupTables() As Hashtable
' Declare a variable to store the current grouping column.
Private groupColumn As Integer = 0
Public Sub New()
' Initialize myListView.
myListView = New ListView()
myListView.Dock = DockStyle.Fill
myListView.View = View.Details
myListView.Sorting = SortOrder.Ascending
' Create and initialize column headers for myListView.
Dim columnHeader0 As New ColumnHeader()
columnHeader0.Text = "Title"
columnHeader0.Width = -1
Dim columnHeader1 As New ColumnHeader()
columnHeader1.Text = "Author"
columnHeader1.Width = -1
Dim columnHeader2 As New ColumnHeader()
columnHeader2.Text = "Year"
columnHeader2.Width = -1
' Add the column headers to myListView.
myListView.Columns.AddRange( New ColumnHeader() _
{columnHeader0, columnHeader1, columnHeader2} )
' Add a handler for the ColumnClick event.
AddHandler myListView.ColumnClick, AddressOf myListView_ColumnClick
' Create items and add them to myListView.
Dim item0 As New ListViewItem( New String() _
{"Programming Windows", _
"Petzold, Charles", _
"1998"} )
Dim item1 As New ListViewItem( New String() _
{"Code: The Hidden Language of Computer Hardware and Software", _
"Petzold, Charles", _
"2000"} )
Dim item2 As New ListViewItem( New String() _
{"Programming Windows with C#", _
"Petzold, Charles", _
"2001"} )
Dim item3 As New ListViewItem( New String() _
{"Coding Techniques for Microsoft Visual Basic .NET", _
"Connell, John", _
"2001"} )
Dim item4 As New ListViewItem( New String() _
{"C# for Java Developers", _
"Jones, Allen / Freeman, Adam", _
"2002"} )
Dim item5 As New ListViewItem( New String() _
{"Microsoft .NET XML Web Services Step by Step", _
"Jones, Allen / Freeman, Adam", _
"2002"} )
myListView.Items.AddRange( _
New ListViewItem() {item0, item1, item2, item3, item4, item5})
If isRunningXPOrLater
' Create the groupsTable array and populate it with one
' hash table for each column.
groupTables = New Hashtable(myListView.Columns.Count) {}
Dim column As Integer
For column = 0 To myListView.Columns.Count - 1
' Create a hash table containing all the groups
' needed for a single column.
groupTables(column) = CreateGroupsTable(column)
Next column
' Start with the groups created for the Title column.
SetGroups(0)
End If
' Initialize the form.
Me.Controls.Add(myListView)
Me.Size = New System.Drawing.Size(550, 330)
Me.Text = "ListView Groups Example"
End Sub
<STAThread()> _
Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New ListViewGroupsExample())
End Sub
' Groups the items using the groups created for the clicked
' column.
Private Sub myListView_ColumnClick( _
sender As Object, e As ColumnClickEventArgs)
' Set the sort order to ascending when changing
' column groups; otherwise, reverse the sort order.
If myListView.Sorting = SortOrder.Descending OrElse _
isRunningXPOrLater And e.Column <> groupColumn Then
myListView.Sorting = SortOrder.Ascending
Else
myListView.Sorting = SortOrder.Descending
End If
groupColumn = e.Column
' Set the groups to those created for the clicked column.
If isRunningXPOrLater Then
SetGroups(e.Column)
End If
End Sub
' Sets myListView to the groups created for the specified column.
Private Sub SetGroups(column As Integer)
' Remove the current groups.
myListView.Groups.Clear()
' Retrieve the hash table corresponding to the column.
Dim groups As Hashtable = CType(groupTables(column), Hashtable)
' Copy the groups for the column to an array.
Dim groupsArray(groups.Count - 1) As ListViewGroup
groups.Values.CopyTo(groupsArray, 0)
' Sort the groups and add them to myListView.
Array.Sort(groupsArray, New ListViewGroupSorter(myListView.Sorting))
myListView.Groups.AddRange(groupsArray)
' Iterate through the items in myListView, assigning each
' one to the appropriate group.
Dim item As ListViewItem
For Each item In myListView.Items
' Retrieve the subitem text corresponding to the column.
Dim subItemText As String = item.SubItems(column).Text
' For the Title column, use only the first letter.
If column = 0 Then
subItemText = subItemText.Substring(0, 1)
End If
' Assign the item to the matching group.
item.Group = CType(groups(subItemText), ListViewGroup)
Next item
End Sub
' Creates a Hashtable object with one entry for each unique
' subitem value (or initial letter for the parent item)
' in the specified column.
Private Function CreateGroupsTable(column As Integer) As Hashtable
' Create a Hashtable object.
Dim groups As New Hashtable()
' Iterate through the items in myListView.
Dim item As ListViewItem
For Each item In myListView.Items
' Retrieve the text value for the column.
Dim subItemText As String = item.SubItems(column).Text
' Use the initial letter instead if it is the first column.
If column = 0 Then
subItemText = subItemText.Substring(0, 1)
End If
' If the groups table does not already contain a group
' for the subItemText value, add a new group using the
' subItemText value for the group header and Hashtable key.
If Not groups.Contains(subItemText) Then
groups.Add( subItemText, New ListViewGroup(subItemText, _
HorizontalAlignment.Left) )
End If
Next item
' Return the Hashtable object.
Return groups
End Function 'CreateGroupsTable
' Sorts ListViewGroup objects by header value.
Private Class ListViewGroupSorter
Implements IComparer
Private order As SortOrder
' Stores the sort order.
Public Sub New(theOrder As SortOrder)
order = theOrder
End Sub
' Compares the groups by header value, using the saved sort
' order to return the correct value.
Public Function Compare(x As Object, y As Object) As Integer _
Implements IComparer.Compare
Dim result As Integer = String.Compare( _
CType(x, ListViewGroup).Header, _
CType(y, ListViewGroup).Header )
If order = SortOrder.Ascending Then
Return result
Else
Return -result
End If
End Function 'Compare
End Class
End Class
注釈
ListViewグループ化機能を使用すると、論理的に関連するListView項目の視覚的なグループを作成できます。 各グループは、テキスト ヘッダーの後に水平線と、そのグループに割り当てられた項目で構成されます。 ヘッダー テキストは、コントロールの左、右、または中央に配置できます。 コントロールに割り当てられたグループは、ListViewプロパティが 以外View.ListのView値に設定されるたびに表示されます。
ListView グループを使用すると、ユーザーはアイテムを便利なカテゴリに分けることで、探しているアイテムを見つけることができます。 必要なカテゴリを作成できます。 一般的な方法の 1 つは、リストの並べ替え方法に基づいて項目をグループ化することです。 たとえば、リストがアルファベット順に並べ替えられた場合はアイテム名の最初の文字で、詳細ビューで列ヘッダーをクリックしてリストが並べ替えられた場合は型や日付などのサブ項目で項目をグループ化できます。 Windows エクスプローラーでは、この種類のグループ化が使用されます。
グループ化機能を使用するには、コントロールのコレクションに Groups 1 つ以上ListViewGroupのオブジェクトをListView追加します。 コンストラクターでグループ ヘッダー のテキストとヘッダーの配置をListViewGroup設定するか、 プロパティと ListViewGroup.HeaderAlignment プロパティをListViewGroup.Header使用して設定します。
グループ化機能を一時的に無効にするには、 プロパティを ShowGroups に false
設定します。
項目をグループに割り当てるには、コンストラクターで ListViewItem グループを指定するか、 プロパティを ListViewItem.Group 設定するか、グループのコレクションに項目を ListViewGroup.Items 直接追加します。 すべてのアイテムを表示する前に、グループに割り当てる必要があります。 グループに割り当てられない項目は、ヘッダー ラベル "DefaultGroup{0}" を持つ既定のグループに表示されます。 既定のグループはコレクションに含まれていないの Groups で、変更できません。 主に、すべての項目がグループに適切に追加されていることを確認するためのデバッグに役立ちます。
アイテムは一度に 1 つのグループにのみ含めることができます。 アイテムが属するグループを変更するには、実行時に プロパティを ListViewItem.Group 設定するか、別のグループのコレクションに ListViewGroup.Items 追加して、アイテムを前のグループから自動的に削除します。
グループを使用する場合、挿入マーク機能は無効になります。 これは、グループ化機能はグループ メンバーシップ別に項目を並べ替えるのに対し、挿入マーク機能は、項目の順序をまだ指定していないコントロール内のドラッグ アンド ドロップ位置変更で ListView 使用されるためです。
ListView グループは、アプリケーションが メソッドを呼び出 Application.EnableVisualStyles すときに、Windows XP と Windows Server 2003 でのみ使用できます。 以前のオペレーティング システムでは、グループに関連するコードは無効であり、グループは表示されません。 その結果、グループ化機能に依存するコードが正しく機能しない可能性があります。
グループ化機能を使用できるかどうかを決定するコードを含め、使用できない場合は代替機能を提供することができます。 たとえば、グループによる並べ替えをサポートしていないオペレーティング システムで実行する場合に、代替の並べ替えを提供できます。
グループ化機能は、オペレーティング システムテーマ機能を提供するのと同じライブラリによって提供されます。 このライブラリの可用性をチェックするには、 メソッドのオーバーロードをFeatureSupport.IsPresent(Object)呼び出し、 値をOSFeature.Themes渡します。
適用対象
こちらもご覧ください
.NET