当光标出现在项目上时,我正在尝试更改标准ListView上显示的光标.然而,当鼠标变为手指光标,然后回到我要求的状态时,我得到一个闪烁的效果.
我试图隔离这个闪烁/改变到手形光标,但无法弄清楚它发生的位置或如何阻止它.要复制这个......
1)创建一个包含ListView的表单.2)添加图像列表和一些图像.将视图设置为大图标模式.3)将一些项添加到ListView.
添加一个MouseMove
事件到ListView
:
private void listView1_MouseMove(object sender, MouseEventArgs e) { ListViewItem selected = this.listView1.GetItemAt(e.X, e.Y); if (selected == null) { base.Cursor = Cursors.Default; } else { base.Cursor = Cursors.No; } }
执行应用程序,将鼠标移到项目上.当您在项目上方时,您应该看到光标在No(无条目光标)和手指指针之间闪烁.问题是如何确保它只显示无光标和不闪烁.(C#.NET).
我已经尝试覆盖OnMouseMove和OnMouseHover以返回以确保它们不设置任何内容.我也尝试重写Cursor属性并说"只设置为默认或没有游标",这也不起作用.
任何帮助表示赞赏.
伊恩
问题是C#ListView Control基本上是Windows List View Control的包装器.因此,当我们将光标设置为Arrow时,基础列表视图控件始终默认为手形光标,而我们在C#ListView类中的设置则希望它为箭头.这就是我们得到闪烁的原因,因为潜在的控制权正在恢复到手.
以下是您需要添加的代码:
public const uint LVM_SETHOTCURSOR = 4158; [DllImport("user32.dll")] public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); SendMessage(listView1.Handle, LVM_SETHOTCURSOR, IntPtr.Zero, Cursors.Arrow.Handle);
从Form的onLoad事件中调用SendMessage非常重要,因为那时底层的ListView控件已完全初始化!
实际上很简单,祝你有美好的一天!:)