Перетащите курсор между двумя списками со значениями - PullRequest
0 голосов
/ 07 июня 2011

У меня есть 2 списка, одно из которых - 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);
                    }
                }
            }
        }
    }

1 Ответ

2 голосов
/ 07 июня 2011

Вы можете преобразовать отправителя в список и прочитать его выбранное значение.Если вы обрабатываете перетаскивание из onelistbox в событии 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);!
}
...