Pergunta

Eu não era capaz de encontrar um lugar resposta sobre este tema aparentemente simples: é possível texto align de um único subitem em um controle WinForms ListView

?

Se sim, como?

Eu gostaria de ter texto na mesma coluna alinhada de forma diferente.

Foi útil?

Solução 4

Para referência futura, aqui está como eu resolver isso:

// 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();
}

Foi necessário para lidar com a DrawColumnHeader, caso contrário, nenhum texto ou coluna separadores seriam atraídos.

Outras dicas

A classe "ColumnHeader" tem uma propriedade "TextAlign" que vai mudar o alinhamento de todos os subitens na coluna. Se você precisa de algo mais extravagante que você poderia sempre usar o evento "DrawSubItem" e torná-lo proprietário desenhado.

exemplo:

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

irá definir "1" alinhamento da coluna para a direita

Nota: devido a uma limitação do controle subjacente ListView nativa (que vivem em comctl32.dll), a primeira coluna pode não ser alinhados. Ele será alinhado sempre esquerda. A segunda limitação é quando você desenha personalizado (desenhar costume subitens): quando você ativar a reordenação de coluna, o texto da primeira coluna não é reordenada corretamente. Eu resolvi essa limitação (não diria que é um erro, porque o listview suporta muitos estilos de lista e a estrutura de dados interna de uma exibição de lista é uma árvore como um), não permitindo que a reordenar a primeira coluna, que na maioria dos casos não é problema , porque você vai usar algum tipo de chave para a primeira coluna como número ou algo similar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top