假设我们有一个带有Custom元素和空白面板的ListBox。将这些项拖到面板时,它们必须构建在某个逻辑上。例如,如果没有任何面板,则元素位于中间。但如果存在,那么新元素将保持在最接近它的元素附近。因此可以实现?
例如:
答案 0 :(得分:0)
我通过添加一些排序逻辑修改了this answer工作拖放实现。可以使用CSS样式在视觉上将项目置于中间。
假设:"最接近它"是按字母顺序最接近的。
public object lb_item = null;
private void listBox1_DragLeave(object sender, EventArgs e)
{
ListBox lb = sender as ListBox;
lb_item = lb.SelectedItem;
lb.Items.Remove(lb.SelectedItem);
}
private void listBox1_DragEnter(object sender, DragEventArgs e)
{
if (lb_item != null)
{
listBox1.Items.Add(lb_item);
lb_item = null;
// Here I added the logic:
// Sort all items added previously
// (thereby placing item in the middle).
listBox1.Sorted = true;
}
}
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
lb_item = null;
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 Form1_DragDrop(object sender, DragEventArgs e)
{
lb_item = null;
}