protected override void OnDragDrop(DragEventArgs e)
        {
            base.OnDragDrop(e);
            #if __ENABLE_DRAG_GHOST__
            IntPtr ownerWindow = Win32ImageList.GetDesktopWindow();
            Win32ImageList.ImageList_DragLeave(ownerWindow);
            #endif

            if (e.Data.GetDataPresent(typeof(ListViewItem[])))
            {
                ListViewItem[] dragData = (ListViewItem[])e.Data.GetData(typeof(ListViewItem[]));
                bool isUpper = false;
                Point p = this.PointToClient(new Point(e.X, e.Y));
                var item = getListItemByPoint(p, ref isUpper);

                int index = getInsertTargetIndex(dragData.First(), item, isUpper);

                if (index >= 0)
                {
                    //if (index >= this.Items.Count) index = this.Items.Count - 1;
                    System.Diagnostics.Debug.Print("OnDragDrop: index{0} �� index{1} �Ɉړ�", dragData.First().Index, index);
                    // ListItemMoving�C�x���g�𔭐������� �� �C�x���g������ŃL�����Z�������
                    var eventArg = new ListItemMovingEventArgs(dragData, index);
                    OnListItemMoving(eventArg);

                    if (eventArg.Cancel == false)
                    {
                        BeginUpdate();
                        foreach (ListViewItem listViewItem in dragData)
                            this.Items.Remove(listViewItem);
                        EndUpdate();

                        // ���X�g���ڂ�ړ�
                        foreach (ListViewItem listViewItem in dragData)
                        {
                            string name = listViewItem.Name; //ListItem#Clone()��Name�v���p�e�B�܂ŕ������Ȃ��̂ŁA��ōĐݒ肷��
                            ListViewItem insertedItem = this.Items.Insert(index, (ListViewItem)listViewItem.Clone());
                            insertedItem.Name = name;
                            insertedItem.Selected = true;
                            insertedItem.Focused = true;
                            index++;
                        }
                    }
                }

                m_prevItem = null;
                m_prevFlag = false;

                Invalidate(false);
            }
        }
 protected virtual void OnListItemMoving(ListItemMovingEventArgs e)
 {
     if (this.ListItemMoving != null)
         this.ListItemMoving((object)this, e);
 }