首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >鼠标悬停事件时突出显示列表框项目

鼠标悬停事件时突出显示列表框项目
EN

Stack Overflow用户
提问于 2012-09-09 22:57:58
回答 5查看 24.5K关注 0票数 3

当鼠标悬停在listview项目上时,我正在尝试更改其背景颜色

我有一个鼠标悬停事件,但我如何在鼠标悬停在项目上时添加“高亮”效果?

代码语言:javascript
复制
private void pinnedAppsListBox_MouseHover(object sender, EventArgs e)
{

}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-12 20:51:40

使用以下命令:

代码语言:javascript
复制
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);
}
票数 12
EN

Stack Overflow用户

发布于 2012-09-09 23:23:04

转到列表视图的ItemMouseHover事件并添加,然后设置项目的属性"BackColor“。

代码语言:javascript
复制
private void listView1_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
{
            e.Item.BackColor = Color.Black;
}
票数 1
EN

Stack Overflow用户

发布于 2016-11-04 05:49:49

声明此全局变量

使用此Listview项目变量可跟踪悬停在哪个项目上

代码语言:javascript
复制
ListViewItem lvHoveredItem;

设置以下函数以打开控件的DoubleBuffering,以防止闪烁:

代码语言:javascript
复制
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);
    }

在加载控件的位置调用此函数

代码语言:javascript
复制
SetDoubleBuffering(lvTaskList, true);

然后在listview的mousemove事件中使用以下代码

代码语言:javascript
复制
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; 
            }
        }

    }

您还可以添加MouseLeave事件

代码语言:javascript
复制
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;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12340135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档