アイテムがListViewに追加または削除されたときのイベントを追加しようとしています。これが私がこれまでに持っているものです:
protected override void OnNotifyMessage(Message m)
{
const int WM_ERASEBKGND = 0x14;
const int LVM_FIRST = 0x1000;
const int LVM_DELETEITEM = LVM_FIRST + 8;
const int LVM_DELETEALLITEMS = LVM_FIRST + 9;
const int LVM_INSERTITEMA = LVM_FIRST + 7;
const int LVM_INSERTITEMW = LVM_FIRST + 77;
//Filter out the WM_ERASEBKGND message to prevent flicker when redrawing
if (m.Msg == WM_ERASEBKGND) return;
base.OnNotifyMessage(m);
if (m.Msg == LVM_DELETEITEM || m.Msg == LVM_DELETEALLITEMS)
{
if (ItemsRemoved == null) return;
ItemsRemoved(null, EventArgs.Empty);
}
else if (m.Msg == LVM_INSERTITEMA || m.Msg == LVM_INSERTITEMW)
{
if (ItemsAdded == null) return;
ItemsAdded(null, EventArgs.Empty);
}
}
問題は、ItemsRemovedイベントが発生したときに、ListViewのアイテム数が変更されないことです。たとえばListView.Items.Clear()
、LVM_DELETEALLITEMSメッセージの実行は処理されますが、ItemsRemovedイベントが発生した場合でも、アイテム数は>0として表示されます。
私がここで間違っているアイデアはありますか?