我正在尝试使用此tutorial
实现拖放首先,我首先像DataSource
这样填充:
var techListQuery = $"exec getEmployeeListMailing";
var techList = db.GetTableBySQL(techListQuery);
lstTechUnnotified.DataSource = techList;
lstTechUnnotified.DisplayMember = "Abbreviation";
lstTechUnnotified.ValueMember = "UserName";
一旦执行此操作,第一个列表框就会有Mouse_Down
个事件,但是当它尝试从第一个列表中删除项目时,问题开始了:
if (dde1 == DragDropEffects.All)
{
lstTechUnnotified.Items.RemoveAt(lstTechUnnotified.IndexFromPoint(e.X, e.Y));
}
我收到消息:
'当DataSource属性为 设置
该如何解决?问候
答案 0 :(得分:0)
之所以会发生这种情况,是因为您没有将该项添加到Items
属性中。如果您使用的是DataSource
,则必须从DataSource
本身,即从techList
删除项目。然后,您必须通过重新分配数据源来更新列表框
techList.RemoveAt(lstTechUnnotified.IndexFromPoint(e.X, e.Y));
// Update the listbox
lstTechUnnotified.DataSource = null; // This is necessary, otherwise the LB donesn't notice
// the change.
lstTechUnnotified.DataSource = techList;
如果您使用的是BindingList
,则会自动完成列表框的更新。
您还可以查看我在Code Project上的文章Drag-and-Drop ListBox,其中介绍了高级拖放技术。