12-08-13, 05:36 PM
المثال المراد شرحه هنا
فيه ادوات مش ضروري نستخدمها مثل مربعات نص عرض المسار ممكن نشتغل من دونها.
اضف الادوات بالتسميات الموضحة بالصورة
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
كود :
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)
كود :
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
ارجو ان اكون قدمت لكم شيئا مفيدا
الدعاء لي والتقييم(هههههه طماع)
السلام عليكم ورحمة الله وبركاته