2009-08-10 28 views

Respuesta

84

Dio la respuesta: -2 personalizará automáticamente la columna a la longitud del texto en el encabezado de la columna, -1 se autoescribirá al elemento más largo en la columna. All according to MSDN. Sin embargo, tenga en cuenta que en el caso de -1, tendrá que establecer el ancho de la columna después de agregar los elementos. Por lo tanto, si agrega un nuevo elemento, también deberá asignar la propiedad de ancho de la columna (o columnas) que desea autosizar según los datos en el control ListView.

19

Hice un programa que despejó y volvió a llenar mi lista de vista 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 arreglar 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. Solo pase su ListView.

+1

esto va a establecer la anchura a la anchura del último elemento de la ListView – Qsiris

+0

utilizo su código pero si tengo solo una columna en mi vista de lista, cada vez que obtengo una barra de desplazamiento horizontal.Si hay al menos dos columnas, el código funciona bien. ¿Sabes de dónde viene este comportamiento? – prototype0815

71

Utilice esta:

yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); 
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); 

de here

+6

Pero, ¿y si quieres el máximo del encabezado o el ancho de datos? Sin parpadeo? – toddmo

1

Ampliando un poco en la respuesta de Fredrik, si desea establecer el ancho cambiar automáticamente el tamaño de la columna sobre la marcha Por ejemplo: Ajuste automático de la primera columna anchura -size a 70:

myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None); 
myListView.Columns[0].Width = 70; 
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); 
0

esta solución primero cambiar el tamaño de las columnas sobre la base de datos de la columna, si la anchura redimensionada es smalle r que el tamaño del encabezado, cambiará el tamaño de las columnas para, al menos, ajustarse 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 el ListView. colFirstName es una columna, donde 60 es el ancho requerido para ajustarse al título. Etc.

0

Creo que el autor buscaba un método equivalente a través de la IDE que generaría el código subyacente y asegurarse de que todos los parámetros estaban en su lugar, etc. Se han encontrado esto desde MS:

Creating Event Handlers on the Windows Forms Designer

Viniendo de un fondo de VB a mí mismo, esto es lo que estaba buscando, aquí está la versión breve por el clic adversa:

  1. Haga clic en la forma o controlar que y quieres crear un controlador de eventos para.
  2. En la ventana Propiedades, haga clic en el botón Eventos
  3. En la lista de eventos disponibles, haga clic en el evento para el que desea crear un controlador de eventos.
  4. En el cuadro a la derecha del nombre del evento, escriba el nombre del controlador y pulse ENTER
Cuestiones relacionadas