السلام عليكم و رحمة الله و بركاته
كنا قد توقفنا عند الحصول على المرفقات و خزنا اسماء المرفقات و روابطها في جدول خاص ثم قمنا بعرض اسم المرفق
في ListBox1 تمهيدا لتحميلها حسب الرغبة
نحن الان نمتلك رابط المرفق و اسمه , كما نملك ايضا حاوية الكوكيز و هي معبئة بالكوكيز لارسالها مع كل طلب دون ان نتعب
انفسنا بالحصول عليه مرة اخرى
كل ما تبقى هو انشاء طلب وفق رابط الملف و ارسال الكوكيز معه ثم استقبال رد الملقم و تخزين طول الملف (حجمه) في متغير رقمي
و من ثم انشاء كائن MemoryStream للتعامل مع البيانات القادمة و بعدها كتابة هذه البيانات الى القرص الصلب و تخزينها بالاسم الذي لدينا
اقصد هنا اسم الملف المعروض في ListBox1
قبل ان ابدأ بعملية تخزين الملف ساقوم بالبحث عن الملف في مكانين
المكان الاول : هو مجلد التخزين فاذا توفر الملف فلن نحمله مرة اخرى.
المكان الثاني:قاعدة البيانات و تحديدا جدول المرفقات فكما تعلم نحن نضيف اسم الملف و مساره الى القاعدة مع كل عملية تحميل
البحث في جدول المرفقات سيتم وفق اسم الملف و رقم المقالة.
اي اننا سنبحث عن الملف المرتبط بالمقالة الحالية
كما اننا سنبحث في جدول المقالات ايضا عن المقالة الحالية المعروضة في المستعرض وفق رابط المقال
سنجري مجموعة من المقارنات لكي لا نحمل اسم مرفق لا يرتبط بالمقالة الحالية
اذ اننا سنحاول قدر الامكان تحميل المرفق المرتبط مع المقالة فقط
بعد تحقق كل الشروط سنبدأ بتحميل الملف الى مجلد التخزين و اضافة رابط له في جدول المرفقات
في حدث زر التحميل DownloadAttachements_Click
عمليات فحص و مطابقة تستخدم اكواد بسيطة الاغلب يعرفها
جزء منها يهتم بالتعامل مع الملفات و الجزء الاخر جمل استعلام عادية للبحث في قاعدة البيانات
كنت افضل استخدام Linq To Dataset كون البيانات متوفرة لدينا في Dataset لكنني لم استخدم استعلامات Ling
منذ بداية الموضوع لذا سنبقى على جمل Sql .
الجزء المسؤول عن التحميل هو الدالة DownloadUrl
وهي دالة عادية تلخص الحديث السابق المختص بارسال الطلب و استقبال الرد و هي كما يلي
ارجع للشرح في الاعلى لتعرف سيناريو العمل
تبقى لدينا عدة مشاكل ليس المكان لعدها فقط ما واجهني منها
بعض الروابط في الموقع لا تعمل اما ان الملفات مفقودة او ان رابط التحميل لا يشير صراحة الى الملف المطلوب
فمثلا يوجد بعض الملفات في الموقع و خصوصا ملفات الرار (rar) يشير رابطها الى موقع YouTube و يقودني الى فلم اطفال (صديقتي...؟؟)
على اي حال متى ما كان رابط التحميل صحيح و الملف موجود ستكون قادر على التحميل
يحصل احيانا ان الملقم لا يرسل لك طول الملف بشكل حقيقي و هذا يؤدي الى اجهاض عملية التحميل اذ ان معرفة طول الملف الحقيقي
اساسا غير مدعومة اثناء رد الملقم
بعد تحميل المرفق الى مجلد التخزين سيتم اضافة رابط له في جدول المرفقات في القاعدة كما قلت سابقا
هناك مشكلة بسيطة قد تحدث عند نقل البرنامج من كان الى مكان و هي ان مسار الملف المخزن في القاعدة سيكون غير صحيح
لذا اعتمدت طريقة اخرى لفتح الملف تعتمد على البحث عن الملف في مجلد التخزين ستراها لاحقا عند الحديث عنها
بعد ان حملت الملف و تم ربطه مع القاعدة سيتم عرض كل المرفقات المرتبطة مع المقالة المخزنة في عنصر ListBox2 تحت المقالة
و بامكانك النقر مرتين على اي عنصر داخلها ليتم فتح المرفق و فق المسا المخزن في القاعدة او عبر اسمه
كود الحدث كما في الاسفل
اذا دققت في الكود السابق ستجد فيه اسطر اضافية باختصار عملها
اذا لم نجد الملف متوفر في مجلد التخزين عندها سنقوم بحذف الارتباط الموجود له في القاعدة لكي لا يشير هذا السطر الى ملف غير موجود
كذلك انا قمت بعمل دالة بسيطة تقوم باعطاء الحجم لكل الملف وفق الطريقة القياسية (KB,MB,GB,TR) اذ ليس معقولا ان تقوم بعرض حجم الملف
كارقام بل كحجوم و هو افضل
في الحقية يوجد دالتين الاولى للملفات المخزنة لدينا في القرص
و الثانية للملفات التي نريد تحميلها
الدالة الاولى
الدالة الثانية
الدالتين متشابهتين فقط في الاولى يكون البارميتر المرسل هو مسار الملف بينما في الثانية يكون طول الملف هذا كل شيئ
وهذا في حدث تحديد الملف ليتم عرض الحجم وفق التحديد
طبعا انا وضعت Timer بسيط لتعطيل زر تحميل المرفقات عند عدم وجود ملفات للتحميل
الان و بعد ان فهمنا طبيعة العمل نعود الى الازرار القياسية و تحديدا زر حفظ المقال اي حفظ صفحة HTML داخل جدول المقالات
العملية مقسومة الى شقين الاول حفظ للحقول العادية في الجدول و الثاني حفظ لبنية HTML داخل الحقل Content
كما في السابق انا لن اخزن المقال مرتين في الجدول لذا ساقوم بالبحث عن اسم المقال بدليل رابط المقال فاذا وجد لدينا سنجهض عملية حفظ
محتوى الصفحة فقط و ليس كل اجراء الحفظ بمعنى اخر ربما لسبب ما انت تريد تسمية المقال باسم اخر غير الاسم الافتراضي لذا ستكون قادرا على ذلك بينما عملية تحديث محتويات الصفحة فلن تكون قادرا على ذلك اذ ان الصفحة محفوظة لديك في القاعدة
الشق الاول عملية الحفظ (حدث زر الحفظ العام) اذ ان الحفظ يتم على مستوى كل الجداول (فقط الاجزاء التي تحتوي على تحديثات) هي فقط من سيتم تحديثها
هل تذكر الاجراء SaveData في الكلاس Connect هو من سيقوم بعملية الحفظ
لاحظ وجود الاجراء SaveHtml و هو الشق الثاني من عملية الحفظ
اذا دققت في الكود السابق ككل ستجد انني اقوم اولا بتخزين حقول المقالة بدون ارسال محتويات الصفحة و بعدها انا اقوم بتخزين محتويات الصفحة بعد التاكد من من وجودها بدليل رابط المقال
طبعا اذا حاولت تخزين محتويات الصفحة الحالية المعروضة في المستعرض فانه سيقوم بعملية مطابقة رابط الصفحة في المتصفح مع الرابط المعروض حاليا في حقل المقالات فاذا وجد اختلاف سيعطيك رسالة مفادها ان المقالة الحالية التي تريد تخزينها او تحديث محتوياتها مختلفة عن المقالة المعروضة
هذه السلسلة من اجراءات الامان لكي لا نخزن محتويات صفحة لا تمت بصلة لعنوان المقالة
انتهينا من عمليات الحفظ
الان بعض الاجرائيات البسيط مثل عرض شريط حالة التحميل الخاص بالمستعرض كما يلي
اجراء الفلترة الخاص بزر الفلترة و البحث بحسب اسم المقال
زر مسح الفلتر
زر الرجوع و الرئيسية و التحديث الخاصة بالمتصفح
صحيح هناك زر اضفته لاحقا للتراجع عن اضافة مقال
بعد ان قمنا بتخزين محتويات الصفحة في القاعدة اصبحنا قادرين الان على عرض المحتويات المخزنة في المستعرض
زر عرض المحتويات للمقالة الحالية
بقيت لدينا ازرار الحذف التي اجلت طرحها للاخر اذ ان عملية الحذف متزامنة بين القاعدة و الملفات المخزنة (المرفقات)
نبدا اولا مع حذف مقال مع مرفقاته
و من ثم حذف فرع كامل مع كل مقالاته و الملفات المخزنه مع كل مقال
انا جعلت عملية الحذف محمية بكلمة مرور لكي لا نتورط و نحذف كل شيئ الا بعد التأكد من ذلك
حذف تصنيف باكمله مع كل الفروع و المقالات و المرفقات المرتبطه به كذلك محمي بكلمة مرور
انا استخدمت اجراء لحذف كل الفروع بداخل التصنيف DelAllPOsters
و هو يشبه اجراء حذف الفروع السابق لكنه بدون حماية
لم يتبقى لدينا شيئ في هذه الواجهة على ما اعتقد
اكتملت كل الخيوط و الكمال لله وحده
بقي لدينا نموذج الاعدادات الخاص بالدخول للمواقع و كيفية التعامل معه مع شرح بسيط عن مصادر الصفحات الخاصة بالمواقع ان امكنني ذلك
ساعرض بعض الصور الاولية لنموذج الاعدادات SettingForm مع اختلاف المواقع التي نريد الدخول اليها
اريدك فقط ان تركز في جزئية بارمترات الدخول لتعرف بعدها ماذا تعني كل هذه الحقول التي في النموذج
عمليا كل موقع لديه صفحة للدخول اليه و في هذه الصفحة يكون هناك مربعات نصوص لادخال اسم المستخدم و كلمة المرور
وزر الدخول ايضا , ما نقوم به اثناء انشاء طلب و ارسال البارمترات معه هو عملية ادخال في هذه الحقول و من ثم ضغط زر الدخول
فاذا تمت المصادقة نكون قد حصلنا على مبتغانا
الازرار في اعلى النموذج هي اسماء الحقول في الموقع
اما مجموعة بيانات الدخول فهي المعلومات التي سندخلها
اسم المستخدم الخاص بك و كلمة المرور ورابط صفحة الدخول للموقع مع اجراء الدخول
انا قمت بتزويد النموذج ببعض الاجراءات و اسماء الحقول الخاصة بالدخول لتجدها جاهزة
فمثلا موقعنا هنا يستخدم username لاسم المستخدم,password لكلمة المرور
و يعتمد الطريقة action=do_login
بينما في مواقع اخرى قد تختلف الطريقة وفق تصميم الموقع و اسماء الحقول
هذا النموذج مرتبط مع جدول LoginsTb في قاعدة البيانات حتى تكون قادرا على تخزين مواقعك و طريقة دخولك لها
و هو ايضا مرتبط باعدادات البرنامج حتى تحفظ اعدادتك للموقع الافتراضي الذي تريد الابحار في صفحاته
فقط اختر موقعك ثم (تخزين كاعداد افتراضي) و اترك الباقي على البرنامج فهو سيتكفل بارسال المعلومات من الاعدادت
اما في جانب الكود فليس هناك الكثير للتحدث عنه فهو كما سابق الاكواد التي شرحناها
حدث تحميل النموذج
زر تخزين الاعدادت الافتراضية
زر تخزين لحفظ التعديلات و الاضافات الى الجدول LoginsTb
اجراء ربط الحقول
زر الاضافة
حدث تغير التحديد لتخزين نوع الاجراء في الحقل الهدف
تم بحمد الله و فضله , ارجو ان تعذروني عن كل خلل او تقصير حاصل ضمن المقال
و لاتنسونا من دعوة صالحة في ظهر الغيب في هذا الشهر الفضيل , اخوكم ابو ليلى
بالنسبة للبرنامج ساضعه لاحقا حتى تكتمل لدي بعض الافكار و يكون جاهزا للعمل دمتم بخير
كنا قد توقفنا عند الحصول على المرفقات و خزنا اسماء المرفقات و روابطها في جدول خاص ثم قمنا بعرض اسم المرفق
في ListBox1 تمهيدا لتحميلها حسب الرغبة
نحن الان نمتلك رابط المرفق و اسمه , كما نملك ايضا حاوية الكوكيز و هي معبئة بالكوكيز لارسالها مع كل طلب دون ان نتعب
انفسنا بالحصول عليه مرة اخرى
كل ما تبقى هو انشاء طلب وفق رابط الملف و ارسال الكوكيز معه ثم استقبال رد الملقم و تخزين طول الملف (حجمه) في متغير رقمي
و من ثم انشاء كائن MemoryStream للتعامل مع البيانات القادمة و بعدها كتابة هذه البيانات الى القرص الصلب و تخزينها بالاسم الذي لدينا
اقصد هنا اسم الملف المعروض في ListBox1
قبل ان ابدأ بعملية تخزين الملف ساقوم بالبحث عن الملف في مكانين
المكان الاول : هو مجلد التخزين فاذا توفر الملف فلن نحمله مرة اخرى.
المكان الثاني:قاعدة البيانات و تحديدا جدول المرفقات فكما تعلم نحن نضيف اسم الملف و مساره الى القاعدة مع كل عملية تحميل
البحث في جدول المرفقات سيتم وفق اسم الملف و رقم المقالة.
اي اننا سنبحث عن الملف المرتبط بالمقالة الحالية
كما اننا سنبحث في جدول المقالات ايضا عن المقالة الحالية المعروضة في المستعرض وفق رابط المقال
سنجري مجموعة من المقارنات لكي لا نحمل اسم مرفق لا يرتبط بالمقالة الحالية
اذ اننا سنحاول قدر الامكان تحميل المرفق المرتبط مع المقالة فقط
بعد تحقق كل الشروط سنبدأ بتحميل الملف الى مجلد التخزين و اضافة رابط له في جدول المرفقات
في حدث زر التحميل DownloadAttachements_Click
كود :
'زر تحميل المرفقات
Private Sub DownloadAttachements_Click(sender As System.Object, e As System.EventArgs) Handles DownloadAttachements.Click
Try
If ListBox1.Items.Count > 0 Then
'البحث عن الملف في مجلد التخزين
Dim os As String() = System.IO.Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", ListBox1.Text)
'البحث عن الملف في القاعدة
Dim w1, w2 As Integer
'
Using Con
Dim rowinf As DataRowView
rowinf = InfoBindingSource.Current
Dim sw1 As String = "Select Count(AttachName) AS CountCn From Attaches Where (AttachName Like '" & ListBox1.Text & "') And (Id_inf Like '" & rowinf("IdInfo") & "') "
Dim sw2 As String = "Select Count(Infoname) As Cnt From Info Where UrlInfo Like '" & WebBrowser1.Url.AbsoluteUri & "' "
Dim MatchCommand As New OleDbCommand(sw1, Con)
Dim SelCommand As New OleDbCommand(sw2, Con)
If Con.ConnectionString = Nothing Then Con.ConnectionString = ConnectionString
Con.Open()
'
w1 = MatchCommand.ExecuteScalar
w2 = SelCommand.ExecuteScalar
'
End Using
'عمليات فحص و مطابقة
If w2 >= 1 And InfonameTextBox.Text <> WebBrowser1.DocumentTitle Then
Dim MsgResult As DialogResult = MessageBox.Show("المرفقات لا تتبع هذه المقالة , هناك مقالة لديك بهذا الاسم" & vbCrLf & "هل ما زلت تريد ربط المرفقات مع هذه المقالة", "انتبه", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
If MsgResult = Windows.Forms.DialogResult.Cancel Then Exit Sub
ElseIf w2 < 1 Then
MessageBox.Show("لا يوجد مقالة لديك بهذا الاسم" & vbCrLf & "قم بخزن المقالة لديك قبل تحميل المرفقات", "انتبه", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
End If
'
If w1 >= 1 Then
If os.Length >= 1 Then
MsgBox("المرفق المحدد موجود و مربوط مع المقال")
Exit Sub
Else
MsgBox("المسار متوفر في القاعدة بينماالمرفق غير متوفر في مجلد التخزين" & vbCrLf & "سيتم تحميل المرفق الى مجلد التخزين")
'هنا سنقوم بعملية تحديث تقتضي تحميل الملف فقط الى مجلد التخزين
If DownloadUrl(WebBrowser1.Url.AbsoluteUri) = False Then Exit Sub
End If
Else
If os.Length >= 1 Then
MsgBox("الملف متوفر فقط في مجلد التخزين " & vbCrLf & "دون وجود رابط له في القاعدة" & vbCrLf & "سيتم اضافة رابط له في القاعدة")
'هنا سنقوم بحذف المرفق من المجلد لعدم وجود ترابط مع القاعدة
'Dim filePaths() As String = Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", ListBox1.Text)
'For Each filePath As String In filePaths
' File.Delete(filePath)
'Next
Dim FILE_NAME As String = Application.StartupPath.ToString & "\AttachMents\" & ListBox1.Text
Me.Validate()
C = InfoBindingSource.Position
'
AttachBindingSource.AddNew()
'
D = AttachBindingSource.Position
'
Dim AttachRowview As DataRowView
AttachRowview = AttachBindingSource.Current
AttachRowview("AttachName") = ListBox1.Text
AttachRowview("AttachPath") = FILE_NAME
'
AttachBindingSource.EndEdit()
'
SaveData()
'
InfoBindingSource.Position = C
AttachBindingSource.Position = D
Else
'هنا نستخدم العملية كاملة لاضافة الملف الى القاعدة و مجلد التخزين
If DownloadUrl(WebBrowser1.Url.AbsoluteUri) = False Then Exit Sub
'
Me.Validate()
C = InfoBindingSource.Position
'
AttachBindingSource.AddNew()
'
D = AttachBindingSource.Position
'
Dim AttachRowview As DataRowView
AttachRowview = AttachBindingSource.Current
AttachRowview("AttachName") = ListBox1.Text
AttachRowview("AttachPath") = PathStr
'
AttachBindingSource.EndEdit()
'
SaveData()
'
InfoBindingSource.Position = C
AttachBindingSource.Position = D
End If
End If
'
Else
MsgBox("لا يوجد مرفقات او لم يتم الحصول على المرفق")
Exit Sub
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Subعمليات فحص و مطابقة تستخدم اكواد بسيطة الاغلب يعرفها
جزء منها يهتم بالتعامل مع الملفات و الجزء الاخر جمل استعلام عادية للبحث في قاعدة البيانات
كنت افضل استخدام Linq To Dataset كون البيانات متوفرة لدينا في Dataset لكنني لم استخدم استعلامات Ling
منذ بداية الموضوع لذا سنبقى على جمل Sql .
الجزء المسؤول عن التحميل هو الدالة DownloadUrl
وهي دالة عادية تلخص الحديث السابق المختص بارسال الطلب و استقبال الرد و هي كما يلي
كود :
''' <summary>
''' اجراء تحميل المرفقات
''' </summary>
''' <param name="Url">الرابط</param>
''' <returns></returns>
''' <remarks></remarks>
Private Function DownloadUrl(ByVal Url As String) As Boolean
Try
Url = ListBox1.SelectedValue.ToString
If Url.Contains("youtube") Then
MsgBox("لا يمكن التحميل من هذا الموقع")
Return False
Exit Function
End If
Dim DownloadRequest As HttpWebRequest = DirectCast(WebRequest.Create(Url), HttpWebRequest)
DownloadRequest.CookieContainer = New CookieContainer()
DownloadRequest.CookieContainer = cookies
DownloadRequest.KeepAlive = True
'
Dim DownloadResponse As WebResponse = DownloadRequest.GetResponse()
'
Dim intLen As Integer = CInt(DownloadResponse.ContentLength)
ProgressBar1.Maximum = intLen
Label1.Text = "0 / " & GetFileSize2(intLen)
System.Windows.Forms.Application.DoEvents()
'
If intLen < 0 Then
MsgBox("اما ان الملف مفقود او يوجد مشكلة في الاتصال")
DownloadResponse.Close()
Return False
Exit Function
End If
'
Dim memStream As MemoryStream
Using stmResponse As IO.Stream = DownloadResponse.GetResponseStream()
Dim buffer = New Byte(intLen) {}
Dim bytesRead As Integer
'
Do
bytesRead += stmResponse.Read(buffer, bytesRead, intLen - bytesRead)
ProgressBar1.Value = bytesRead
Label1.Text = GetFileSize2(CInt(ProgressBar1.Value.ToString())) + " / " + GetFileSize2(intLen)
ProgressBar1.Refresh()
System.Windows.Forms.Application.DoEvents()
Loop Until bytesRead = intLen
memStream = New MemoryStream(buffer, False)
'
PathStr = System.Windows.Forms.Application.StartupPath & "\AttachMents\" & ListBox1.Text
'
My.Computer.FileSystem.WriteAllBytes(PathStr, buffer, False)
'
ProgressBar1.Value = 0
Label1.Text = "0/0"
DownloadResponse.Close()
memStream.Close()
End Using
Return True
'====================
'هذه الطريقة تستخدم عندما يكون رابط الملف طبيعي اي لا يحتوي على اشاراة استفهام
' Dim FileName As String
'If Url.EndsWith("/") Then
' Url = Url.Substring(0, Url.Length - 1)
'End If
'FileName = Url.Substring(Url.LastIndexOf("/"c) + 1)
'MsgBox(FileName)
'' Exit Function
'PathStr = System.Windows.Forms.Application.StartupPath & "\AttachMents\" & FileName
''========================
'DownloadRequest.Abort()
'DownloadResponse.Close()
'
Catch ex As WebException
If WebExceptionStatus.Timeout = WebExceptionStatus.Timeout Then
MsgBox("لا يوجد رد من الملقم قد يكون الملف مفقود")
Return False
Exit Function
Else
MsgBox(ex.ToString)
End If
End Try
Return True
End Functionارجع للشرح في الاعلى لتعرف سيناريو العمل
تبقى لدينا عدة مشاكل ليس المكان لعدها فقط ما واجهني منها
بعض الروابط في الموقع لا تعمل اما ان الملفات مفقودة او ان رابط التحميل لا يشير صراحة الى الملف المطلوب
فمثلا يوجد بعض الملفات في الموقع و خصوصا ملفات الرار (rar) يشير رابطها الى موقع YouTube و يقودني الى فلم اطفال (صديقتي...؟؟)
على اي حال متى ما كان رابط التحميل صحيح و الملف موجود ستكون قادر على التحميل
يحصل احيانا ان الملقم لا يرسل لك طول الملف بشكل حقيقي و هذا يؤدي الى اجهاض عملية التحميل اذ ان معرفة طول الملف الحقيقي
اساسا غير مدعومة اثناء رد الملقم
بعد تحميل المرفق الى مجلد التخزين سيتم اضافة رابط له في جدول المرفقات في القاعدة كما قلت سابقا
هناك مشكلة بسيطة قد تحدث عند نقل البرنامج من كان الى مكان و هي ان مسار الملف المخزن في القاعدة سيكون غير صحيح
لذا اعتمدت طريقة اخرى لفتح الملف تعتمد على البحث عن الملف في مجلد التخزين ستراها لاحقا عند الحديث عنها
بعد ان حملت الملف و تم ربطه مع القاعدة سيتم عرض كل المرفقات المرتبطة مع المقالة المخزنة في عنصر ListBox2 تحت المقالة
و بامكانك النقر مرتين على اي عنصر داخلها ليتم فتح المرفق و فق المسا المخزن في القاعدة او عبر اسمه
كود الحدث كما في الاسفل
كود :
'فتح المرفقات من الجهاز
Private Sub ListBox2_MouseDoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles ListBox2.MouseDoubleClick
Try
If ListBox2.Items.Count > 0 Then
'البحث عن الملف في مجلد التخزين
Dim os As String() = System.IO.Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents\", ListBox2.Text)
If os.Length >= 1 Then
Dim filePath As String = String.Empty
For Each filePath In os
If filePath <> ListBox2.SelectedValue.ToString Then
MsgBox("المسار المحفوظ في القاعدة مختلف عن مسار الملف" & vbCrLf & "ربما تم تغير مسار مجلد التخزين")
'فتح الملف وفق مسار البحث و المطابقة
Process.Start(filePath)
Exit Sub
End If
Next
'فتح الملف وفق مسار القاعدة
Process.Start(ListBox2.SelectedValue.ToString)
Else
'هنا سنقوم بحذف الادخال من القاعدة القاعدة
Dim DeleteFile As DialogResult = MessageBox.Show("رابط الملف متوفر فقط في القاعدة,دون وجود الملف في مجلد التخزين" & vbCrLf & "هل تريد حذف الادخال من القاعدة", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
If DeleteFile = Windows.Forms.DialogResult.Yes Then
C = InfoBindingSource.Position
AttachBindingSource.RemoveCurrent()
SaveData()
InfoBindingSource.Position = C
End If
End If
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Subاذا دققت في الكود السابق ستجد فيه اسطر اضافية باختصار عملها
اذا لم نجد الملف متوفر في مجلد التخزين عندها سنقوم بحذف الارتباط الموجود له في القاعدة لكي لا يشير هذا السطر الى ملف غير موجود
كذلك انا قمت بعمل دالة بسيطة تقوم باعطاء الحجم لكل الملف وفق الطريقة القياسية (KB,MB,GB,TR) اذ ليس معقولا ان تقوم بعرض حجم الملف
كارقام بل كحجوم و هو افضل
في الحقية يوجد دالتين الاولى للملفات المخزنة لدينا في القرص
و الثانية للملفات التي نريد تحميلها
الدالة الاولى
كود :
'هذا من اجل الملفات المخزنة في مجلد التخزين
Public Function GetFileSize(ByVal TheFile As String) As String
If TheFile.Length = 0 Then Return ""
If Not System.IO.File.Exists(TheFile) Then Return ""
'---
Dim TheSize As ULong = My.Computer.FileSystem.GetFileInfo(TheFile).Length
Dim SizeType As String = ""
'---
Try
Select Case TheSize
Case Is >= 1099511627776
DoubleBytes = CDbl(TheSize / 1099511627776) 'TB
Return FormatNumber(DoubleBytes, 2) & " TB"
Case 1073741824 To 1099511627775
DoubleBytes = CDbl(TheSize / 1073741824) 'GB
Return FormatNumber(DoubleBytes, 2) & " GB"
Case 1048576 To 1073741823
DoubleBytes = CDbl(TheSize / 1048576) 'MB
Return FormatNumber(DoubleBytes, 2) & " MB"
Case 1024 To 1048575
DoubleBytes = CDbl(TheSize / 1024) 'KB
Return FormatNumber(DoubleBytes, 2) & " KB"
Case 0 To 1023
DoubleBytes = TheSize ' bytes
Return FormatNumber(DoubleBytes, 2) & " bytes"
Case Else
Return ""
End Select
Catch
Return ""
End Try
End Functionالدالة الثانية
كود :
'هذا من اجل الملفات التي يتم تحميلها
Public Function GetFileSize2(ByVal Flength As Integer) As String
If Flength = 0 Then Return ""
'---
Dim TheSize As ULong = Flength
Dim SizeType As String = ""
'---
Try
Select Case TheSize
Case Is >= 1099511627776
DoubleBytes = CDbl(TheSize / 1099511627776) 'TB
Return FormatNumber(DoubleBytes, 2) & " TB"
Case 1073741824 To 1099511627775
DoubleBytes = CDbl(TheSize / 1073741824) 'GB
Return FormatNumber(DoubleBytes, 2) & " GB"
Case 1048576 To 1073741823
DoubleBytes = CDbl(TheSize / 1048576) 'MB
Return FormatNumber(DoubleBytes, 2) & " MB"
Case 1024 To 1048575
DoubleBytes = CDbl(TheSize / 1024) 'KB
Return FormatNumber(DoubleBytes, 2) & " KB"
Case 0 To 1023
DoubleBytes = TheSize ' bytes
Return FormatNumber(DoubleBytes, 2) & " bytes"
Case Else
Return ""
End Select
Catch
Return ""
End Try
End Functionالدالتين متشابهتين فقط في الاولى يكون البارميتر المرسل هو مسار الملف بينما في الثانية يكون طول الملف هذا كل شيئ
وهذا في حدث تحديد الملف ليتم عرض الحجم وفق التحديد
كود :
Private Sub ListBox2_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox2.SelectedIndexChanged
Try
If ListBox2.Items.Count > 0 Then
Dim FilePath As String = System.Windows.Forms.Application.StartupPath & "\AttachMents\" & ListBox2.Text
If Not IsNothing(FilePath) Then
Label3.Text = (GetFileSize(FilePath))
End If
Else
Label3.Text = 0
End If
Catch ex As Exception
End Try
End Subطبعا انا وضعت Timer بسيط لتعطيل زر تحميل المرفقات عند عدم وجود ملفات للتحميل
كود :
'تعطيل زر التحميل لعدم وجود مرفقات
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
If ListBox1.Items.Count > 0 Then
DownloadAttachements.Enabled = True
Else
DownloadAttachements.Enabled = False
End If
End Subالان و بعد ان فهمنا طبيعة العمل نعود الى الازرار القياسية و تحديدا زر حفظ المقال اي حفظ صفحة HTML داخل جدول المقالات
العملية مقسومة الى شقين الاول حفظ للحقول العادية في الجدول و الثاني حفظ لبنية HTML داخل الحقل Content
كما في السابق انا لن اخزن المقال مرتين في الجدول لذا ساقوم بالبحث عن اسم المقال بدليل رابط المقال فاذا وجد لدينا سنجهض عملية حفظ
محتوى الصفحة فقط و ليس كل اجراء الحفظ بمعنى اخر ربما لسبب ما انت تريد تسمية المقال باسم اخر غير الاسم الافتراضي لذا ستكون قادرا على ذلك بينما عملية تحديث محتويات الصفحة فلن تكون قادرا على ذلك اذ ان الصفحة محفوظة لديك في القاعدة
الشق الاول عملية الحفظ (حدث زر الحفظ العام) اذ ان الحفظ يتم على مستوى كل الجداول (فقط الاجزاء التي تحتوي على تحديثات) هي فقط من سيتم تحديثها
كود :
'زر الحفظ
Private Sub BtnSave_Click(sender As System.Object, e As System.EventArgs) Handles BtnSave.Click
Try
A = KindBindingSource.Position
B = PostBindingSource.Position
C = InfoBindingSource.Position
'
Me.Validate()
'
KindBindingSource.EndEdit()
PostBindingSource.EndEdit()
InfoBindingSource.EndEdit()
'
SaveData()
InfoBindingSource.Position = C
'
SaveHtml(sourceString)
sourceString = ""
'
KindBindingSource.Position = A
PostBindingSource.Position = B
BindingNavigatorAddNewItem3.Enabled = False
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Subهل تذكر الاجراء SaveData في الكلاس Connect هو من سيقوم بعملية الحفظ
لاحظ وجود الاجراء SaveHtml و هو الشق الثاني من عملية الحفظ
كود :
''' <summary>
''' اجراء حفظ المقال
''' </summary>
''' <param name="HtmlText">"محتويات الصفحة"</param>
''' <remarks></remarks>
Private Sub SaveHtml(ByVal HtmlText As String)
Dim w2 As Integer
Using Con
Dim sw2 As String = "Select IdInfo From Info Where UrlInfo Like '" & UrlInfoTextBox.Text & "' "
Dim SelCommand As New OleDbCommand(sw2, Con)
If Con.ConnectionString = Nothing Then Con.ConnectionString = ConnectionString
Con.Open()
'
w2 = SelCommand.ExecuteScalar
'
End Using
'
If w2 > 0 Then
Dim UpdateText As String = "Update Info Set Content = @Content Where IdInfo Like '" & w2 & "' "
Try
If UrlInfoTextBox.Text <> WebBrowser1.Url.AbsoluteUri Then
MsgBox(" الرابط الجديد مختلف عن الرابط المخزن ,قد تكون اخترت مقالة مختلفة " & vbCrLf & "لن يتم تحديث محتويات المقالة", MsgBoxStyle.Exclamation + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.OkOnly, "تخزين المقال ")
Exit Sub
End If
Using Con
If Con.ConnectionString = Nothing Then Con.ConnectionString = ConnectionString
If HtmlText <> "" And HtmlText.Length > 13 Then
Dim UpdateCommand1 As New OleDbCommand(UpdateText, Con)
If Con.State = ConnectionState.Open Then Con.Close()
Con.Open()
'
Dim CommandParameter1 As New OleDbParameter("@Content", OleDb.OleDbType.LongVarChar)
UpdateCommand1.Parameters.Add(CommandParameter1)
CommandParameter1.Value = HtmlText
Dim S As Integer = UpdateCommand1.ExecuteNonQuery
If S > 0 Then
' MsgBox("نجحت عمليت تحديث المقالة")
Else
MsgBox("فشلت عملية التحديث")
End If
Else
MsgBox("لم يتم الحصول على محتويات الصفحة بعد")
End If
End Using
Catch ex As Exception
MsgBox(ex.ToString)
Finally
Con.Close()
End Try
Else
MsgBox("لم يتم حفظ عنوان المقال حاول حفظه ثانية")
End If
End Subاذا دققت في الكود السابق ككل ستجد انني اقوم اولا بتخزين حقول المقالة بدون ارسال محتويات الصفحة و بعدها انا اقوم بتخزين محتويات الصفحة بعد التاكد من من وجودها بدليل رابط المقال
طبعا اذا حاولت تخزين محتويات الصفحة الحالية المعروضة في المستعرض فانه سيقوم بعملية مطابقة رابط الصفحة في المتصفح مع الرابط المعروض حاليا في حقل المقالات فاذا وجد اختلاف سيعطيك رسالة مفادها ان المقالة الحالية التي تريد تخزينها او تحديث محتوياتها مختلفة عن المقالة المعروضة
هذه السلسلة من اجراءات الامان لكي لا نخزن محتويات صفحة لا تمت بصلة لعنوان المقالة
انتهينا من عمليات الحفظ
الان بعض الاجرائيات البسيط مثل عرض شريط حالة التحميل الخاص بالمستعرض كما يلي
كود :
'حالة تحميل الصفحة
Private Sub WebBrowser1_ProgressChanged(sender As Object, e As System.Windows.Forms.WebBrowserProgressChangedEventArgs) Handles WebBrowser1.ProgressChanged
Try
Dim CurProg As Double
Dim MaxProg As Double
CurProg = e.CurrentProgress
MaxProg = e.MaximumProgress
ToolStripProgressBar1.Value = (CurProg / MaxProg) * 100
Catch ex As Exception
'
End Try
End Subكود :
'معلومات حالة التحميل
Private Sub WebBrowser1_StatusTextChanged(sender As Object, e As System.EventArgs) Handles WebBrowser1.StatusTextChanged
ToolStripStatusLabel1.Text = WebBrowser1.StatusText
End Subاجراء الفلترة الخاص بزر الفلترة و البحث بحسب اسم المقال
كود :
'فلترة
Private Sub BtnSerch_Click(sender As System.Object, e As System.EventArgs) Handles BtnSerch.Click
If TxtSerch.Text.Trim <> "" Then
InfoBindingSource.Filter = "[Infoname] LIKE '%" & TxtSerch.Text & "%'"
End If
End Subزر مسح الفلتر
كود :
'مسح الفلتر
Private Sub ToolStripButton3_Click(sender As System.Object, e As System.EventArgs) Handles BtnRemoveFilter.Click
InfoBindingSource.RemoveFilter()
End Subزر الرجوع و الرئيسية و التحديث الخاصة بالمتصفح
كود :
'رجوع
Private Sub BtnBack_Click(sender As System.Object, e As System.EventArgs) Handles BtnBack.Click
WebBrowser1.GoBack()
End Sub
'الرئيسية
Private Sub BtnHome_Click(sender As System.Object, e As System.EventArgs) Handles BtnHome.Click
WebBrowser1.GoHome()
End Sub
'تحديث
Private Sub BtnRefresh_Click(sender As System.Object, e As System.EventArgs) Handles BtnRefresh.Click
If Not WebBrowser1.Url.Equals("about:blank") Then
WebBrowser1.Refresh()
End If
End Subصحيح هناك زر اضفته لاحقا للتراجع عن اضافة مقال
كود :
'زر تراجع عن
Private Sub BtnUndo_Click(sender As System.Object, e As System.EventArgs) Handles BtnUndo.Click
InfoBindingSource.CancelEdit()
End Subبعد ان قمنا بتخزين محتويات الصفحة في القاعدة اصبحنا قادرين الان على عرض المحتويات المخزنة في المستعرض
زر عرض المحتويات للمقالة الحالية
كود :
''' <summary>
''' تحميل الصفحة من القاعدة
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub BtnLoadContents_Click(sender As System.Object, e As System.EventArgs) Handles BtnLoadContents.Click
Dim RowView As DataRowView
RowView = InfoBindingSource.Current
Dim Sel1 As String = "Select Content From Info Where IdInfo Like '" & RowView("IdInfo") & "' "
Try
Using Con
If Con.ConnectionString = Nothing Then Con.ConnectionString = ConnectionString
Dim Command1 As New OleDbCommand(Sel1, Con)
If Con.State = ConnectionState.Open Then Con.Close()
Con.Open()
Dim Red1 As OleDbDataReader = Command1.ExecuteReader
While Red1.Read
If Red1.HasRows = True And Not Red1.IsDBNull(0) Then
sourceString = Red1("Content")
Else
MsgBox("لا يوجد محتويات محفوظة لهذه المقالة")
Exit Sub
End If
End While
If sourceString <> "" Then
WebBrowser1.DocumentText = sourceString
End If
End Using
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Subبقيت لدينا ازرار الحذف التي اجلت طرحها للاخر اذ ان عملية الحذف متزامنة بين القاعدة و الملفات المخزنة (المرفقات)
نبدا اولا مع حذف مقال مع مرفقاته
كود :
'حذف مقال
Private Sub BindingNavigatorDeleteItem3_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorDeleteItem3.Click
Try
If (Me.Validate() And Not (InfoBindingSource Is Nothing)) Then
If InfoBindingSource.Count > 0 Then
Dim DeletStud As DialogResult = MessageBox.Show("سيتم حذف المقال الحالي", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
If DeletStud = Windows.Forms.DialogResult.Yes Then
'==========حذف الملفات المرفقة=======================
'البحث عن الملف في مجلد التخزين
If ListBox2.Items.Count > 0 Then
For i As Integer = 0 To ListBox2.Items.Count - 1
Dim RowV As DataRowView = ListBox2.Items(i)
Dim os As String() = System.IO.Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", RowV("AttachName"))
If os.Length >= 1 Then
Dim filePaths() As String = Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", RowV("AttachName"))
For Each filePath As String In filePaths
File.Delete(filePath)
Next
End If
AttachBindingSource.RemoveAt(i)
Next
End If
'حذف المقال
InfoBindingSource.EndEdit()
InfoBindingSource.RemoveCurrent()
End If
End If
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Subو من ثم حذف فرع كامل مع كل مقالاته و الملفات المخزنه مع كل مقال
انا جعلت عملية الحذف محمية بكلمة مرور لكي لا نتورط و نحذف كل شيئ الا بعد التأكد من ذلك
كود :
'حذف فرع
Private Sub BindingNavigatorDeleteItem1_Click_1(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorDeleteItem1.Click
Try
If (Me.Validate() And Not (PostBindingSource Is Nothing)) Then
If PostBindingSource.Count > 0 Then
Dim DeletStud1 As DialogResult = MessageBox.Show("سيتم حذف الفرع بما يحتويه من مقالات" & vbCrLf & "عملية الحذف محمية", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
If DeletStud1 = Windows.Forms.DialogResult.Yes Then
Dim Message, Title, DefaultValue As String
Message = "ادخل كلمة المرور"
Title = "نموذج حماية"
DefaultValue = "ادخل كلمة المرور"
Dim ReturnValue As String = InputBox(Message, Title, DefaultValue)
If ReturnValue = "admin" Then
'====**********======
Dim DeletStud As DialogResult = MessageBox.Show("سيتم حذف الفرع بما يحتويه من مقالات", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
If DeletStud = Windows.Forms.DialogResult.Yes Then
'==========حذف الملفات المرفقة=======================
'البحث عن الملف في مجلد التخزين
If InfoBindingSource.Count > 0 Then
For p As Integer = 0 To InfoBindingSource.Count - 1
'
If AttachBindingSource.Count > 0 Then
For i As Integer = 0 To AttachBindingSource.Count - 1
Dim RowV As DataRowView = AttachBindingSource.Current
Dim os As String() = System.IO.Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", RowV("AttachName"))
If os.Length >= 1 Then
Dim filePaths() As String = Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", RowV("AttachName"))
For Each filePath As String In filePaths
File.Delete(filePath)
Next
End If
AttachBindingSource.RemoveAt(i)
Next
End If
'==============
' InfoBindingSource.RemoveAt(p)
Next
End If
'==========================
PostBindingSource.EndEdit()
InfoBindingSource.EndEdit()
'
PostBindingSource.RemoveCurrent()
End If
End If
Else
Exit Sub
End If
End If
End If
Catch ex As Exception
' MsgBox(ex.ToString)
End Try
End Subحذف تصنيف باكمله مع كل الفروع و المقالات و المرفقات المرتبطه به كذلك محمي بكلمة مرور
كود :
'حذف التصنيف
Private Sub BindingNavigatorDeleteItem_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorDeleteItem.Click
Try
If (Me.Validate() And Not (KindBindingSource Is Nothing)) Then
If KindBindingSource.Count > 0 Then
Dim DeletStud1 As DialogResult = MessageBox.Show("سيتم حذف التصنيف الحالي بكل ما يحتويه" & vbCrLf & "عملية الحذف محمية", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
If DeletStud1 = Windows.Forms.DialogResult.Yes Then
Dim Message, Title, DefaultValue As String
Message = "ادخل كلمة المرور"
Title = "نموذج حماية"
DefaultValue = "ادخل كلمة المرور"
Dim ReturnValue As String = InputBox(Message, Title, DefaultValue)
If ReturnValue = "admin" Then
'
Dim DeletStud As DialogResult = MessageBox.Show("سيتم حذف التصنيف الحالي بكل ما يحتويه", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
If DeletStud = Windows.Forms.DialogResult.Yes Then
KindBindingSource.EndEdit()
PostBindingSource.EndEdit()
InfoBindingSource.EndEdit()
'حذف كل الفروع
For i As Integer = 0 To PostBindingSource.Count - 1
DelAllPOsters()
Next
'حذف التصنيف
KindBindingSource.RemoveCurrent()
End If
End If
Else
Exit Sub
End If
End If
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "زر الحذف العام", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
End Try
End Subانا استخدمت اجراء لحذف كل الفروع بداخل التصنيف DelAllPOsters
كود :
'حذف فرع بشكل مباشر
Private Sub DelAllPOsters()
Try
If (Me.Validate() And Not (PostBindingSource Is Nothing)) Then
If PostBindingSource.Count > 0 Then
'==========حذف الملفات المرفقة=======================
'البحث عن الملف في مجلد التخزين
If InfoBindingSource.Count > 0 Then
For p As Integer = 0 To InfoBindingSource.Count - 1
'
If AttachBindingSource.Count > 0 Then
For i As Integer = 0 To AttachBindingSource.Count - 1
Dim RowV As DataRowView = AttachBindingSource.Current
Dim os As String() = System.IO.Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", RowV("AttachName"))
If os.Length >= 1 Then
Dim filePaths() As String = Directory.GetFiles(System.Windows.Forms.Application.StartupPath & "\AttachMents", RowV("AttachName"))
For Each filePath As String In filePaths
File.Delete(filePath)
Next
End If
AttachBindingSource.RemoveAt(i)
Next
End If
Next
End If
'==========================
PostBindingSource.EndEdit()
InfoBindingSource.EndEdit()
'
PostBindingSource.RemoveCurrent()
End If
End If
Catch ex As Exception
End Try
End Subلم يتبقى لدينا شيئ في هذه الواجهة على ما اعتقد
اكتملت كل الخيوط و الكمال لله وحده
بقي لدينا نموذج الاعدادات الخاص بالدخول للمواقع و كيفية التعامل معه مع شرح بسيط عن مصادر الصفحات الخاصة بالمواقع ان امكنني ذلك
ساعرض بعض الصور الاولية لنموذج الاعدادات SettingForm مع اختلاف المواقع التي نريد الدخول اليها
اريدك فقط ان تركز في جزئية بارمترات الدخول لتعرف بعدها ماذا تعني كل هذه الحقول التي في النموذج
عمليا كل موقع لديه صفحة للدخول اليه و في هذه الصفحة يكون هناك مربعات نصوص لادخال اسم المستخدم و كلمة المرور
وزر الدخول ايضا , ما نقوم به اثناء انشاء طلب و ارسال البارمترات معه هو عملية ادخال في هذه الحقول و من ثم ضغط زر الدخول
فاذا تمت المصادقة نكون قد حصلنا على مبتغانا
الازرار في اعلى النموذج هي اسماء الحقول في الموقع
اما مجموعة بيانات الدخول فهي المعلومات التي سندخلها
اسم المستخدم الخاص بك و كلمة المرور ورابط صفحة الدخول للموقع مع اجراء الدخول
انا قمت بتزويد النموذج ببعض الاجراءات و اسماء الحقول الخاصة بالدخول لتجدها جاهزة
فمثلا موقعنا هنا يستخدم username لاسم المستخدم,password لكلمة المرور
و يعتمد الطريقة action=do_login
بينما في مواقع اخرى قد تختلف الطريقة وفق تصميم الموقع و اسماء الحقول
هذا النموذج مرتبط مع جدول LoginsTb في قاعدة البيانات حتى تكون قادرا على تخزين مواقعك و طريقة دخولك لها
و هو ايضا مرتبط باعدادات البرنامج حتى تحفظ اعدادتك للموقع الافتراضي الذي تريد الابحار في صفحاته
فقط اختر موقعك ثم (تخزين كاعداد افتراضي) و اترك الباقي على البرنامج فهو سيتكفل بارسال المعلومات من الاعدادت
اما في جانب الكود فليس هناك الكثير للتحدث عنه فهو كما سابق الاكواد التي شرحناها
كود :
Public Class SettingForm
Dim C As Integerحدث تحميل النموذج
كود :
Private Sub SettingForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
LoadLoginDataSet()
Me.LoginBindingSource.DataSource = LoadLoginDataSet()
Me.LoginBindingSource.DataMember = "LoginsTb"
BindingFileds()
TextBox1.Text = My.Settings.sitname
End Subزر تخزين الاعدادت الافتراضية
كود :
Private Sub BtnSaveSetting_Click(sender As System.Object, e As System.EventArgs) Handles BtnSaveSetting.Click
Try
My.Settings.LoginUrl = TxtLoginUrl.Text
My.Settings.User = TxtUser.Text
My.Settings.Password = TxtPassword.Text
My.Settings.ActionStr = TxtAction.Text
My.Settings.Parmms = TxtformParams.Text
My.Settings.sitname = TxtSiteName.Text
'
My.Settings.Inputuser = Txus.Text
My.Settings.Inputpass = Txps.Text
My.Settings.InputAction = Txact.Text
'
My.Settings.Save()
TextBox1.Text = My.Settings.sitname
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Subزر تخزين لحفظ التعديلات و الاضافات الى الجدول LoginsTb
كود :
Private Sub BtnSave_Click(sender As System.Object, e As System.EventArgs) Handles BtnSave.Click
Try
C = LoginBindingSource.Position
'
If TxtUser.TextLength > 0 And TxtPassword.MaxLength > 0 Then
Dim usinput, passinput, actinput As String
usinput = Txus.SelectedItem
passinput = Txps.SelectedItem
actinput = Txact.SelectedItem
Dim formParams As String = String.Format(usinput & "={0}&" & passinput & "={1}&" & actinput & "={2}", TxtUser.Text, TxtPassword.Text, TxtAction.Text)
TxtformParams.Text = formParams
End If
Me.Validate()
LoginBindingSource.EndEdit()
'
SaveLogins()
LoginBindingSource.Position = C
'
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Subاجراء ربط الحقول
كود :
Private Sub BindingFileds()
Me.TxtSiteName.DataBindings.Add(New Binding("Text", LoginBindingSource, "SiteName"))
Me.TxtLoginUrl.DataBindings.Add(New Binding("Text", LoginBindingSource, "LoginUrl"))
Me.TxtUser.DataBindings.Add(New Binding("Text", LoginBindingSource, "usernamee"))
Me.TxtPassword.DataBindings.Add(New Binding("Text", LoginBindingSource, "Passworde"))
Me.TxtAction.DataBindings.Add(New Binding("Text", LoginBindingSource, "ActionStr"))
Me.TxtformParams.DataBindings.Add(New Binding("Text", LoginBindingSource, "formParams"))
'
Me.Txus.DataBindings.Add(New Binding("Text", LoginBindingSource, "Inputuser"))
Me.Txps.DataBindings.Add(New Binding("Text", LoginBindingSource, "Inputpass"))
Me.Txact.DataBindings.Add(New Binding("Text", LoginBindingSource, "InputAction"))
End Subزر الاضافة
كود :
Private Sub BindingNavigatorAddNewItem_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click
LoginBindingSource.AddNew()
C = LoginBindingSource.Position
End Subحدث تغير التحديد لتخزين نوع الاجراء في الحقل الهدف
كود :
Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
If ComboBox1.SelectedItem <> String.Empty Then
TxtAction.Text = ComboBox1.SelectedItem
End If
End Subتم بحمد الله و فضله , ارجو ان تعذروني عن كل خلل او تقصير حاصل ضمن المقال
و لاتنسونا من دعوة صالحة في ظهر الغيب في هذا الشهر الفضيل , اخوكم ابو ليلى
بالنسبة للبرنامج ساضعه لاحقا حتى تكتمل لدي بعض الافكار و يكون جاهزا للعمل دمتم بخير
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال


