¿Cómo puedo configurar el ancho de columna del listview
control ac # winforms en automático? ¿Algo como ancho = -1 / -2?
82
Usted dio la respuesta: -2 ajustará automáticamente la columna a la longitud del texto en el encabezado de la columna, -1 se ajustará automáticamente al elemento más largo de la columna. Todo según MSDN . Sin embargo, tenga en cuenta que en el caso de -1, deberá establecer el ancho de la columna después de agregar los elementos. Entonces, si agrega un nuevo elemento, también deberá asignar la propiedad de ancho de la columna (o columnas) que desea ajustar automáticamente de acuerdo con los datos en ListView
control.
myListView.Columns[0].Width = -1;
Utilizar esta:
desde aqui
fuente
Hice un programa que borró y rellenó mi vista de lista varias veces. Por alguna razón, cada vez que agregué columnas con ancho = -2, encontré un problema con la primera columna demasiado larga. Lo que hice para solucionar esto fue crear este método.
private void ResizeListViewColumns(ListView lv) { foreach(ColumnHeader column in lv.Columns) { column.Width = -2; } }
Lo mejor de este método es que puedes colocarlo en cualquier lugar para cambiar el tamaño de todas tus columnas. Simplemente pase su
ListView
.fuente
Existe otro método útil llamado
AutoResizeColumn
que le permite ajustar automáticamente el tamaño de una columna específica con el parámetro requerido.Puedes llamarlo así:
listview1.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent); listview1.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent); listview1.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize); listview1.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.HeaderSize);
fuente
Ampliando un poco la respuesta de Fredrik, si desea establecer el ancho de cambio de tamaño automático de la columna sobre la marcha, por ejemplo: estableciendo el ancho de tamaño automático de la primera columna en 70:
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None); myListView.Columns[0].Width = 70; myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
fuente
Esta solución primero cambiará el tamaño de las columnas según los datos de la columna, si el ancho redimensionado es menor que el tamaño del encabezado, cambiará el tamaño de las columnas para que al menos se ajusten al encabezado. Esta es una solución bastante fea, pero funciona.
lstContacts.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); colFirstName.Width = (colFirstName.Width < 60 ? 60 : colFirstName.Width); colLastName.Width = (colLastName.Width < 61 ? 61 : colLastName.Width); colPhoneNumber.Width = (colPhoneNumber.Width < 81 ? 81 : colPhoneNumber.Width); colEmail.Width = (colEmail.Width < 40 ? 40 : colEmail.Width);
lstContacts es ListView. colFirstName es una columna, donde 60 es el ancho necesario para ajustarse al título. Etc.
fuente
Si tiene ListView en cualquier panel principal (relleno de muelle de ListView), puede usar el método simple ...
private void ListViewHeaderWidth() { int HeaderWidth = (listViewInfo.Parent.Width - 2) / listViewInfo.Columns.Count; foreach (ColumnHeader header in listViewInfo.Columns) { header.Width = HeaderWidth; } }
fuente
Puede usar algo como esto, pasando el ListView que desea en param
private void AutoSizeColumnList(ListView listView) { //Prevents flickering listView.BeginUpdate(); Dictionary<int, int> columnSize = new Dictionary<int,int>(); //Auto size using header listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); //Grab column size based on header foreach(ColumnHeader colHeader in listView.Columns ) columnSize.Add(colHeader.Index, colHeader.Width); //Auto size using data listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); //Grab comumn size based on data and set max width foreach (ColumnHeader colHeader in listView.Columns) { int nColWidth; if (columnSize.TryGetValue(colHeader.Index, out nColWidth)) colHeader.Width = Math.Max(nColWidth, colHeader.Width); else //Default to 50 colHeader.Width = Math.Max(50, colHeader.Width); } listView.EndUpdate(); }
fuente
También vale la pena señalar que es posible que ListView no se muestre como se esperaba sin antes cambiar la propiedad:
myListView.View = View.Details; // or View.List
Para mí, Visual Studio parece establecerlo de forma predeterminada en View.LargeIcon por alguna razón, por lo que no aparece nada hasta que se cambia.
Complete el código para mostrar una sola columna en un ListView y deje espacio para una barra de desplazamiento vertical.
lisSerials.Items.Clear(); lisSerials.View = View.Details; lisSerials.FullRowSelect = true; // add column if not already present if(lisSerials.Columns.Count==0) { int vw = SystemInformation.VerticalScrollBarWidth; lisSerials.Columns.Add("Serial Numbers", lisSerials.Width-vw-5); } foreach (string s in stringArray) { ListViewItem lvi = new ListViewItem(new string[] { s }); lisSerials.Items.Add(lvi); }
fuente
Creo que el autor estaba buscando un método equivalente a través del IDE que generaría el código subyacente y se aseguraría de que todos los parámetros estuvieran en su lugar, etc. Encontré esto en MS:
Creación de controladores de eventos en el diseñador de formularios de Windows
Viniendo de un fondo de VB, esto es lo que estaba buscando, aquí está la versión breve para el clic adverso:
fuente