İngilizce dilinde oku

Aracılığıyla paylaş


ListViewGroup Sınıf

Tanım

Denetim içinde ListView görüntülenen bir öğe grubunu temsil eder.

C#
[System.ComponentModel.TypeConverter(typeof(System.Windows.Forms.ListViewGroupConverter))]
[System.Serializable]
public sealed class ListViewGroup : System.Runtime.Serialization.ISerializable
Devralma
ListViewGroup
Öznitelikler
Uygulamalar

Örnekler

Aşağıdaki kod örneği, öğeleri ayrıntılar görünümünde alt öğe değerine göre düzenlemek için gruplandırma özelliğinin nasıl kullanılacağını ListView gösterir. Bu gruplandırma biçimi, Windows Gezgini'nde kullanılan gruplandırmaya benzer. Örnekte gruplar dinamik olarak oluşturulur. Her alt sütun için, her benzersiz alt değer için bir grup oluşturulur. Üst öğe sütunu için, her benzersiz ilk harf için bir grup oluşturulur. Bir sütunun üst bilgisine tıklandığında, öğeler bu sütun için oluşturulan gruplara sıralanır. Aynı sütun üst bilgisine yeniden tıklanması grupların sırasını tersine çevirir.

C#
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;
            }
        }
    }
}

Açıklamalar

ListView Gruplandırma özelliği, mantıksal olarak ilişkili ListView öğelerden oluşan görsel gruplar oluşturmanıza olanak tanır. Her grup, metin tabanlı bir üst bilgiden ve ardından yatay bir çizgiden ve bu gruba atanan öğelerden oluşur. Üst bilgi metnini denetimin soluna, sağa veya ortasına hizalayabilirsiniz. Bir denetime ListView atanan tüm gruplar, özelliği dışında View.Listbir değere ayarlandığında görünürListView.View.

ListView grupları, öğeleri yararlı kategorilere ayırarak kullanıcılarınızın aradıkları öğeleri bulmasına yardımcı olur. İhtiyacınız olan kategorileri oluşturabilirsiniz. Öğeleri gruplandırmanın tipik yollarından biri, sıralanma şeklidir. Örneğin, öğeleri alfabetik olarak sıralandığında öğe adının ilk harfine göre veya ayrıntılar görünümünde bir sütun üst bilgisine tıklayarak listenin sıralandığı tür veya tarih gibi alt öğelere göre gruplandırabilirsiniz. Windows Gezgini bu tür gruplandırma kullanır.

Gruplandırma özelliğini kullanmak için, bir denetimin koleksiyonuna ListView.Groups bir ListView veya daha fazla ListViewGroup nesne ekleyin. Oluşturucuda grup üst bilgisi metnini ve üst bilgi hizalamasını ListViewGroup ayarlayın veya ve HeaderAlignment özelliklerini kullanarak Header bunları ayarlayın.

Bir öğeyi, oluşturucuda ListViewItem grubu belirterek, özelliği ayarlayarak ListViewItem.Group veya öğeyi doğrudan bir grup koleksiyonuna Items ekleyerek bir gruba atayabilirsiniz. Tüm öğeler görüntülenmeden önce gruplara atanmalıdır. Bir gruba atanmamış öğeler, üst bilgi etiketi "DefaultGroup{0}" olan varsayılan grupta görünür. Varsayılan grup koleksiyonda ListView.Groups yer almadığından değiştirilemez. Tüm öğelerin gruplara düzgün şekilde eklendiğinden emin olmak için hata ayıklamada öncelikli olarak yararlıdır.

Bir öğe aynı anda yalnızca bir grupta olabilir. Bir öğenin ait olduğu grubu, çalışma zamanında özelliğini ayarlayarak ListViewItem.Group veya bir önceki gruptan otomatik olarak kaldıran başka bir grubun koleksiyonuna ekleyerek Items değiştirebilirsiniz.

Not

Ekleme işareti özelliği, gruplar kullanılırken devre dışı bırakılır. Bunun nedeni, gruplandırma özelliğinin öğeleri grup üyeliğine göre sıralaması, ekleme işareti özelliğinin ise öğelerini henüz sıralamayan bir ListView denetimde sürükle ve bırak yeniden konumlandırma ile birlikte kullanılmasıdır.

Not

ListView grupları yalnızca Uygulamanız yöntemini çağırdığında Windows XP ve Windows Server 2003 ailesinde Application.EnableVisualStyles kullanılabilir. Önceki işletim sistemlerinde, gruplarla ilgili tüm kodlar yoksayılır ve gruplar görünmez. Sonuç olarak, gruplandırma özelliğine bağlı olan kodlar düzgün çalışmayabilir. Gruplandırma özelliğinin kullanılabilir olup olmadığını belirleyen bir test eklemek ve kullanılamadığında alternatif işlevler sağlamak isteyebilirsiniz. Örneğin, gruba göre sıralamayı desteklemeyen işletim sistemlerinde çalışırken alternatif sıralama sağlamak isteyebilirsiniz.

Ekleme işareti özelliği, işletim sistemi temaları özelliğini sağlayan kitaplık tarafından sağlanır. Bu kitaplığın kullanılabilirliğini denetlemek için yöntem aşırı yüklemesini çağırın FeatureSupport.IsPresent(Object) ve değerini geçirin OSFeature.Themes .

Oluşturucular

ListViewGroup()

"ListViewGroup" varsayılan üst bilgi metnini ve varsayılan sol üst bilgi hizalamasını kullanarak sınıfın yeni bir örneğini ListViewGroup başlatır.

ListViewGroup(String)

Özelliği başlatmak için belirtilen değeri kullanarak ve varsayılan sol üst bilgi hizalamasını kullanarak sınıfın Header yeni bir örneğini ListViewGroup başlatır.

ListViewGroup(String, HorizontalAlignment)

Belirtilen üst bilgi metnini ve belirtilen üst bilgi hizalamasını kullanarak sınıfının yeni bir örneğini ListViewGroup başlatır.

ListViewGroup(String, String)

ve Header özelliklerini başlatmak için belirtilen değerleri kullanarak sınıfının yeni bir örneğini ListViewGroupName başlatır.

Özellikler

CollapsedState

Grubun hangi ListViewGroupCollapsedState şekilde görüneceğini denetler.

Footer

Grup alt bilgisinde görüntülenen metin.

FooterAlignment

Grup alt bilgisinin hizalaması.

Header

Grubun üst bilgi metnini alır veya ayarlar.

HeaderAlignment

Grup üst bilgisi metninin hizalamasını alır veya ayarlar.

Items

Bu grupla ilişkili tüm öğeleri içeren bir koleksiyon alır.

ListView

ListView Bu grubu içeren denetimi alır.

Name

Grubun adını alır veya ayarlar.

Subtitle

Grup alt başlığında görüntülenen metin.

Tag

Grupla ilgili verileri içeren nesneyi alır veya ayarlar.

TaskLink

Grup üst bilgisinde görüntülenen görev bağlantısının adı.

TitleImageIndex

Grup için görüntülenen görüntünün dizinini alır veya ayarlar.

TitleImageKey

Grup için görüntülenen görüntünün anahtarını alır veya ayarlar.

Yöntemler

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

Belirtik Arabirim Kullanımları

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

hedef nesneyi seri hale getirmek için gereken verilerle doldurur SerializationInfo .

Şunlara uygulanır

Ürün Sürümler
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9

Ayrıca bkz.