ListView

Résolu
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 7 oct. 2004 à 19:33
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 8 oct. 2004 à 12:50
Bonsoir,

J'ai un listView qui possède plusieurs colonne qui, pour certaine raisons que je ne vais pas expliquer, ne peuvent pas être resizer.

Dans de rare cas, certaines colonnes ne sont pas suffisamment larges pour displayer tout ce qu'il faudrait, et comme les columns ne devraient pas être resizées, j'aimerais afficher un tooltip qui affiche le tout le text de 'la cellule'.

Question : Comment faire pour savoir si un champ à été tronqué par le listView ou pas?

Merci d'avance !

3 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
8 oct. 2004 à 10:20
la nuit porte conseil : en fait ce code ne fonctionne pas aussi bien que ça -_-
deja j'avais oublier de preciser qu'il faut du fullrowselect (sinon le GetItemAt retourne null pour les subitems)
en plus cette "bidouille" ne fonctionne pas correctement si la police est en gras

sinon il y avais deja une petite erreur : je prend la police de l'item et non du subitem
donc 1ere correction :
private void listView_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
// item "survolé"
ListViewItem item = listView.GetItemAt(e.X, e.Y);

// pas d'item "survolé"
if ( item == null )
{
textBox.Text = string.Empty;
return;
}

// détermination du subitem concerné
ListViewItem.ListViewSubItem subitem = null;
int subitemColumnWidth = 0;
int columnbegin = 0;
foreach ( ColumnHeader column in item.ListView.Columns )
{
if ( columnbegin < e.X && (columnbegin + column.Width) > e.X )
{
subitem = item.SubItems[column.Index];
subitemColumnWidth = column.Width;
break;
}
columnbegin += column.Width;
}

if ( subitem == null )
{
textBox.Text = string.Empty;
return;
}

// détermination de la longueur de dessin de la chaine complete
Graphics g = listView.CreateGraphics();

SizeF size = g.MeasureString(subitem.Text, subitem.Font);

// affichage du texte dans le TextBox si la colonne n'est pas assez large
if ( size.Width > subitemColumnWidth )
textBox.Text = subitem.Text;
else
textBox.Text = string.Empty;
}


pour le reste j'y reflechis lol

Cocoricoooooooo !!!!
coq
MVP Visual C#
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
7 oct. 2004 à 21:44
une petite "bidouille", certe pas parfaite mais ça peut constituer un bon debut je pense :)
bon, j'ai mit dans un TextBox, à toi de voir pour le tooltip ^^
private void listView_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
// item "survolé"
ListViewItem item = listView.GetItemAt(e.X, e.Y);

// pas d'item "survolé"
if ( item == null )
{
textBox.Text = string.Empty;
return;
}

// détermination du subitem concerné
string subitemText = null;
int subitemWidth = 0;
int columnbegin = 0;
foreach ( ColumnHeader column in item.ListView.Columns )
{
if ( columnbegin < e.X && (columnbegin + column.Width) > e.X )
{
subitemText = item.SubItems[column.Index].Text;
subitemWidth = column.Width;
break;
}
columnbegin += column.Width;
}

if ( subitemText == null )
{
textBox.Text = string.Empty;
return;
}

// détermination de la longueur de dessin de la chaine complete
Graphics g = listView.CreateGraphics();
SizeF size = g.MeasureString(subitemText, item.Font);

// affichage du texte dans le TextBox si la colonne n'est pas assez large
if ( size.Width > subitemWidth )
textBox.Text = subitemText;
else
textBox.Text = string.Empty;
}


tu remarqueras que quand la colonne est "juste assez large" (+ qq pixels aussi), elle est quand même détectée comme etant trop etroite
ce n'est pas tres grave en soit, le principal etant qu'un texte tronqué est bien détecté :)

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
8 oct. 2004 à 12:50
Merci Coq, c'est exactement ce que je cherchais ;-)
Bon, si le text est tout juste tronqué, mon tooltip ne s'affiche pas... mais c'est pas si grave.

Encore merci.
0
Rejoignez-nous