الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية إجراء عملية السحب والإفلات Drag And Drop

استطلاع
بدأه عبد الكريم كنعان في 29 يناير 2008 · 10 رد · 3,814 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام

قيم المقالة:

8 مشارك في التصويت

???? ???????

??? ????6 صوت · 75%
???2 صوت · 25%
???0 صوت · 0%
????0 صوت · 0%
#1 صاحب الموضوع

هل تعلم ان في هذه المقالة سوف نتناول ليس طعاما وانما موضوعا هاما، ألا هو إمكانية السحب والافلات في الادوات، ربما لم تفهم شيئا لذلك دعني أطرح عليك السؤال التالي:

اريد تصميم واجهة تحتوي على قائمة ببعض الاسماء (ربما الاصدقاء أو ما شابه)، وايضا إمكانية كتابة نص ما!!

اي بمعنى آخر اريد ListBox كما قلت تحتوي على قائمة من اسماء الاصدقاء وايضا الاداة RichTextBox التي تسمح لي بكتابة نص معين، والان كل ما اريده أن أقوم بسحب أحد الاسماء من ListBox ووضعه في RichTextBox، ولتحقيق ذلك فنحن نحتاج إلى ما يعرف بتقنية Drag And Drop.

دعنا من خلال تنفيذ المثال السابق ذكره التعرف على سهولة تحقيق ذلك، بعد أن تقوم بإنشاء مشروع جديد من نوع Windows Application وضع العناصر السالف ذكرها لتصبح الفورم على الشكل التالي:

post-37886-1201611572_thumb.jpg

والان قم من خلال الحدث Load الخاصة بالفورم بإضافة بعض اسماء اصدقاءك، و من خلال نفس الحدث أعطي الخاصة AllowDrop الخاصة بالاداة richTextBox1 القيمة true ليصبح الكود على الشكل التالي: مثلا:

private void Form1_Load(object sender, EventArgs e)
{
   richTextBox1.AllowDrop = true; 

   listBox1.Items.Add("Abdulkarim Kanaan");
   listBox1.Items.Add("Fadi");
   listBox1.Items.Add("Rami");
   listBox1.Items.Add("Turki");
   listBox1.Items.Add("Ismaeel");
}

والان بعد ذلك اختر الحدث MouseDown الخاص بالاداة listBox1، وقم بكتابة ما يلي:

private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
   listBox1.DoDragDrop(listBox1.SelectedItem, DragDropEffects.All);
}

حيث قمنا باستدعاء التابع DoDragDrop التابع للاداة listBox1، مع تحديد القيمة التي اجرينا عليها عملية السحب، بالاضافة إلى نوع عملية السحب هل هي عملية نقل Move أم نسخ Copy أم كافة العمليات All، طبعا هنا يظهر من الكود اننا قد اخترنا عملية النسخ Copy.

والان هناك حدثان هامان للاداة richTextBox1 سوف نقوم باستخدامهما والا وهما DragEnter و DragDrop.

حيث ان الحدث DragEnter: يقع عندما عندما يدخل مؤشر الفارة إلى الاداة richTextBox1 طبعا بعد إجراء عملية السحب

أما الحدث الثاني DragDrop: يقع هذا الحدث عندما نقوم بعملية الافلات على العنصر richTextBox1.

الكود التالي من اجل الحث DragEnter:

void richTextBox1_DragEnter(object sender, DragEventArgs e)
{
   if (e.Data.GetDataPresent(DataFormats.Text))
   {
	   e.Effect = DragDropEffects.Copy;
   }
   else
   {
	   e.Effect = DragDropEffects.None;
   }
}

طبعا من خلال التابع GetDataPresent يمكننا من فحص نوع البيانات المسحوبه هل هي نص أم صورة أم ....

اما الكود المطبق على الحدث DragDrop فهو:

void richTextBox1_DragDrop(object sender, DragEventArgs e){
   int i;
   String s;

   // Get start position to drop the text.
   i = richTextBox1.SelectionStart;
   s = richTextBox1.Text.Substring(i);
   richTextBox1.Text = richTextBox1.Text.Substring(0, i);

   // Drop the text on to the RichTextBox.
   richTextBox1.Text = richTextBox1.Text +
	   e.Data.GetData(DataFormats.Text).ToString();

   richTextBox1.Text = richTextBox1.Text + s;
}

طبعا ما فعلناه هنا عمايات بسيطة من اجل كتابة ما تم افلاته في المكان المحدد من النص أي ما قمنا به في المختصر المفيد هو عملية حشر الاسم المسحوب من قائمة الاسماء في المكان المجدد من النص الموجود داخل الاداة richTextBox1.

طبعا بقي شيء واحد واخير أحب التنويه علي أن الاحداث آنفة الذكر DragEnter و DragEnter لن تظهر لك في قائمة أحدث الاداة richTextBox1، لذلك يجب عليك كتابتها يدويا وسوف أقوم بكتابتها في الحدث الخاص بالفورم ليصبح الكود السابق على النحو التالي:

private void Form1_Load(object sender, EventArgs e)
{
	richTextBox1.AllowDrop = true;

	listBox1.Items.Add("Abdulkarim Kanaan");
	listBox1.Items.Add("Fadi");
	listBox1.Items.Add("Rami");
	listBox1.Items.Add("Turki");
	listBox1.Items.Add("Ismaeel");

	richTextBox1.DragEnter += new
		DragEventHandler(richTextBox1_DragEnter);
	richTextBox1.DragDrop += new
		DragEventHandler(richTextBox1_DragDrop);
}

وشكرا

السورس كود في المرفقات

DragAndDrop.zip

تم تعديل هذه المشاركة بواسطة عبد الكريم كنعان في 29 يناير 2008 في 16:17

#2

مثال على كيفية سحب ملف نصي بامتداد txt وافلاتحه على الاداة RichTextBox لكي يتم فتحه

انشىء برنامج جديد، اضف الاداة RichTextBox، أضف في الحدث Load للفورم الكود التالي:

private void Form1_Load(object sender, EventArgs e)
{
  richTextBox1.AllowDrop = true;

  richTextBox1.DragEnter += new
	  DragEventHandler(richTextBox1_DragEnter);
  richTextBox1.DragDrop += new
	  DragEventHandler(richTextBox1_DragDrop);
}

والان بعدها اكتب الكود التالي للحدث DragEnter على النحو التالي:

void richTextBox1_DragEnter(object sender, DragEventArgs e)
{
   if ((e.Data.GetDataPresent(DataFormats.FileDrop))&&		
	  (System.IO.Path.GetExtension(
	  ((string[])e.Data.GetData(DataFormats.FileDrop))[0])
	  == ".txt"))
   {
	  e.Effect = DragDropEffects.Copy;
   }
   else
   {
	  e.Effect = DragDropEffects.None;
   }
}

طبعا في الكود التالي تحققت أن الكائن المسحوب وهو ملف من خلال DataFormat.FileDrop واخذت مسر الملف من خلال:

((string[])e.Data.GetData(DataFormats.FileDrop))[0];

والان بقي ان تكتب كود الحدث DragDrop التالي:

void richTextBox1_DragDrop(object sender, DragEventArgs e)
{
   string fileName =
	  ((string[])e.Data.GetData(DataFormats.FileDrop))[0];

   richTextBox1.Text = System.IO.File.ReadAllText(fileName);
}

وشكرا،،

على كل الكود في المرفقات

DragAndDrop1.zip

تم تعديل هذه المشاركة بواسطة عبد الكريم كنعان في 30 يناير 2008 في 14:39

#3

Maney thanks for you

#5

موضوع رائع ........... ننتظر المزيد ان شاء الله

banner1.gif
#6

بارك الله فيكانا محتاج هاي الطريقة من زمان

يا أيها الناس قولو لا إله إلا الله تفلحوا وتملكوا بها العرب وتذل لكم العجم وإذا آمنتم كنتم ملوكا في الجنة

#7

بصراحة موضوع جداً مفيد

الله يعطيك العافية وشكراً لك

#8

:clapping:Thaaaaaaaaaaaaaaaanx mwod3 gamd

#10

مشكور با طيب

Chaos is rejecting all you have learned, chaos is being YOURSELF
 

#11

الله يبارك فيك يا اخ كنعان

والله درس جميل

وتسلم ايديك

ولدي إليك وصيتي عهد الأسودْ

العز غايتنا نعيش لكي نسود

و عريننا في الأرض معروف الحدود

فاحم العرين و صنه عن عبث القرود

أظفارنا للمجد قد خُلقت فدى

و نيوبنا سُنَّت بأجساد العدى

و زئيرنا في الأرض مرهوب الصدى

نعلي على جثث الأعادي السؤددا

مواضيع مشابهة