我正在尝试构建一个简单的界面,允许用户将文件拖放到 alistBox
中以将它们添加到进程中,并将它们拖出以删除它们。一切工作正常,但我想添加一个功能,让它更复杂一点。
现在,我删除了与DragLeave
事件相关的项目,这意味着只要鼠标离开框,项目就会被删除。但我希望用户能够改变主意。换句话说,如果他们意识到他们拖出错误的文件,我希望他们能够将鼠标移回listBox
并释放鼠标以取消操作。我在想这意味着我需要能够捕获MouseUp
事件而不是DragLeave
事件。但这到目前为止还没有成功。
下面是我目前用于删除拖出文件的代码。在用户放开鼠标按钮之前,如何修改以防止文件从列表中删除?
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
if (listBox1.Items.Count == 0)
{
return;
}
int index = listBox1.IndexFromPoint(e.X, e.Y);
string s = listBox1.Items[index].ToString();
DragDropEffects dde1 = DoDragDrop(s, DragDropEffects.All);
}
private void listBox1_DragLeave(object sender, EventArgs e)
{
ListBox lb = sender as ListBox;
lb.Items.Remove(lb.SelectedItem);
}
编辑 2013/05/16
到目前为止的评论和答案很有用,但我意识到我的问题还不够清楚。在这种情况下,我将显示一个与父窗体分开的对话框,该对话框基本上与listBox
. 当有人将文件拖出列表时,他们将其完全拖出表单。我这样做是不是把自己逼到了墙角?我承认我正在让它变得比它必须的更难,但我仍然想看看如果可能的话它会如何工作。