سلام
رویدادی به نام Drag-Drop وجود دارد که این اطلاعات را پس میدهد.
بطور نمونه در WPF اول باید خصیصه AllowDrop=true را روی کنترلر مورد نظر تنظیم کنید.
این کنترلر میتواند یک TextBox ساده و یا کل Window جاری باشد.
بعد زمان شروع درگ رویداد DragEnter رخ میدهد و زمان رها شدن هم رویداد Drop را دارید
بطور نمونه برای گرفتن مسیر یک فایل میتوانید رویداد Drop را شبیه این نوشت.
using System.Linq;
using System.Windows;
using System.Collections.Generic;
//...
private void Window_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent( DataFormats.FileDrop ))
{
this .txtFilePath.Text = ( e.Data.GetData( DataFormats.FileDrop ) as IEnumerable<string > )?.FirstOrDefault();
}
else if (e.Data.GetDataPresent( "FileNameW" ))
{
this .txtFilePath.Text = ( e.Data.GetData( "FileNameW" ) as IEnumerable<string > )?.FirstOrDefault();
}
else if (e.Data.GetDataPresent( "FileName" ))
{
this .txtFilePath.Text = ( e.Data.GetData( "FileName" ) as IEnumerable<string > )?.FirstOrDefault();
}
}
متد e.Data.GetFormats فهرست فرمت های موجود را پس میدهد.
همچنین کلاس ثابت DataFormats حاوی نام فرمت ها است.
متد e.Data.GetDataPresent بررسی میکند که شیء درگ شده جاری حاوی فلان فرمت است یا خیر.
متد e.Data.GetData هم داده ای با یک فرمت خاص را دریافت میکند.
برای درگ فایل ها و پوشه ها فرمت دیتا کلمه رزو شده FileDrop و همچنین کلمه FileNameW (یونیکدی) و FileName (اسکی) وجود دارد که حاوی آرایه string از نام فایل و پوشه های درگ شده است.
بطور مثال میتوانید در یک حلقله foreach همه را پردازش کنید و اولین پوشه Directory.Exists را بردارید ! یا هر کد دلخواه دیگری !
در WinForm هم خیلی شبیه همین است ...
باید AllowDrop=true کنید.
باید رویداد DragEnter را کدنویسی کنید و با رها شدن نوع شیء درگ شده موافقت کنید.
private void Form1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
درنهایت هم رویداد DragDrop را دقیق مانند قبل
( مانند رویداد Drop در WPF ) کدنویسی کنید.
موفق باشید.