Winフォームを使用するC#.Netでそれぞれアプリを開発しており、リスト内の項目の上にマウスを置いたときにのみハンドカーソルを表示しようとしていました。つまり、マウスがリストの上にあり、そのリスト内のどのアイテムの上にもないときに、ハンドカーソルを表示したくありません。
出来ますか?
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」は各アイテムのピクセルを表します。各アイテムの高さのピクセル数を確認するだけです。
Click the control on the form and go to the properties. There is a "Cursor" field from which you can select "Hand". This will change the cursor type when scrolling over the control, although I'm not sure how you would do this for individual items on the list.