PDA

View Full Version : Drag a picture and Drop it on pictureBox



arshia_m
یک شنبه 11 فروردین 1387, 05:39 صبح
سلام
با کد زیر می شه فابلهای عکس را از طریق درگ در pictureBox نمایش داد.



privatevoid pictureBox1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
privatevoid pictureBox1_DragDrop(object sender, DragEventArgs e)
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
pictureBox1.Image = Image.FromFile(files[0]);
}

توجه کنید که به دلیل نبود خاصیت pictureBox1.AllowDrop درپنجره خواص، باید آنرا در
Form1_Load ،مقدار true داد.

راه دوم:
اینه که با یه تغییر، این دستورات را در رویدادهای مشابه فرمی که pictureBox1 در آن قراردارد قرار دهیم .


int x = this.PointToClient(newPoint(e.X, e.Y)).X;
int y = this.PointToClient(newPoint(e.X, e.Y)).Y;
if (x >= pictureBox1.Location.X && x <= pictureBox1.Location.X + pictureBox1.Width && y >= pictureBox1.Location.Y && y <= pictureBox1.Location.Y + pictureBox1.Height)
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
pictureBox1.Image = Image.FromFile(files[0]);
}

sinpin
یک شنبه 11 فروردین 1387, 05:56 صبح
ممنون - نکته ی خوبی بود (هر چند اگر قبلا، به شکلی دیگر در تاپیک نکات (http://barnamenevis.org/forum/showthread.php?t=95001) وجود داشت)

من میخوام به همه ی دوستان پیشنهاد کنم که هرکس روی یک زمینه تمرکز کنه و یک تاپیک آموزشی رو دست بگیره و در هر تاپیک هم فقط در مورد همون موضوع صحبت بشه ...

برای مثال این دوستمون میتونند روی drag & drop و سایر خصوصیات کنترلها تمرکز کنند، دوستی دیگر روی نحوه ی ساخت کنترلهای سفارشی و ...

اولین نتیجه ی مثبت این کار هم عاید خود نگارنده ی تاپیک میشه؛ چون وقتی قرار باشه یک موضوع خاص رو آموزش بدید باید جزییات زیادی در موردش بخونید.

یک لحظه تصور کنید تالار سی شارپ رو در حالتیکه به جای اینکه هر روز پس از لاگین با یکسری سئوالات تکراری و گاه بیهوده (چطور میشه تکستباکس فرم 2 را از فرم 1 ....) روبرو بشید، یک تاپیک آموزشی جدید ببینید : "تصور کن اگه حتی تصور کردنش سخته !"

arshia_m
دوشنبه 12 فروردین 1387, 00:38 صبح
سلام

ممنون از محبت و پیشنهاد sin pin
****************
اجازه بدین به ادامه تاپیک قبلیم مطلب زیر را اضافه کنم

در Windows هنگام درگ کردن data وضعیتهای زیر را داریم:

drag+shift or only drag = move

drag+Ctrl = copy

drag+Alt = linkd

با چشم پوشی از نوع data اگر کد زیر را در رویداد DragOver کنترل مقصد اضافه کنیم

حالتهای بالا در برنامه نیز پیش می آید


// Set the effect based upon the KeyState.
if ((e.KeyState & (8 + 32)) == (8 + 32) &&
(e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link)
// KeyState 8 + 32 = CTL + ALT
e.Effect = DragDropEffects.Link;
elseif ((e.KeyState & 32) == 32 &&
(e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link)
// ALT KeyState for link.
e.Effect = DragDropEffects.Link;
elseif ((e.KeyState & 4) == 4 &&
(e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)
// SHIFT KeyState for move.
e.Effect = DragDropEffects.Move;
elseif ((e.KeyState & 8) == 8 &&
(e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy)
// CTL KeyState for copy.
e.Effect = DragDropEffects.Copy;
elseif ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)
// By default, the drop action should be move, if allowed.
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;