微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

鼠标hover事件上的Hightlight Listbox项目

我试图改变一个listview项目的背景颜色时,鼠标hover在它

我有一个鼠标hover事件,但是如何在鼠标hover在项目上时添加“突出显示效果

private void pinnedAppsListBox_MouseHover(object sender,EventArgs e) { }

终止在C#中运行消息循环的工作线程

是否可以使用extern和override修饰符指定一个函数

与崩溃转储相比,WinDbg在附加到进程时显示不同的调用堆栈

沙盒AppDomain中的线程安全性

分布式键/值存储可以在Windows上运行,并具有.Net客户端?

在.NET中获取常见的桌面path

在Desktop应用程序的发布版本中分发PDB文件的优点和缺点

在.Net CLI应用程序中显示完成百分比的最佳方法是什么?

如何测量用于.NET远程处理的IP端口的进/出字节数?

命令和复合应用程序块中的事件之间的区别

用这个:

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); }

转到ListView的ItemmouseHover事件并添加然后设置项目的属性“BackColor”。

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

如果您使用的是ListBox,则处理起来相当困难,您需要为ListBox设置MouseHover事件,并确定将哪个项目悬停,然后手动绘制。

看到这个答案 。

但是,如果您使用的是ListView,则可以像这样轻松添加一个ItemmouseHover事件:

private void pinnedAppsListView_MouseHover(object sender,EventArgs e) { e.Item.BackColor = Color.Lime; }

我多次看到这个问题没有一个很好的答案。 我知道没有好的答案,但是,我做了,在别处使用了一些提示。 我用拉撒路做了这个,但你应该能够适应你的语言。

获取物品。 您可能需要设置变量来分别捕获这些变量。 您可能还希望首先获取鼠标按钮的状态。

If (ListView.GetItemAt(X,Y) <> nil) then // do this with an if else // Next,you can get the bounding rect: ListView.GetItemAt(X,Y).displayRect(drSelectBounds); //Option: If Button up or down then // you may have to catch this elsewhere,such as for a drag operation. // Create and set a boolean variable: HighLightOn := True; ListView.Repaint; // clears prevIoUs hightlights ListView.Canvas.Brush.Color := clBtnFace; // or your color of choice ListView.Canvas.FillRect(Rect); // If you are moving around in an area where GetItem is nil,// then do this to stop flicker and remove the highlight: If (ListView.GetItemAt(X,Y) = nil) // do this with an if else If HighLightOn then begin SelectedList.Repaint; HighLightOn := False; end; // If a highlight gets left behind,// you may need to repeat this elsewhere,such as in a component exit. // This is the basic gist of the issue. // There can be a lot of options or things to look for,// so you code Could get more complicated. // I am not suggesting this is the best way to implement it,// but it is easy. Part of this code only works inside your app!

声明这个全局变量

使用这个Listview Item变量来跟踪什么项目被徘徊

ListViewItem lvHoveredItem;

设置以下功能为您的控件打开DoubleBuffering以防止闪烁:

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); }

你的控件加载的地方调用这个函数

SetDoubleBuffering(lvTaskList,true);

然后在listview的mousemove事件中使用这段代码

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(eX,eY); 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事件

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; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐