تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
شرح كيفية برمجة( مثال نسخ الملفات من مكان انت تحدده الى مكان انت تحدده بامتداد انت تحدده)
#1

المثال المراد شرحه هنا


فيه ادوات مش ضروري نستخدمها مثل مربعات نص عرض المسار ممكن نشتغل من دونها.
اضف الادوات بالتسميات الموضحة بالصورة
prg = progressbar
bgw_purn = backgroundworker
------------------------------
الان قم باضافة قائمة الامتدادات الى اداة Cobobox


كود :
*
*.txt
*.bat
*.exe
*.368
*.dat
*.HTM
*.wmz
*.DUN
*.xml
*.INF
*.wiz
*.CHM
*.DOT
*.COM
*.SCR
*.HTA
*.ISP
*.ZIP
*.DLL
*.ini
*.pot
*.icm
*.CER
*.INS
*.swf
*.REG
*.rdw
*.PWL
*.WAV
*.HLP
*.ASF
*.BMP
*.000
*.jpg
*.gif
*.mpeg
*.map
*.sig
*.cnt
*.man
*.VER
*.ICW
*.log
*.flv
*.wmv
*.mp3
[align=center]*.wav[/align]

--------------------------------
اولا استدعي ماتسمى بفضاء الاسماء
كود :
Imports System.IO

ثم اكتب التعريفات في منطقة التصريحات العامة
كود :
Dim cou As Integer
    Dim fbd1 As New FolderBrowserDialog
    Dim fbd2 As New FolderBrowserDialog
    Dim all As New List(Of String)
في حدث النقر لزر تحديد المجلد الاصل لنسخ الملفات منه اكتب
كود :
If fbd1.ShowDialog = Windows.Forms.DialogResult.OK Then
            frst_folder.Text = fbd1.SelectedPath
            On Error Resume Next
            For Each itm In Directory.GetFiles(fbd1.SelectedPath & "\", tens.Text)
                all.Add(itm)
            Next
            cou = all.Count
        End If
        prg.Minimum = 0
        prg.Maximum = cou

شرح الكود على طريقتي:
كود :
If fbd1.ShowDialog = Windows.Forms.DialogResult.OK Then
هذا الشرط ضروري ومهم بحيث لا نسمح للبرنامج بالعمل مالم يقم المستخدم بنقر زر موافق
كود :
frst_folder.Text = fbd1.SelectedPath
ليست ضرورية ويمكننا الاستغناء عنها فهي فقط لتسلية المستخدم ولا تحتاج شرح
كود :
On Error Resume Next
لتخطي المشاكل والاستمرار في الحياة (كم هي رائعة هذه الجملةSmile)
كود :
For Each itm In Directory.GetFiles(fbd1.SelectedPath & "\", tens.Text)                all.Add(itm)
           Next

يقول لكل شيء موجود في المجلد المحدد (عبر مستعرض المجلدات) وفق امتداد محدد من الكومبوبوكس يضيفها الى القائمة النصية all المعرفة بهيدر البرنامج(ان صح التعبير)
كود :
cou = all.Count
هذا لحساب محتويات المصفوفة
كود :
prg.Minimum = 0        prg.Maximum = cou

هذا تعيين الحد الادنى والاعلى لاداة الشريط prg=progressbar
والحد الاعلى هو عدد محتويات المصفوفة
-------------------
لنذهب الان الى حدث النقر للزر المسؤول عن تحديد المجلد الهدف
ونكتب به
كود :
If fbd2.ShowDialog = Windows.Forms.DialogResult.OK Then            scnd_folder.Text = fbd2.SelectedPath
        End If
نفس الشرط الاول لمستعرض المجلدات
لننتقل الان الى زر بدء النسخ
كود :
If tens.Text.Trim.Replace(" ", "") = "" Then MsgBox("حدد الامتداد") : Exit Sub        If frst_folder.Text.Trim.Replace(" ", "") = "" Then MsgBox("حدد المجلد الاصل") : Exit Sub
        If scnd_folder.Text.Trim.Replace(" ", "") = "" Then MsgBox("حدد المجلد الهدف") : Exit Sub
        If bgw_purn.IsBusy Then Exit Sub
        prg.Value = prg.Minimum
        bgw_purn.RunWorkerAsync()

الشرح
كود :
If tens.Text.Trim.Replace(" ", "") = "" Then MsgBox("حدد الامتداد") : Exit Sub
        If frst_folder.Text.Trim.Replace(" ", "") = "" Then MsgBox("حدد المجلد الاصل") : Exit Sub
        If scnd_folder.Text.Trim.Replace(" ", "") = "" Then MsgBox("حدد المجلد الهدف") : Exit Sub

هذي للتحقق من ان مربعات النص ليست فارغة ولا تحتوي فراغات
كود :
If bgw_purn.IsBusy Then Exit Sub
بدل ما نعطل الزر نتحقق هل الباك قراوند مشغول ام لا
ان كان مشغل يخرج من الروتين
كود :
prg.Value = prg.Minimum
هذا لاعادة القيمة للبرقريس بار الى الصفر
كود :
bgw_purn.RunWorkerAsync()
جاء وقت العمل لنذهب لهذا العمل
لننتقل الان الى bgw_purn
ضمن الحدث dowork
كود :
For Each Fi In all            File.Copy(Fi, fbd2.SelectedPath & "\" & IO.Path.GetFileName(Fi), False)
            ListBox1.Items.Add(Fi)
            prg.Value += 1
            ListBox1.SelectedIndex = ListBox1.Items.Count - 1
        Next

الشرح
كود :
For Each Fi In all
يعني لاي شي موجود في القائمة النصية
كود :
File.Copy(Fi, fbd2.SelectedPath & "\" & IO.Path.GetFileName(Fi), False)
يقوم بنسخ الملف الذي اتى عليه الدور حسب مساره والمخزن في المتغير Fi الى المجلد الهدف ثم لابد من اضافة الخط المائل "\" ثم اسم الملف المنسوخ يمكنك كتابته يدويا لكنه مرهق فالافضل نعطيه اسمه القديم(قديمك نديمك) طبعا المسار مخزن بالمتغير Fi فلو وضعناه هكذا سيظهر خطا فادخ لانه يحتوي مسار كامل لكن لناخذ من المسار اسم الملف فقط بالطريقة الموجودة وهي:
كود :
io.path.getfilename(Fiممكن تحط اي مسار لو حبيت)

سالفة True و False هذي للكتابة على الملف
كود :
ListBox1.Items.Add(Fi)            prg.Value += 1
            ListBox1.SelectedIndex = ListBox1.Items.Count - 1

شغلات زيادة فقط الهاء المستخدم
السطر الاول اضافة المسار كاملا الى Listbox1
ولو حبيت فقط اسم الملف اضف
كود :
io.path.getfilename(Fi)


عند حدث
RunWorkerCompleted
تكتب رسالة انه انتهى لكن هذا الحدث سيحدث سواء عمل شيئا ام لم يعمل ..يمكنك وضع شرط او قيمة ما بعد آخر كود في عملنا السابق لتبين للمستخدم هل تم النسخ ام لا


الخطوة التي لا احبذها لكنها ضرورية حتى نعرف نتحاشاها وهي ضمن حدث تحميل الفورم اكتب
كود :
Control.CheckForIllegalCrossThreadCalls = False


ارجو ان اكون قدمت لكم شيئا مفيدا
الدعاء لي والتقييم(هههههه طماع)
السلام عليكم ورحمة الله وبركاته
الرد }}}
#2
جزاك الله خيرا وجعله فى موازين حسناتك
فعلا رائع ومتعوب عليه
الرد }}}
تم الشكر بواسطة: asemshahen5
#3
مشكور اخي عالمجهود شرح رائع
سكس مطلقات
الرد }}}
تم الشكر بواسطة: elgokr , سعود , asemshahen5
#4
يعطيك العافية
مجهود رائع
مودتي
Heart
[صورة مرفقة: 2016%2B-%2B1]
الرد }}}
تم الشكر بواسطة: elgokr , سعود , asemshahen5
#5
اخي مايعجبني فيك حس الدعابة موضوعك رائع وتستحق ألف شكر
على مجهودك الرائع
الرد }}}
تم الشكر بواسطة: asemshahen5 , سعود
#6
(03-09-19, 12:29 AM)أمجد وضاح كتب : اخي مايعجبني فيك حس الدعابة موضوعك رائع وتستحق ألف شكر
على مجهودك الرائع

الروعة وجود الاحبة والاخوة امثالك .
حفظك الله و بارك فيك.
الرد }}}
تم الشكر بواسطة: asemshahen5



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم