我有一个带有列表框和树视图的winform.
一旦我的列表框中填充了项目,我想从列表框中拖动它们(多个或单个)并将它们放在树视图中的节点中.
如果有人在C#中有一个很好的例子.
已经有一段时间了,因为我已经搞乱了Drag/Drop,所以我想我会写一个快速的样本.
基本上,我有一个表单,左边是列表框,右边是树视图.然后我在上面放了一个按钮.单击该按钮时,它只会将接下来十天的日期放入列表框中.它还使用2个父节点和两个子节点填充TreeView.然后,您只需处理所有后续拖放事件即可使其正常工作.
public partial class Form1 : Form { public Form1() { InitializeComponent(); this.treeView1.AllowDrop = true; this.listBox1.AllowDrop = true; this.listBox1.MouseDown += new MouseEventHandler(listBox1_MouseDown); this.listBox1.DragOver += new DragEventHandler(listBox1_DragOver); this.treeView1.DragEnter += new DragEventHandler(treeView1_DragEnter); this.treeView1.DragDrop += new DragEventHandler(treeView1_DragDrop); } private void button1_Click(object sender, EventArgs e) { this.PopulateListBox(); this.PopulateTreeView(); } private void PopulateListBox() { for (int i = 0; i <= 10; i++) { this.listBox1.Items.Add(DateTime.Now.AddDays(i)); } } private void PopulateTreeView() { for (int i = 1; i <= 2; i++) { TreeNode node = new TreeNode("Node" + i); for (int j = 1; j <= 2; j++) { node.Nodes.Add("SubNode" + j); } this.treeView1.Nodes.Add(node); } } private void treeView1_DragDrop(object sender, DragEventArgs e) { TreeNode nodeToDropIn = this.treeView1.GetNodeAt(this.treeView1.PointToClient(new Point(e.X, e.Y))); if (nodeToDropIn == null) { return; } if(nodeToDropIn.Level > 0) { nodeToDropIn = nodeToDropIn.Parent; } object data = e.Data.GetData(typeof(DateTime)); if (data == null) { return; } nodeToDropIn.Nodes.Add(data.ToString()); this.listBox1.Items.Remove(data); } private void listBox1_DragOver(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Move; } private void treeView1_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Move; } private void listBox1_MouseDown(object sender, MouseEventArgs e) { this.listBox1.DoDragDrop(this.listBox1.SelectedItem, DragDropEffects.Move); } }