1

我正在分别用 C# 开发应用程序 .Net 使用 win 表单,并且我试图仅当鼠标悬停在列表中的项目上时才显示手形光标。所以换句话说,当鼠标悬停在列表上并且它不在该列表中的任何项目上时,我不想显示手形光标。

可能吗?

4

3 回答 3

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;
        }
    }
于 2012-11-16T14:28:34.843 回答
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”代表每个项目的像素。你只需要看看每个项目有多少像素高度。

于 2016-10-20T15:19:43.280 回答
-1

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

于 2012-11-16T14:05:36.867 回答