Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações. |
Tradução
Original
|
Classe ListViewGroup
Representa um agrupar de itens exibidos dentro de um ListView controle.
Assembly: System.Windows.Forms (em System.Windows.Forms.dll)
The ListView recurso de agrupamento permite que você criar grupos visual de logicamente relacionados ListView itens. Cada agrupar consiste em um cabeçalho com base em texto seguido de uma linha horizontal e os itens atribuídos a esse agrupar. Você pode alinhar o texto do cabeçalho à esquerda, à direita ou ao centralizar do controle. Os grupos atribuídos a um ListView controle aparecer sempre que o ListView.View propriedade estiver definida como um valor diferente de View.List.
ListView os grupos ajudam os usuários localizar os itens que estão procurando, separando os itens em categorias úteis. Você pode criar qualquer categorias que você precisa. Uma forma típica de agrupar os itens é pela maneira como são classificados. Por exemplo, você pode agrupar sistema autônomo itens pela letra inicial do nome do item quando eles são classificados em ordem alfabética ou pelo subitens sistema autônomo tipo ou data quando a lista é classificada clicando em um cabeçalho de coluna no modo de exibição detalhes. O Windows Explorer usa esse tipo de agrupamento.
Para usar o recurso de agrupamento, adicione um ou mais ListViewGroup objetos para o ListView.Groups coleção de um ListView controle. conjunto o alinhamento de texto e o cabeçalho de cabeçalho do agrupar no ListViewGroup construtor, ou defina-os usando o Header e HeaderAlignment Propriedades.
Você pode atribuir um item a um agrupar especificando o agrupar no ListViewItem construtor, por configuração o ListViewItem.Group propriedade, ou adicionando diretamente o item para o Items coleção de um agrupar. Todos os itens devem ser atribuídos a grupos antes que eles são exibidos. Todos os itens que não estejam atribuídos a um agrupar aparecerá no agrupar padrão, que tem o rótulo do cabeçalho "DefaultGroup {0}". O agrupar padrão não está contido no ListView.Groups coleção e não pode ser alterado. É principalmente útil para depuração para garantir que todos os itens foram adicionados corretamente a grupos.
Um item só é possível em um agrupar cada vez. Você pode alterar o agrupar ao qual um item pertence, definindo o ListViewItem.Group propriedade em time de execução ou adicionando-o para o Items coleção de outro agrupar, que remove automaticamente do agrupar anterior.
Observação:
|
|---|
|
O recurso de marca de inserção é desabilitado quando o uso de grupos. Isso ocorre porque o recurso de agrupamento Ordena itens por membros do agrupar, enquanto o recurso de marca de inserção é usado com do tipo arrastar e soltar reposicionamento em um ListView controle que já não ordem de seus itens. |
Observação:
|
|---|
|
ListView grupos estão disponível somente em Windows XP e a família Windows servidor 2003 quando o aplicativo chama o Application.EnableVisualStyles método. Em sistemas operacionais anteriores, qualquer código relacionadas a grupos será ignorado e os grupos não aparecerá. sistema autônomo resultado, qualquer código que depende o recurso de agrupamento pode não funcionar corretamente. Você pode desejar incluir um teste determina se o recurso de agrupamento está disponível e fornecer funcionalidade alternativa quando não estiver disponível. Por exemplo, convém fornecer classificação alternativo quando executado em sistemas operacionais que não oferecem suporte a classificação por agrupar. O recurso de marca de inserção é fornecido pela mesma biblioteca que fornece o recurso de temas do sistema operacional. Para verificar a disponibilidade desta biblioteca telefonar o FeatureSupport.IsPresent(Object) método de sobrecarga e passar a OSFeature.Themes valor. |
O exemplo de código a seguir demonstra como usar o ListView Agrupar recursos para organizar itens pelo valor subitem no modo de exibição detalhes. Essa forma de agrupamento é semelhante ao agrupamento usado no Windows Explorer. No exemplo, os grupos são criados dinamicamente. Para cada coluna de subitem, um agrupar é criado para cada valor subitem exclusivo. Para a coluna do item pai, um agrupar é criado para cada letra inicial exclusiva. Clique no cabeçalho de uma coluna classifica os itens para os grupos criados para essa coluna. Clicando no cabeçalho da mesma coluna novamente inverte a ordem dos grupos.
using System; using System.Collections; using System.Windows.Forms; publicclass ListViewGroupsExample : Form { private ListView myListView; // Determine whether Windows XP or a later// operating system is present.privatebool 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] staticvoid Main() { Application.EnableVisualStyles(); Application.Run(new ListViewGroupsExample()); } // Groups the items using the groups created for the clicked // column.privatevoid 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.privatevoid 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.privateclass 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.publicint Compare(object x, object y) { int result = String.Compare( ((ListViewGroup)x).Header, ((ListViewGroup)y).Header ); if (order == SortOrder.Ascending) { return result; } else { return -result; } } } }
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
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
o.NET Framework e.NET Compact Framework não oferecem suporte a todas as versões de cada plataforma. Para obter uma lista de versões suportadas, consulte Requisitos de sistema do .NET framework.
Observação: