Member 12154788 Ответов: 1

Как сделать перетаскивание


How to do drag drop from one windows form to another windows form ?


Что я уже пробовал:

Я попытался использовать пример, как здесь
https://msdn.microsoft.com/en-us/library/system.windows.forms.control.dodragdrop(v=против 110). aspx

но я хочу, чтобы данные перетаскивались из другой оконной формы в другую оконную форму.

Maciej Los

Исходное окно и окно назначения могут быть разными. Есть ли какие-то проблемы?

Member 12154788

Ты имеешь в виду ?

1 Ответов

Рейтинг:
2

OriginalGriff

Это зависит от того, что вы тащите, но...
Это двухэтапный процесс: вам нужно включить drop в целевой форме (для этого используются файлы)
1) Установите для свойства AllowDrop вашей формы значение True
2) создать обработчик для события dragenter и dragdrop события вашей формы.
3) в обработчике события dragenter, добавьте следующую строку кода:

e.Effect = DragDropEffects.Move;

4) в обработчике DragDrop добавьте следующее:
string[] files = (string[]) e.Data.GetData(DataFormats.FileDrop);
if (files != null)
    {
    foreach (string file in files)
        {
        Console.WriteLine(file); // Or whatever you need to do...
        }
    }

В исходной форме это немного сложнее, так как вам нужно использовать элемент управления, поддерживающий перетаскивание, например ListView.
1) обработайте событие controls ItemDrag. В этом случае ListView:
private void myListView_ItemDrag(object sender, ItemDragEventArgs e)
    {
    StringCollection s = new StringCollection();
    s.Add(@"D:\Test Data\MyPic.jpg");
    DataObject obj = new DataObject();
    obj.SetFileDropList(s);
    myListView.DoDragDrop(obj, DragDropEffects.Copy);
    }

2) Вот именно!


Member 12154788

Можете ли вы объяснить мне этот код
строка[] файлов = (строка[]) Эл.Данных.Метода GetData(Версии Dataformats.FileDrop);
if (files != null)
{
foreach (строковый файл в файлах)
{
Приставка.WriteLine(file); / / или все, что вам нужно сделать...
}
}

OriginalGriff

Какую часть этого вы не понимаете?