仅显示列表中的手形光标onMouseOver项目

时间:2012-11-16 13:46:13

标签: c# winforms cursor

我正在开发分别使用win形式的C#中的app。我只是在鼠标位于列表中的项目上时才尝试显示手形光标。换句话说,当鼠标位于列表上方并且它不在该列表中的任何项目上时,我不想显示手形光标。

有可能吗?

3 个答案:

答案 0 :(得分:2)

您应该使用ListView MouseMove和ListView MouseLeave事件以及GetItemAt和GetSubItemAt方法,这些方法返回鼠标所在位置的项目。您可以使用此代码。我不确定它是否是最佳的,但它会达到目的。

    Cursor standardCursor;
    Cursor differentCursor;
    public Form1()
    {
        standardCursor = Cursors.Arrow;
        differentCursor = Cursors.Cross;
    }

    private void listView1_MouseLeave(object sender, EventArgs e)
    {
        if (this.Cursor == differentCursor)
            this.Cursor = standardCursor;
    }

    private void listView1_MouseMove(object sender, MouseEventArgs e)
    {
        ListViewItem lvi = listView1.GetItemAt(e.Location.X, e.Location.Y);
        if (lvi == null)
        {
            bool found = false;
            int i = 0;
            ListViewItem.ListViewSubItem lvsi = null;
            while(!found && i< listView1.Items.Count)
            {
                lvsi = listView1.Items[i].GetSubItemAt(e.Location.X, e.Location.Y);
                if (lvsi != null)
                    found = true;
                i++;
            }
            if(found)
                this.Cursor = differentCursor;
            else if (this.Cursor == differentCursor)
                this.Cursor = standardCursor;
        }
        else
        {
            this.Cursor = differentCursor;
        }
    }

答案 1 :(得分:1)

我知道这已经发布了一段时间,但是对于所有后来遇到同样问题的人来说,这是一个简单而简短的Awnser。

private void listView1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Y > 2 + (listView1.Items.Count * 20))
        listView1.Cursor = Cursors.Default;
    else
        listView1.Cursor = Cursors.Hand;
}

'2'位于顶部,'20'代表每个项目的像素。 你只需看看每个物品的像素数量是多少。

答案 2 :(得分:0)

单击表单上的控件并转到属性。有一个“光标”字段,您可以从中选择“手动”。这将在滚动控件时更改光标类型,但我不确定如何对列表中的单个项执行此操作。