好的,我有一个代表数据集的绑定源。该 bindingsource 绑定到一个列表框。这完全符合预期,因为它填充了指定列中的所有名称。不是问题。
我有第二个列表框,绑定到不同的 bindingsource1,它本身绑定到 bindingsource1,但使用表示与数据集中不同表的关系之一的数据成员。这样做的结果是,当我单击第一个列表中的一个项目时,第二个列表会显示所有相关的内容。
这里没有什么新东西,也没有什么复杂的东西,它是非常标准的东西,并且完全按照预期工作。
但是,我正在尝试在第一个列表框上实现拖放功能。我为 mousedown 添加了一个事件处理程序。在这里面,我打电话
DoDragDrop(current, DragDropEffects.Copy | DragDropEffects.Move);
其中 current 设置为来自 的当前对象bindingsource1.Current.Row["Name"]
。
现在,这就是它变得奇怪的地方。即使列表框本身已正确更新(因为突出显示新选择的项目,索引和项目都按预期返回,新选择的项目/索引) bindingsource1.Current 尚未更新,实际上,第二个列表框仍然显示与先前选择的项目相关的数据。
使用箭头键上下移动会导致列表框突出显示按预期更改,并且 listbox2 中的数据也会按预期更新。
注释掉 DoDragDrop 行,一切似乎都按预期工作。
由此我只能推断 DoDragDrop 以某种方式阻止某些事件触发,但我不知道为什么/如果这是所需的行为/如何肮脏地解决它/如何正确地解决它......
帮帮我欧比旺克诺比,你是我唯一的希望……
编辑:我已经创建了问题的简化实现:dropbox.com/s/qxfsvr28ftojdax/BindingDragDrop.zip 注释掉顶部更改的dodragdrop和标签,放入dodragdrop,它甚至没有注册...... ——</p>