Comment puis-je aligner le texte pour un seul sous-élément dans un ListView en utilisant C #?

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

  •  05-09-2019
  •  | 
  •  

Question

Je n'ai pas pu trouver une réponse partout sur ce sujet apparemment simple: est-il possible d'aligner le texte d'un seul sous-élément dans un contrôle WinForms ListView

Si oui, comment?

Je voudrais avoir un texte dans la même colonne alignée différemment.

Était-ce utile?

La solution 4

Pour référence ultérieure, voici comment je l'ai résolu:

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

Il fallait gérer le DrawColumnHeader, sinon pas du texte ou des séparateurs de colonnes proviendraient.

Autres conseils

La classe « ColumnHeader » a une propriété « TextAlign » qui va changer l'alignement pour tous les sous-éléments de la colonne. Si vous avez besoin quelque chose de plus de fantaisie que vous pouvez toujours utiliser l'événement « DrawSubItem » et le rendre propriétaire établi.

exemple:

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

va définir l'alignement "1" de la colonne à droite

Remarque: En raison d'une limitation du contrôle ListView natif sous-jacent (vivant dans comctl32.dll), la première colonne ne peut pas être aligné. Il sera toujours aligné à gauche. La deuxième limite est lorsque vous dessinez sur mesure (dessiner sur mesure sous-éléments): lorsque vous activez la colonne réordonner, le texte de la première colonne est pas correctement réorganisés. Je résolu cette limitation (ne remettrait pas un bug, car le listview supporte de nombreux styles de liste et la structure interne de données d'une vue de la liste est un arbre comme un) en ne permettant pas de réordonner la première colonne, qui, dans la plupart des cas aucun problème , parce que vous allez utiliser une sorte de clé pour la première colonne comme numéro ou quelque chose de similaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top