¿Cómo puedo alinear el texto para un único elemento secundario en un ListView con C #?

StackOverflow https://stackoverflow.com/questions/561798

  •  05-09-2019
  •  | 
  •  

Pregunta

Yo no era capaz de encontrar una respuesta en cualquier lugar sobre este tema aparentemente simple:? ¿es posible alinear el texto de un único elemento secundario en un control de Windows Forms ListView

Si es así, ¿cómo?

Me gustaría tener texto en la misma columna alineado de manera diferente.

¿Fue útil?

Solución 4

En el futuro, así es como lo resolví:

// Make owner-drawn to be able to give different alignments to single subitems
lvResult.OwnerDraw = true;
...

// Handle DrawSubItem event
private void lvResult_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
    // This is the default text alignment
    TextFormatFlags flags = TextFormatFlags.Left;

    // Align text on the right for the subitems after row 11 in the 
    // first column
    if (e.ColumnIndex == 0 && e.Item.Index > 11)
    {
        flags = TextFormatFlags.Right;
    }

    e.DrawText(flags);
}

// Handle DrawColumnHeader event
private void lvResult_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    // Draw the column header normally
    e.DrawDefault = true;
    e.DrawBackground();
    e.DrawText();
}

Era necesario para manejar la DrawColumnHeader, de lo contrario no hay texto o columna separadores se pueden extraer.

Otros consejos

La clase "ColumnHeader" tiene una propiedad "TextAlign" que va a cambiar la alineación de todos los subelementos de la columna. Si necesita algo más elegante siempre se puede utilizar el evento "DrawSubItem" y que sea propietario dibujado.

ejemplo:

listView1.Columns[1].TextAlign = HorizontalAlignment.Right;

establecerá "1" la alineación de la columna a la derecha

Nota: Debido a una limitación del control ListView nativo subyacente (que viven en comctl32.dll), la primera columna no se puede alinear. Será siempre alineado a la izquierda. La segunda limitación es cuando se dibuja a medida (llamar la costumbre subelementos): cuando se habilita la reordenación de columnas, el texto de la primera columna no se reordena correctamente. He resuelto esta limitación (no diría que es un error, ya que la vista de lista es compatible con muchos estilos de lista y la estructura de datos interna de una vista de lista es un árbol como uno) al no permitir reordenar la primera columna, que en la mayoría de los casos no es ningún problema , porque lo utilizará algún tipo de clave para la primera columna como el número o algo similar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top