在具有“值”的两个列表框之间拖放

本文关键字:两个 列表 拖放 之间 | 更新日期: 2023-09-27 17:58:45

我有两个列表框,一个是DataBound,它有DisplayMeber和ValueMember。我需要将条目从DataBound ListBox拖放到其他。

我试过了,可以得到显示文本。但不是价值。如何将显示文本+值发送到目的地。

 private void lbFav_DragDrop(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormats.StringFormat))
        {
            string selectedManufacturer = e.Data.GetData(DataFormats.StringFormat) as string;
            if (!string.IsNullOrEmpty(selectedManufacturer))
            {
                if (selectedManufacturer.StartsWith("M_"))
                {
                    selectedManufacturer = selectedManufacturer.Substring(2, (selectedManufacturer.Length - 2));
                    int found = lbFavSupp.FindString(selectedManufacturer);
                    if (found < 0)
                    {
                        lbFav.Items.Add(selectedManufacturer);
                    }
                }
            }
        }
    }

在具有“值”的两个列表框之间拖放

您可以将发送方强制转换为列表框并读取其选定值。如果您在MouseDown事件中处理从一个列表框拖动,那么下面这样的操作应该有效。

        int index = listBox1.IndexFromPoint(e.X, e.Y);
        var s = listBox1.Items[index]; //Putting item instead of
        DragDropEffects dde1 = DoDragDrop(s, DragDropEffects.All);
        if (dde1 == DragDropEffects.All)
        {
            listBox1.Items.RemoveAt(listBox1.IndexFromPoint(e.X, e.Y));
        }
    }

在这种情况下,我的列表框数据源是System.Collections.DictionaryEntry.的集合

因此,在dragdrop事件中,我可以读取如下所示的选定值。

if (e.Data.GetDataPresent("System.Collections.DictionaryEntry"))
{
    System.Collections.DictionaryEntry r = (System.Collections.DictionaryEntry)e.Data.GetData("System.Collections.DictionaryEntry");
    //Use r.Key or r.Value.
    lbFav.Items.Add(r.Key);!
}