gpt4 book ai didi

c# - ListView 光标变化和闪烁

转载 作者:太空狗 更新时间:2023-10-30 00:36:52 26 4
gpt4 key购买 nike

当光标出现在项目上时,我正在尝试更改出现在标准 ListView 上的光标。但是,当鼠标变成手指光标,然后又变回我要求的样子时,我得到了闪烁效果。

我试图将这种闪烁/变化与手形光标隔离开来,但无法弄清楚它发生的位置或如何阻止它。要复制这个...

1) 创建一个带有 ListView 的表单。2) 添加图像列表和一些图像。将 View 设置为大图标模式。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;
}
}

执行应用程序,将鼠标移到项目上。当您在某个项目上时,您应该会看到光标在否(无输入光标)和手指指针之间闪烁。问题是如何确保它只显示无光标并且不闪烁。 (C#.NET)。

我已经尝试覆盖 OnMouseMove 和 OnMouseHover 以返回以确保它们不会设置任何内容。我还尝试过覆盖 Cursor 属性并说“仅设置为默认值或不设置游标”,但这也不起作用。

感谢任何帮助。

伊恩

最佳答案

问题是 C# ListView 控件基本上是 Windows ListView 控件的包装器。因此,当我们将光标设置为箭头时,底层 ListView 控件始终默认为手形光标,而我们在 C# ListView 类中的设置希望它是箭头。这就是我们出现闪烁的原因,因为底层控制正在恢复到 Hand。

这是您需要添加的代码:

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

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

关于c# - ListView 光标变化和闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/594174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com