我正在开发分别使用win形式的C#中的app。我只是在鼠标位于列表中的项目上时才尝试显示手形光标。换句话说,当鼠标位于列表上方并且它不在该列表中的任何项目上时,我不想显示手形光标。
有可能吗?
答案 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)
单击表单上的控件并转到属性。有一个“光标”字段,您可以从中选择“手动”。这将在滚动控件时更改光标类型,但我不确定如何对列表中的单个项执行此操作。