15-09-12, 12:33 AM
تفضل أخي الطريقة :
لكن ليس عن طريق الأداة OpenFileDialog لأنك عندما تفتح هذة الأداة تصبح الأدوات في النافذة السابقة متجمدة لا تستجيب لأي شيء لذلك لا تستطيع السحب والإفلات في النافذة السابقة لأنها ستصبح Disabled مشلولة .
إفتح أي مجلد في جهازك وليكن My Documents أو مجلداتي أو أي مجلد في جهازك ,, ثم قم بسحب الملفات إلى الأداة Attachment_ListBox
هذة الصورة متحركة تبين عملية السحب والإفلات
لا تنسى أن تغير هذة الخاصية
في هذا الحدث (DragEnter) سنقوم بالتحقق من البيانات المسحوبة فوق أداة اللست بوكس (Attachment_ListBox)
إذا كانت البيانات من النوع الذي نريدة سيتغير مؤشر الماوس ,,
نفس الذي يحدث في نظام الملفات الخاص بالوندوز عندما تسحب ملف من مجلد وتريد أن تنقلة إلى مجلد آخر
لكن ليس عن طريق الأداة OpenFileDialog لأنك عندما تفتح هذة الأداة تصبح الأدوات في النافذة السابقة متجمدة لا تستجيب لأي شيء لذلك لا تستطيع السحب والإفلات في النافذة السابقة لأنها ستصبح Disabled مشلولة .
إفتح أي مجلد في جهازك وليكن My Documents أو مجلداتي أو أي مجلد في جهازك ,, ثم قم بسحب الملفات إلى الأداة Attachment_ListBox
هذة الصورة متحركة تبين عملية السحب والإفلات
لا تنسى أن تغير هذة الخاصية
في هذا الحدث (DragEnter) سنقوم بالتحقق من البيانات المسحوبة فوق أداة اللست بوكس (Attachment_ListBox)
إذا كانت البيانات من النوع الذي نريدة سيتغير مؤشر الماوس ,,
نفس الذي يحدث في نظام الملفات الخاص بالوندوز عندما تسحب ملف من مجلد وتريد أن تنقلة إلى مجلد آخر
رمز برمجي:
Private Sub Attachment_ListBox_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Attachment_ListBox.DragEnter If e.Data.GetDataPresent(DataFormats.FileDrop) Then ' إذا تحقق الشرط سنسمح بعملية السحب والإفلات e.Effect = DragDropEffects.Copy Else ' إذا لم يتحقق لن يحدث شيء e.Effect = DragDropEffects.None End If End Sub
هذا الحدث الخاص بالإفلات فوق الأداة Attachment_ListBox حيث أن البيانات المسحوبة هي ملفات تم سحبها من مجلد
البيانات في الحقيقة هي مسارات الملفات المسحوبة وليس بيانات الملفات نفسها
رمز برمجي:
Private Sub Attachment_ListBox_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Attachment_ListBox.DragDrop ' من نوع مصفوفة نصية والذي سيحمل عناوين جميع الملفات file_names هنا قمت بعمل متغير اسمة ' كيف نتحقق من أن البيانات المسحوبة فوق الأداة هي من نوع ملفات ' DataFormats.FileDrop عن طريق البراميتر Dim File_Names As String() = DirectCast(e.Data.GetData(DataFormats.FileDrop), String()) ' file_names هنا سندخل في حلقة تكرارية لنقوم بإضافة جميع الملفات الموجودة في المصفوفة For Each FileName As String In File_Names ' هذة المجموعة الأصلية التي تحمل عنوان الملف بالكامل والتي سيتم تفريغها في الرسالة Me.AttachmentCollection.Add(FileName) '- سيتم إضافة إسم الملف هنا فقط ليراه المستخدم في المثال وليس المسار بالكامل Attachment_ListBox.Items.Add(My.Computer.FileSystem.GetName(FileName)) ' بما أننا قمنا بإضافة ملفات فيجب أن نفعل الزر الخاص بحذفها DeleteSelectedAttachment.Enabled = True Next FileName End Sub
قم بإضافة الحدثين السابقين إلى المشروع (أقصد المشروع الذي قمت بالشرح علية في هذا الموضوع)
تحياتي لك ,,
تحياتي لك ,,
