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ارجو ان اكون قدمت لكم شيئا مفيدا
الدعاء لي والتقييم(هههههه طماع)
السلام عليكم ورحمة الله وبركاته