我是直接重载了CheckedListBox,不想重载控件可以自己+个事件,注意:必须开启控件的AllowDrop为True,不然拖动的时候会禁止拖动,显示一个禁止标志
using System.Windows.Forms;
using System.Drawing;
namespace mNameSpace
{
class MCheckedListBox : CheckedListBox
{
//拖放操作
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (SelectedItem != null)
{
DoDragDrop(SelectedItem, DragDropEffects.Move);
}
}
protected override void OnDragOver(DragEventArgs e)
{
base.OnDragOver(e);
e.Effect = DragDropEffects.Move;
}
protected override void OnDragDrop(DragEventArgs e)
{
base.OnDragDrop(e);
Point point = PointToClient(new Point(e.X, e.Y));
int index = IndexFromPoint(point);
CheckState objCheckState = GetItemCheckState(SelectedIndex);
string sourceItemText = GetItemText(Items[SelectedIndex]);
Items.Remove(sourceItemText);
Items.Insert(index, sourceItemText);
SetItemCheckState(index, objCheckState);
}
//拖放操作结束
}
}