我正在尝试构建一个简单的界面,允许用户将文件拖放到listBox中以将它们添加到处理过程中,并可以拖出以删除它们。一切都很顺利,但我想添加一个功能,使其稍微复杂一些。
现在,我将项目的删除绑定到DragLeave事件,这意味着鼠标一离开该框,项目就被删除了。但我希望用户能够改变主意。换句话说,如果他们意识到他们正在拖出错误的文件,我希望他们能够将鼠标移回listBox并释放鼠标以取消操作。我认为这意味着我需要能够捕获MouseUp事件而不是DragLeave事件。但到目前为止,这并不成功。
下面是我当前用于删除拖出文件的代码。如何修改以保留文件直到用户松开鼠标按钮?
现在,我将项目的删除绑定到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
一样大。当有人将文件从列表中拖出时,他们完全将其拖出了表单。我是否已经陷入了困境?我认识到我正在使它比必要的更难,但如果可能的话,我仍然想看看它如何工作。
lb.Items.Remove(lb.SelectedItem);
移动到该目标控件的DragDrop
事件处理程序中。 - Bolulb.Items.Remove(lb.SelectedItem);
之前提供一个警告messagebox
,以便与用户进行双重确认。 - Bolu