J'ai trouvé pas mal de sujets sur le redimensionnement automatique de la largeur des colonnes d'un ListView selon la taille du texte contenu dans l'entête de colonne ou selon la taille du texte contenu dans les items,
mais je n'ai rien trouvé sur le redimensionnement automatique de la largeur des colonnes d'un ListView selon le redimensionnement de la fenêtre parente...
Je m'explique :
J'ai un ListView qui comporte 2 colonnes et qui occupe toute la largeur de ma fenêtre.
Je l'ai ancré à gauche et à droite pour qu'il suive la taille de la fenêtre, mais je voudrais aussi que mes 2 colonnes changent de taille en même temps pour se répartir la largeur...
Merci Whismeril, en effet c'était tout simple !...
Je l'ai adapté en fonction de mon environnement, en fonction d'une éventuelle scrollbarre verticale
et du comportement que je souhaitais...
C'est tout simple mais ça marche nickel.
J'appelle ma fonction à chaque chargement de ma liste
et à chaque redimensionnement de la fenêtre :
Si ça peut intéresser quelqu'un...
(Attention, j'ai seulement 2 colonnes : code à généraliser si besoin)
/// <summary>
/// Réorganisation automatique de la largeur des colonnes de MyList
/// selon toutes les circonstances,
/// sauf si l'utilisateur a spécifié manuellement une largeur de colonne
/// </summary>
private void MyListAutoResizeColumns()
{
// Si l'utilisateur n'a pas modifié la largeur d'une colonne
if (MyList.Columns[0].Width == MyList.Columns[1].Width)
{
// Si le nombre d'items entraîne l'utilisation d'une scrollbarre
if ((MyList.Items.Count * 17) > (MyList.Size.Height - 28)) // La hauteur d'un item de la liste est de 17 pixels, d'une en-tête de colonne : 28 pixels
{
// Le redimensionnement des colonnes se fait selon la largeur de la scrollbarre qui est de 17 pixels et une marge fixe
MyList.Columns[0].Width = ((MyList.Width - 17) / 2 - 2);
MyList.Columns[1].Width = ((MyList.Width - 17) / 2 - 2);
}
else
{
// Le redimensionnement des colonnes se fait selon une marge fixe
MyList.Columns[0].Width = (lstContacts.Width / 2 - 2);
MyList.Columns[1].Width = (lstContacts.Width / 2 - 2);
}
}
}