我正在分别用 C# 开发应用程序 .Net 使用 win 表单,并且我试图仅当鼠标悬停在列表中的项目上时才显示手形光标。所以换句话说,当鼠标悬停在列表上并且它不在该列表中的任何项目上时,我不想显示手形光标。
可能吗?
您应该使用 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;
}
}
我知道这篇文章发布已经有一段时间了,但这里有一个简单而简短的 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”代表每个项目的像素。你只需要看看每个项目有多少像素高度。
单击窗体上的控件并转到属性。有一个“光标”字段,您可以从中选择“手”。这将在滚动控件时更改光标类型,尽管我不确定您将如何对列表中的各个项目执行此操作。