2009-11-30 157 views
3

试图实现2个列表框之间的拖放以及我迄今为止所看到的所有示例都不太好闻。在两个列表框之间拖放

有人可以指点我或给我一个很好的实施吗?

+3

“真的不好闻。”澄清。 – MiffTheFox

+1

从来没有听说过代码味道? ;) – Jrud

+1

我很欣赏我对这个派对迟了三年,但这就是维基百科对代码气味所说的话:http://en.wikipedia.org/wiki/Code_smell – Surfbutler

回答

3

你见过this

+0

来自同一网站的替代和更新的例子: https://www.codeproject.com/Articles/36412/Drag-and-Drop-ListBox – sorifiend

1

在.net中执行拖放控制的正确方法是在第二个控件的DragDrop事件处理程序中运行代码。

它可能“闻”怪异,但这是它如何在.NET中工作。

7

下面是一个示例表单。开始使用新的WF项目并在窗体上放置两个列表框。使代码如下所示:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     listBox1.Items.AddRange(new object[] { "one", "two", "three" }); 
     listBox1.MouseDown += new MouseEventHandler(listBox1_MouseDown); 
     listBox1.MouseMove += new MouseEventHandler(listBox1_MouseMove); 
     listBox2.AllowDrop = true; 
     listBox2.DragEnter += new DragEventHandler(listBox2_DragEnter); 
     listBox2.DragDrop += new DragEventHandler(listBox2_DragDrop); 
    } 

    private Point mDownPos; 
    void listBox1_MouseDown(object sender, MouseEventArgs e) { 
     mDownPos = e.Location; 
    } 
    void listBox1_MouseMove(object sender, MouseEventArgs e) { 
     if (e.Button != MouseButtons.Left) return; 
     int index = listBox1.IndexFromPoint(e.Location); 
     if (index < 0) return; 
     if (Math.Abs(e.X - mDownPos.X) >= SystemInformation.DragSize.Width || 
      Math.Abs(e.Y - mDownPos.Y) >= SystemInformation.DragSize.Height) 
     DoDragDrop(new DragObject(listBox1, listBox1.Items[index]), DragDropEffects.Move); 
    } 

    void listBox2_DragEnter(object sender, DragEventArgs e) { 
     DragObject obj = e.Data.GetData(typeof(DragObject)) as DragObject; 
     if (obj != null && obj.source != listBox2) e.Effect = e.AllowedEffect; 
    } 
    void listBox2_DragDrop(object sender, DragEventArgs e) { 
     DragObject obj = e.Data.GetData(typeof(DragObject)) as DragObject; 
     listBox2.Items.Add(obj.item); 
     obj.source.Items.Remove(obj.item); 
    } 

    private class DragObject { 
     public ListBox source; 
     public object item; 
     public DragObject(ListBox box, object data) { source = box; item = data; } 
    } 
    } 
相关问题