如何通过拖放同步两个列表框元素?

Posted

技术标签:

【中文标题】如何通过拖放同步两个列表框元素?【英文标题】:How to synchronize two listboxes elements with drag&drop? 【发布时间】:2022-01-16 17:11:50 【问题描述】:

例如,用户将在同一个列表框中拖放和重新定位 1 个元素,该元素的索引会改变,同时我希望另一个列表框重新定位在该索引处移动的元素以匹配列表框重新定位的元素。

我要处理的拖放操作示例(我将 Brandon 移动到 ListBox1 中的索引 0 处,Credit 自动移动到与 ListBox2 中的 ListBox1 相同的索引处)。

如何以编程方式或在 xaml 中执行此操作?

【问题讨论】:

您使用哪种语言工作?您已标记 C# 和 VB.NET VB.Net,但如果需要,我会使用转换器将 C# 转换为 VB.Net,因此任何人都可以用他们舒适的语言给我一个解决方案:)。 【参考方案1】:

synchronize two listboxes elements with drag&drop?

你好我的朋友 以下 C# 代码中有 2 个列表框。您可以对第一个元素中的元素进行排序,然后您将在 listBox 2 中看到相同的结果

注1:>>>>

listBox1.AllowDrop = true;在表单加载时

注2:这一行>>>

对象数据 = e.Data.GetData(typeof(string)); 你必须传递一个字符串

================================================ ======

  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.Move);
    

   

    private void listBox1_DragDrop(object sender, DragEventArgs e)
    
        Point point = listBox1.PointToClient(new Point(e.X, e.Y));
        int index = this.listBox1.IndexFromPoint(point);
        if (index < 0) index = this.listBox1.Items.Count - 1;
        object data = e.Data.GetData(typeof(string));
        this.listBox1.Items.Remove(data);
        this.listBox1.Items.Insert(index, data);

       
            listBox2.Items.Clear();
            for (int i = 0; i < listBox1.Items.Count; i++)
            
                listBox2.Items.Add(listBox1.Items[i]);
            


    

    private void listBox1_DragOver(object sender, DragEventArgs e)
    
        e.Effect = DragDropEffects.Move;
    

【讨论】:

以上是关于如何通过拖放同步两个列表框元素?的主要内容,如果未能解决你的问题,请参考以下文章

tkinter 列表框用 python 拖放

WPF MVVM C#​​:列表框拖放,无需代码

WPF MVVM C#:列表框拖放而没有代码

隐藏列表框滚动条和同步滚动

WPF - 在列表框中上下拖放数据模板

使用拖放重新排序winforms列表框?