リストビューをマウスクリックで選択したときに処理をする機能を作成した際に、イベントの順番を確認してみました。
こんな感じのリストビューを作成します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Sample01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
listView1.Items.Add("test01");
listView1.Items.Add("test02");
listView1.Items.Add("test03");
}
private void listView1_MouseClick(object sender, MouseEventArgs e)
{
Console.WriteLine("MouseClick");
}
private void listView1_MouseUp(object sender, MouseEventArgs e)
{
Console.WriteLine("MouseUp");
}
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
Console.WriteLine("MouseDown");
}
private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
Console.WriteLine("ItemSelectionChanged; selected=" + e.IsSelected);
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("SelectedIndexChanged" );
}
private void listView1_Click(object sender, EventArgs e)
{
Console.WriteLine("Click");
}
private void listView1_ItemActivate(object sender, EventArgs e)
{
Console.WriteLine("ItemActivate");
}
}
}

先頭の「test01」をクリックします。

実行結果
————————————————–
MouseDown
ItemSelectionChanged; selected=True
SelectedIndexChanged
Click
MouseClick
MouseUpMouseUp
————————————————–
Clickしてから選択を変えているイメージなのですが、ClickイベントとMouseClickはItemSelectionChangedとSelectedIndexChangedの後ろにきています。
次は、「test01」を選択した後に、「test02」を選択します。

実行結果
————————————————–
MouseDown
ItemSelectionChanged; selected=False
SelectedIndexChanged
ItemSelectionChanged; selected=True
SelectedIndexChanged
Click
MouseClick
MouseUp
————————————————–
「test01」の選択が解除されてから「test02」が選択されます。
今度は、「test02」の選択状態からアイテムが何もない白いところをクリックして選択解除します。

実行結果
————————————————–
MouseDown
ItemSelectionChanged; selected=False
SelectedIndexChanged
MouseUp
————————————————–
Clickはあくまでアイテムが選択されたときにしか走りません。
何も選択していない状態から、「test01」をダブルクリックします。

実行結果
————————————————–
MouseDown
ItemSelectionChanged; selected=True
SelectedIndexChanged
Click
MouseClick
MouseUp
MouseDown
ItemActivate
MouseUp
————————————————–
ダブルクリックすると、ItemActivateが走ります。


コメント