ListViewGroupCollection クラスとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > ListViewGroupCollection クラスの意味・解説 

ListViewGroupCollection クラス

メモ : このクラスは、.NET Framework version 2.0新しく追加されたものです。

ListView コントロール内のグループコレクション表します

名前空間: System.Windows.Forms
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)
構文構文

Public Class ListViewGroupCollection
    Implements IList, ICollection, IEnumerable
Dim instance As ListViewGroupCollection
public class ListViewGroupCollection : IList,
 ICollection, IEnumerable
public ref class ListViewGroupCollection :
 IList, ICollection, IEnumerable
public class ListViewGroupCollection implements
 IList, ICollection, 
    IEnumerable
public class ListViewGroupCollection implements
 IList, ICollection, 
    IEnumerable
解説解説

ListView コントロール関連付けられている ListViewGroupCollection取得するには、ListView.Groups プロパティ使用します。このコレクションには、ListView.View プロパティが View.List 以外の値に設定されているときにコントロール表示されるグループを表す ListViewGroup オブジェクト格納されています。グループ割り当てられていない項目は、ヘッダー ラベル "DefaultGroup{0}" を持つ既定グループ表示されます。既定グループListView.Groups コレクション格納されていないため、変更できません。特に、デバッグすべての項目がグループ適切に追加されていることを確認する際に有効です。ListView.Groups コレクショングループない場合グループ機能無効になります

Add メソッド使用して1 つグループコレクション追加しますInsert メソッド使用してグループコレクション内の特定のインデックス位置挿入しますグループ削除するには、Remove メソッド使用します。RemoveAt メソッド使用して特定のインデックスにあるグループ削除します

ListViewGroupコレクション複数追加することはできません。コレクション内でグループ位置変更するには、まずグループコレクションから削除してから、目的位置挿入する必要があります特定のグループが既にコレクション存在するかどうか確認するには、Contains メソッド使用しますコレクションにおけるグループインデックス取得するには、IndexOf メソッド使用します特定のインデックス位置にあるグループ取得または設定するには、Item インデクサ使用します

AddRange メソッド使用して複数グループコレクション追加しますグループ配列として、または別の ListView コントロールListView.Groups プロパティ使用して取得する ListViewGroupCollection として、複数グループ追加できますコレクションからすべてのグループ削除するには、Clear メソッド使用します

メモメモ

RemoveRemoveAtClear の各メソッド使用するコレクションからグループ削除できますが、ListView コントロールの項目は削除されません。ListView.Groups コレクショングループない場合グループ化機能無効になり、コントロール内のすべての項目が通常どおり表示されます。

ListView コントロールの項目をグループ化する方法複数用意する場合AddRange メソッドClear メソッド使用します。それには、複数グループ配列作成しますグループ変更するには、まず Clear メソッド使用してコレクションすべてのグループ削除してから、AddRange メソッド使用して次に表示するグループ配列追加します

コレクション内のグループを、指定したインデックスから開始する互換性のある配列コピーするには、CopyTo メソッド使用します。これは、たとえば System.Array.Sort メソッド使用してコレクション内のグループ並べ替える場合などに役立ちます。これを行うには、グループ互換性のある配列コピーした後、配列並べ替えます。次にClear メソッド使用してコレクションすべてのグループ削除した後、並べ替え配列AddRange メソッド使用してコレクション戻します

コレクション内に存在するグループの数を確認するには、Count プロパティ使用しますコレクション反復処理するには、GetEnumerator メソッドから返された IEnumerator を使用します

メモメモ

グループ化機能は、Windows XP および Windows Server 2003 ファミリアプリケーションから Application.EnableVisualStyles メソッド呼び出す場合にのみ使用できます旧バージョンオペレーティング システムでは、グループに関するコードがすべて無視されグループ表示されません。その結果グループ化機能依存するコード正常に機能しない可能性ありますグループ化機能使用できるかどうか確認し使用できない場合代替機能を提供するテスト機能用意します。たとえば、グループによる並べ替えサポートしないオペレーティング システム実行する場合には、別の並べ替え方法用意します

挿入マーク機能は、オペレーティング システムテーマ機能提供しているライブラリと同じライブラリによって提供されます。このライブラリ使用できるかどうか確認するには、FeatureSupport.IsPresent(Object) メソッド オーバーロード呼び出し、OSFeature.Themes 値を渡します

使用例使用例

ListView グループ化機能使用して詳細ビューサブ項目の値に従って項目を整理する方法次のコード例示します。この形式グループ化は、Windows エクスプローラ使用されているグループ化似てます。この例では、グループ動的に作成されます。サブ項目列では、一意サブ項目値ごとに 1 つグループ作成されます。親項目列では、一意先頭文字ごとに 1 つグループ作成されます。列のヘッダークリックすると、その列に合わせて作成されグループに項目が並べ替えられます。同じ列ヘッダー再度クリックすると、グループ順序反転します。

Imports System
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 'New
    
    <STAThread()> _
    Shared Sub Main()
        Application.EnableVisualStyles()
        Application.Run(New ListViewGroupsExample())
    End Sub 'Main
    
    ' 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 'myListView_ColumnClick
    
    ' 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 'SetGroups

    ' 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 'New
        
        ' 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 'ListViewGroupSorter
 

End Class '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;
            }
        }
    }

}
#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());
}
import System.*;
import System.Collections.*;
import System.Windows.Forms.*;

public class ListViewGroupsExample extends
 Form
{
    private ListView myListView;
    private boolean isRunningXPOrLater = false;

    // Declare a Hashtable array in which to store the groups.
    private Hashtable groupTables[];

    // Declare a variable to store the current grouping column.
    private int groupColumn = 0;

    public ListViewGroupsExample()
    {
        // Initialize myListView.
        myListView = new ListView();
        myListView.set_Dock(DockStyle.Fill);
        myListView.set_View(View.Details);
        myListView.set_Sorting(SortOrder.Ascending);
        // Create and initialize column headers for myListView.
        ColumnHeader columnHeader0 = new ColumnHeader();
        columnHeader0.set_Text("Title");
        columnHeader0.set_Width(-1);
        ColumnHeader columnHeader1 = new ColumnHeader();
        columnHeader1.set_Text("Author");
        columnHeader1.set_Width(-1);
        ColumnHeader columnHeader2 = new ColumnHeader();
        columnHeader2.set_Text("Year");
        columnHeader2.set_Width(-1);
        // Add the column headers to myListView.
        myListView.get_Columns().AddRange(new ColumnHeader[] {
 
            columnHeader0, columnHeader1, columnHeader2 });
        // Add a handler for the ColumnClick event.
        myListView.add_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.get_Items().AddRange(new ListViewItem[] { 
            item0, item1, item2, item3, item4, item5 });
        // Determine whether Windows XP or a later 
        // operating system is present.
        if (System.Environment.get_OSVersion().get_Version().get_Major()
 > 5 
            || (System.Environment.get_OSVersion().get_Version().get_Major() 
            == 5 && System.Environment.get_OSVersion().get_Version().get_Minor()
 
            >= 1)) {
            isRunningXPOrLater = true;
        }

        if (isRunningXPOrLater) {
            // Create the groupsTable array and populate it with one
 
            // hash table for each column.
            groupTables = new Hashtable[myListView.get_Columns().get_Count()];
            for (int column = 0; column <
 myListView.get_Columns().get_Count(); 
                column++) {
                // Create a hash table containing all the groups 
                // needed for a single column.
                groupTables.set_Item(column, CreateGroupsTable(column));
            }
            // Start with the groups created for the Title column.
            SetGroups(0);
        }
        // Initialize the form.
        this.get_Controls().Add(myListView);
        this.set_Size(new System.Drawing.Size(550,
 330));
        this.set_Text("ListView Groups Example");
    } //ListViewGroupsExample

    /** @attribute STAThread()
     */
    public static void main(String[]
 args)
    {
        Application.Run(new ListViewGroupsExample());
    } //main

    // 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.get_Sorting().Equals(SortOrder.Descending)
 
            || (isRunningXPOrLater && e.get_Column() != groupColumn)) {
            myListView.set_Sorting(SortOrder.Ascending);
        }
        else {
            myListView.set_Sorting(SortOrder.Descending);
        }
        groupColumn = e.get_Column();
        // Set the groups to those created for the clicked column.
        if (isRunningXPOrLater)
        {
            SetGroups(e.get_Column());
        }
    } //myListView_ColumnClick

    // Sets myListView to the groups created for the specified column.
    private void SetGroups(int
 column)
    {
        // Remove the current groups.
        myListView.get_Groups().Clear();
        // Retrieve the hash table corresponding to the column.
        Hashtable groups = (Hashtable)groupTables.get_Item(column);
        // Iterate through the items in myListView, assigning each 
        // one to the appropriate group.
        for (int iCtr = 0; iCtr < myListView.get_Items().get_Count();
 iCtr++) {
            ListViewItem item = myListView.get_Items().get_Item(iCtr);
            // Retrieve the subitem text corresponding to the column.
            String subItemText = item.get_SubItems().get_Item(column).get_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.set_Group((ListViewGroup)(groups.get_Item(subItemText)));
        }
        // Copy the groups for the column to an array.
        ListViewGroup groupsArray[] = new ListViewGroup[groups.get_Count()];
        groups.get_Values().CopyTo(groupsArray, 0);
        // Sort the groups and add them to myListView.
        Array.Sort(groupsArray, new ListViewGroupSorter(
            myListView.get_Sorting()));
        myListView.get_Groups().AddRange(groupsArray);
    } //SetGroups

    // 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.
        for (int iCtr = 0; iCtr < myListView.get_Items().get_Count();
 iCtr++) {
            ListViewItem item = myListView.get_Items().get_Item(iCtr);
            // Retrieve the text value for the column.
            String subItemText = item.get_SubItems().get_Item(column).get_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;
    } //CreateGroupsTable

    // Sorts ListViewGroup objects by header value.
    private class ListViewGroupSorter implements
 IComparer
    {
        private SortOrder order;

        // Stores the sort order.
        public ListViewGroupSorter(SortOrder theOrder)
        {
            order = theOrder;
        } //ListViewGroupSorter

        // 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).get_Header(),
 
                ((ListViewGroup)y).get_Header());
            if (order.Equals(SortOrder.Ascending)) {
                return result;
            }
            else {
                return -result;
            }
        } //Compare
    } //ListViewGroupSorter
} //ListViewGroupsExample 
継承階層継承階層
System.Object
  System.Windows.Forms.ListViewGroupCollection
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
ListViewGroupCollection メンバ
System.Windows.Forms 名前空間
ListView クラス
ListViewGroup クラス



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ListViewGroupCollection クラス」の関連用語

ListViewGroupCollection クラスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ListViewGroupCollection クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2024 Microsoft.All rights reserved.

©2024 GRAS Group, Inc.RSS