在列表框数据源之间使用拖放

时间:2018-07-12 19:15:50

标签: winforms drag-and-drop listbox

我正在尝试使用此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属性为   设置

该如何解决?问候

1 个答案:

答案 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,其中介绍了高级拖放技术。