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

عمل Drag&drop

بدأه Ayoub JAMAL EL IDRISSI في 15 يونيو 2008 · 0 رد · 572 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1

بسم الله الرحمن الرحيم

سوف نرى في هذا الدرس الصغير كيف يمكننا عمل Drag And Drop لأي ملف على برنامجنا وهذا الأمر جد مفيد فمثلا لو كنت تعمل على برنامج للصور فسيكون من الجميل أن تتيح الامكانية للمستعمل بأن يقوم بسحب مجموعة صور الى برنامجك و قراءتها بشكل تلقائي ونفس الأمر بالنسبة لبرنامج موسيقى مثلا لكن مثالنا سيكون على برنامج صور

نقوم أولا بانشاء مشروع جميل صغير وجديد :D نضيف الى الفورم PictureBox و أداتي Buttons الاولى تأخذ اسم Next و الثانية Previous

ندخل الآن الى الكود و نقوماولا بتعريف متغيرين في منطقة Public بالأعلى و هما :

Public DraggedFiles() As String

   Public CurrentImageIndex As Integer

المتغير الأول هو Array و سوف يحتوي على الملفات او ال Links الخاصة بالملفات المسحوبة الى البرنامج.

المتغير الثاني سيحتوي على رقم او Index الصورة المعروضة حاليا

في ال Form_Load نكتب الكود التالي :

Me.AllowDrop = True

أولا قمنا بجعل الForm تقبل حدث ال Droping عن طريق خاصية AllowDrop ثم بعدها أعددنا ال Timer.

الآن سنبحث عن الحدث الذي سيحدث عندما نقوم بسحب الملفات الى الفور و هذا الحدث هو Form_DragEnter هذا الحدث ينطلق عند سحب أي ملف الى الفورم و فيه سوف نكتب الكود التالي :

Private Sub Form1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragEnter

		   e.Effect = DragDropEffects.Link

   End Sub

في هذا الحدث قمنا بتحديد نوع البيانات التي نريدها و هي Links بمعنى اننا نريد جلب ال Links لل Objects المسحوبة على الفورم فقط.

الحدث الأخير هو ال Form_DragDrop و الذي يحدث حالما نترك الماوس يعني عندما أرمي الملفات المسحوبة على الفورم و نكتب الكود التالي في هذا الحدث :

Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop

		   DraggedFiles = e.Data.GetData(DataFormats.FileDrop)

		   PictureBox1.Image = Image.FromFile(DraggedFiles(0))

   End Sub

السطر الأول قمنا فيه بجلب ال LINKS و وضعها في ال Array التي حددناها في الأول و ال e.Data.GetData تقوم بارجاع Array بال Links المسحوبة الى الفورم كما ترون فقد حددنا نوع ال Data و هي DataFormats.FileDrop أي كأننا قلنا لهاجلب لنا المعلومات من الملفات المسحوبة على الفورم.

بعد ذلك نظهر الصورة الاولى في ال Array .

الى هذه النقطة كل شئ جميل و رائع فقد تمكنا من ادخال ال LINKS الى برنامجنا ووضعها في Array من اختيارنا و يمكننا التعامل معها كما نريد.

سنرى الآن كود ال Buttons .

Previous Button

Private Sub Previous_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

		   If CurrentImageIndex = 0 Then

			   CurrentImageIndex = DraggedFiles.GetUpperBound(0)

		   Else

			   CurrentImageIndex -= 1

		   End If



		   PictureBox1.Image = Image.FromFile(DraggedFiles(CurrentImageIndex))

   End Sub

ممممم ، الكود جد بسيط فأولا نقوم بعمل Test ونرى اذا كنا نشاهد الصورة الأولى في اللائحة فاذا كانذلك صحيح فالضفط على Previous يجب ان يعيدنا الى آخر صورة في اللائحة لذا نعدل CurrentImageIndex لتصبح DraggedFiles.GetUpperBound(0) و نحن نعرف ان DraggedFiles.GetUpperBound(0) تقوم بارجاع Index آخر Item في المصفوفة اما اذا لم نكن في أول الصورة فنعود بخطوة واحدة و ننقص 1 من قيمة CurrentImageIndex و بعد ذلك نحمل الصورة الى أداة PictureBox1.

Next Button

Private Sub Next_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

		   If CurrentImageIndex = DraggedFiles.GetUpperBound(0) Then

			   CurrentImageIndex = 0

		   Else

			   CurrentImageIndex += 1

		   End If



		   PictureBox1.Image = Image.FromFile(DraggedFiles(CurrentImageIndex))



   End Sub

الكود جد مشابه بكود ال Previous Button الا ان هذه المرة نعمل Test ونرى اذا ما كنا في آخر اللائحة فاذا كنا كذلك نعود الى البداية و يكون بذلك CurrentImageIndex=0 اما في غير تلك الحالة فنقوم باضافة 1 الى ال CurrentImageIndex و نحمل بعدها الصورة الى ال PictureBox1.

الخاتمة :

أتمنى ان يكون هذا الدرس البسيط قد أدى واجبه و افادكم و لو قليلا، طبعا البرنامج ليس كاملا يعني هناك عدة ثغراث فمثلا ماذا سيحدث لو سحبنا ملفا من نوع آخر ؟؟؟ طبعا ستحدث Exception لذا فيمكنكم تعديل الكود ليقبل Extensions محددة...

تم تعديل هذه المشاركة بواسطة Ayoub JAMAL EL IDRISSI في 15 يونيو 2008 في 16:00

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