Hightlight Listbox item on mouse over event

24,870

Solution 1

Use this:

private void pinnedAppsListBox_MouseHover(object sender, EventArgs e){

   Point point = pinnedAppsListBox.PointToClient(Cursor.Position);
   int index = pinnedAppsListBox.IndexFromPoint(point);
   if (index < 0) return;
   //Do any action with the item
   pinnedAppsListBox.GetItemRectangle(index).Inflate(1,2);
}

Solution 2

Go to the ListView's ItemMouseHover event and add then set the property "BackColor" of the Item.

private void listView1_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
{
            e.Item.BackColor = Color.Black;
}

Solution 3

Declare this Global variable

Use this Listview Item variable to keep track of what item was hovered on

ListViewItem lvHoveredItem;

Set the following function to turn on DoubleBuffering for your control to prevent flickering:

public static void SetDoubleBuffering(System.Windows.Forms.Control control, bool value)
    {
        System.Reflection.PropertyInfo controlProperty = typeof(System.Windows.Forms.Control)
            .GetProperty("DoubleBuffered", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
        controlProperty.SetValue(control, value, null);
    }

Where your control is loaded call this function

SetDoubleBuffering(lvTaskList, true);

Then use this code in the mousemove event of your listview

private void lvTaskList_MouseMove(object sender, MouseEventArgs e)
    {
        //Set the Color you want the list Item to be when mouse is over
        Color oItemColor = Color.Lavender;
        Color oOriginalColor = Color.blue; //Your original color


        //get the Item the Mouse is currently hover
        ListViewItem lvCurrentItem = lvTaskList.GetItemAt(e.X, e.Y);


        if ((lvCurrentItem != null) && (lvCurrentItem != lvHoveredItem))
        {
            lvCurrentItem.BackColor = oItemColor;

            if(lvHoveredItem != null)
            {
                lvHoveredItem.BackColor = oOriginalColor ;                    
            }

            lvHoveredItem = lvCurrentItem;
            return;

        }


        if (lvCurrentItem == null)
        {
            if (lvHoveredItem != null)
            {
                lvHoveredItem.BackColor = oOriginalColor; 
            }
        }

    }

You can also add the MouseLeave Event

private void lvTaskList_MouseLeave(object sender, EventArgs e)
    {

        Color oOriginalColor = Color.Blue; //Your original color

        //When the mouse leave the control. If a ListViewItem was highlighted then set it's original color back
        if (lvHoveredItem != null)
        {
            lvHoveredItem.BackColor = oOriginalColor ;
        }

        lvHoveredItem = null;
    }
Share:
24,870
user1559618
Author by

user1559618

Updated on July 09, 2022

Comments

  • user1559618
    user1559618 almost 2 years

    I am attempting to change a listview item's background colour when a mouse hovers over it

    I have a mouse hover event, but how can I add a "highlight" effect upon a mouse hovering over the item?

    private void pinnedAppsListBox_MouseHover(object sender, EventArgs e)
    {
    
    }
    
  • Divyang Desai
    Divyang Desai over 7 years
    The question is for ASP.NET not for VB.NET. There is no good answer that I know Good is second matter really...this one isn't relevant even!
  • SolidRegardless
    SolidRegardless about 7 years
    The above isn't VB.net, I believe!