当前位置:  开发笔记 > 编程语言 > 正文

ListView光标更改和闪烁

如何解决《ListView光标更改和闪烁》经验,为你挑选了1个好方法。

当光标出现在项目上时,我正在尝试更改标准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属性并说"只设置为默认或没有游标",这也不起作用.

任何帮助表示赞赏.

伊恩



1> 小智..:

问题是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控件已完全初始化!

实际上很简单,祝你有美好的一天!:)

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有