petit code (un peu barbare d'accord mais efficace ^^) :
je suis parti sur un listview en mode Détails et "FullRowSelect = True"
Méthode associée à l'event MouseDown :
private void listView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
ListViewItem item = ((ListView)sender).GetItemAt(e.X, e.Y);
if ( item != null )
{
// si le curseur est bien au dessus de la colonne "URL"
if ( IsOverUrl(item, e) )
{
// récupération de l'url
string url = item.SubItems[columnHeader_URL.Index].Text;
// lance le navigateur sur cette url (par exemple)
System.Diagnostics.Process.Start(url);
}
}
}
private bool IsOverUrl(ListViewItem item, System.Windows.Forms.MouseEventArgs e)
{
// on verifie que le curseur est bien au dessus de la colonne des URL
// calcul des positions de debut et fin de la colonne sur le listviewint debut_colonne 0, fin_colonne 0;
for ( int i = 0; i < columnHeader_URL.Index; i++ )
{
debut_colonne += listView1.Columns[i].Width;
}
fin_colonne = debut_colonne + columnHeader_URL.Width;
// si le curseur est bien au dessus de la colonne "URL"
if ( e.X > debut_colonne && e.X < fin_colonne )
return true;
else
return false;
}
Méthode associée à l'event MouseMove (on peut s'en passer, sert juste a changer le curseur, donc facultatif) :
private void listView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
ListViewItem item = ((ListView)sender).GetItemAt(e.X, e.Y);
if ( item != null )
{
// si le curseur est bien au dessus de la colonne "URL"
if ( IsOverUrl(item, e) )
Cursor = Cursors.Hand;
}
}
Cocoricoooooooo !!!!