19-06-16, 07:29 AM
الان ندخل الان الى الجانب العملي جانب التصميم و الربط مع النماذج
النموذج الاول لدينا هو نموذج ادخال الاكواد Form1
هذا النموذج سيعالج الادخالات في جدولين جدول الاصناف Kind و جدول الاكواد Coder
حيث سيكون لدينا اصناف مثل الفجوال بيزك - السي شارب - الجافا - SQL - WPF و غيرها حسب ما تحب
و تحت كل صنف يمكنك ادخال الاكواد التي تريدها
الفورم حسب التصميم الذي في الصورة اعلاه يحتوي على مجموعة من العناصر
عناصر الربط مع الجدول Kind
ناتي الان الى محرر الكود لنكتب اكوادنا الخاصة بكل العمليات اللازمة لاتمام المهمة
بداية ساقوم بتعريف هذه المتغيرات و ستعرف الحاجة منها مع كتابة الاكواد
حدث تحميل النموذج
الكود سهل على ما اعتقد و الشرح
الكود سهل الفهم و هو مكرر مئات المرات في صفحات المنتدى
بعض الاكواد البسيطة تابع
و هو يستخدم عند اضافة كود جديد
نستخدمه للحصول على رقم المفتاح الرئيسي من الجدول Kind حتى اذا اضفنا سجل جديد في الجدول Coder يتم تعبئة المفتاح الثانوي بشكل صحيح
زر الاضافة الخاص باضافة الاصناف
زر الحذف العام (حذف التصنيف)
زر حذف كود
زر اضافة كود
اجراء خاص بصندوق النص ColoredTextBox
وهو للذهاب الى السطر الاول من الكود المعروض في مربع النص عند تغير اسم الكود
نفس الكود السابق و لكن عند التنقل بين سجلات الاكواد عن طريق BindingNavigator
قمت ايضا باضافة مجموعة من الازار عند الضغط بزر الماوس الايمن فوق مربع نص الكود و هي مجموعة خدمية صغيرة يمكنك معرفة عملها وفق الكود التالي
كما ترى وضائف بسيطة نسخ و لصق و مسح و تغير لغة العرض في مربع النص
الان ناتي الى اهم كود وهو زر التخزين العام و هو كما يلي
الشرح
الكود الخاص بالاجراء SaveCode
الكود بسيط وظيفته التقاط النص الى صف البيانات الحالي و تخزينه في المكان الموافق له (الحقل المطابق له في صف البيانات)
هذا كل ما لدينا للنموذج الاول Form1
يتبع....
النموذج الاول لدينا هو نموذج ادخال الاكواد Form1
هذا النموذج سيعالج الادخالات في جدولين جدول الاصناف Kind و جدول الاكواد Coder
حيث سيكون لدينا اصناف مثل الفجوال بيزك - السي شارب - الجافا - SQL - WPF و غيرها حسب ما تحب
و تحت كل صنف يمكنك ادخال الاكواد التي تريدها
الفورم حسب التصميم الذي في الصورة اعلاه يحتوي على مجموعة من العناصر
عناصر الربط مع الجدول Kind
- ComboBox1 : ساستخدمه لعرض اسماء الاصناف المخزنة في الجدول Kind
- KindTextBox : لاضافة اسم التصنيف
- Not1TextBox:لاضافة ملاحظة على التصنيف
- KindBindingSource:ساستخدمه هنا للربط مع الجدول Kind و استفيد من مزاياه الخاصة بالتنقل و الاضافة
- BindingNavigator : ساستخدم قائمة تحتوي على ازرار الاضافة و الحذف و التعديل و كذلك التنقل و هي مرتبة بشكل جميل سنقوم بربطها بعنصر KindBindingSource مع تجاوز الطريقة الافتراضية لها في الحذف و الاضافة ساشرحها لاحقا
- ComboBox2:ساستخدمه للوصول السريع الى عمل الكود او اسمه في الجدول Coder
- Not1TextBox1:سنسجل فيه اسم الكود او عمله
- Not2TextBox:وصف الكود المطلوب
- Code2TextBox:تعقيب على الاجابة او شرح لعمل الكود
- Code1TextBox:الاجابة او الكود و هو ليس مربع نص عادي TextBox بل هو مربع نص خاص يعرف بالاسم ColoredTextBox يحتوي على خصائص مميزة لعرض الكود بالالوان المطلوبة كما محرر الكود في لغة البرمجة و هو مكتبة خاصة مضمنة مع البرنامج عثرت عليه في ارجاء المنتدى على ما اعتقد و هو موجود على شبكة النت يمكنك من عرض النص وفق الفئة المختارة SQL-PHP-VB-#C-HTML
- CoderBindingSource:للربط مع جدول Coder
- BindingNavigator1:سنربطها مع CoderBindingSource مع تجاوز طرقها كما سبق ذكره
ناتي الان الى محرر الكود لنكتب اكوادنا الخاصة بكل العمليات اللازمة لاتمام المهمة
بداية ساقوم بتعريف هذه المتغيرات و ستعرف الحاجة منها مع كتابة الاكواد
كود :
Dim A, B As Integerحدث تحميل النموذج
كود :
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Try
'
Me.KindBindingSource.DataSource = LoadDataSet()
Me.KindBindingSource.DataMember = "Kind"
'
Me.CoderBindingSource.DataSource = KindBindingSource
Me.CoderBindingSource.DataMember = "Kind_Coder"
'
BindingFileds()
Code1TextBox.PreferredLineWidth = Code1TextBox.Width
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub- ربط KindBindingSource بحاوية البيانات MyDataset عبر استدعاء الدالة loadDataSet التي سبق و انشأناها في الكلاس الخاص بالاتصال نربط مع الجدول Kind
- الان نربط الكائن CoderBindingSource بالعلاقة المحضونة ضمنا في الكائن السابق KindBindingSource العلاقة Kind_Coder التي تؤمن الترابط بين الجدولين.
- نستدعي الاجراء BindingFileds و هو اجراء خاص لربط العناصر بحقول قاعدة البيانات سيرد لاحقا.
- السطر الاخير هو كود خاص لجعل امتداد سطر الكود المعروض بعرض مربع النص اثناء تحجيم البرنامج.
كود :
Private Sub BindingFileds()
Try
Me.KindTextBox.DataBindings.Add(New Binding("Text", KindBindingSource, "Kind"))
Me.Not1TextBox.DataBindings.Add(New Binding("Text", KindBindingSource, "Not1"))
'
Me.Not1TextBox1.DataBindings.Add(New Binding("Text", CoderBindingSource, "Not1"))
Me.Not2TextBox.DataBindings.Add(New Binding("Text", CoderBindingSource, "Not2"))
Me.Code1TextBox.DataBindings.Add(New Binding("Text", CoderBindingSource, "Code1"))
Me.Code2TextBox.DataBindings.Add(New Binding("Text", CoderBindingSource, "Code2"))
'
ComboBox1.DataSource = KindBindingSource
ComboBox1.DisplayMember = "kind"
ComboBox1.ValueMember = "Id"
'
ComboBox2.DataSource = CoderBindingSource
ComboBox2.DisplayMember = "Not1"
ComboBox2.ValueMember = "Id2"
'
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Subالكود سهل الفهم و هو مكرر مئات المرات في صفحات المنتدى
بعض الاكواد البسيطة تابع
كود :
Private Sub CoderBindingSource_AddingNew(sender As Object, e As System.ComponentModel.AddingNewEventArgs) Handles CoderBindingSource.AddingNew
Try
Me.KindBindingSource.EndEdit()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Subنستخدمه للحصول على رقم المفتاح الرئيسي من الجدول Kind حتى اذا اضفنا سجل جديد في الجدول Coder يتم تعبئة المفتاح الثانوي بشكل صحيح
زر الاضافة الخاص باضافة الاصناف
كود :
Private Sub BindingNavigatorAddNewItem_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click
Try
Me.KindTextBox.Focus()
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
Dim DeletStud As DialogResult = MessageBox.Show("سيتم حذف القسم الحالي", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
If DeletStud = Windows.Forms.DialogResult.Yes Then
KindBindingSource.EndEdit()
CoderBindingSource.EndEdit()
'
KindBindingSource.RemoveCurrent()
End If
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "زر الحذف العام", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
End Try
End Subزر حذف كود
كود :
Private Sub BindingNavigatorDeleteItem1_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorDeleteItem1.Click
Try
If (Me.Validate() And Not (CoderBindingSource Is Nothing)) Then
Dim DeletStud As DialogResult = MessageBox.Show("سيتم حذف الكود الحالي", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
If DeletStud = Windows.Forms.DialogResult.Yes Then
CoderBindingSource.EndEdit()
'
CoderBindingSource.RemoveCurrent()
End If
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "زر الحذف العام", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
End Try
End Subزر اضافة كود
كود :
Private Sub BindingNavigatorAddNewItem1_Click(sender As Object, e As EventArgs) Handles BindingNavigatorAddNewItem1.Click
CoderBindingSource.AddNew()
Not1TextBox1.Focus()
End Subاجراء خاص بصندوق النص ColoredTextBox
كود :
Private Sub ComboBox2_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
If ComboBox2.Items.Count > 0 And Code1TextBox.Text.Length > 0 Then
Code1TextBox.GoHome()
End If
End Subكود :
Private Sub CoderBindingSource_CurrentChanged(sender As System.Object, e As System.EventArgs) Handles CoderBindingSource.CurrentChanged, CoderBindingSource.PositionChanged
If ComboBox2.Items.Count > 0 And Code1TextBox.Text.Length > 0 Then
Code1TextBox.GoHome()
End If
End Sub
End Classنفس الكود السابق و لكن عند التنقل بين سجلات الاكواد عن طريق BindingNavigator
قمت ايضا باضافة مجموعة من الازار عند الضغط بزر الماوس الايمن فوق مربع نص الكود و هي مجموعة خدمية صغيرة يمكنك معرفة عملها وفق الكود التالي
كود :
#Region "ContextMenuStrip1"
Private Sub Con_Copy_Click(sender As System.Object, e As System.EventArgs) Handles Con_Copy.Click
Code1TextBox.Copy()
End Sub
Private Sub Con_Paste_Click(sender As System.Object, e As System.EventArgs) Handles Con_Paste.Click
Code1TextBox.Paste()
End Sub
Private Sub Con_Clear_Click(sender As System.Object, e As System.EventArgs) Handles Con_Clear.Click
Code1TextBox.Clear()
End Sub
Private Sub Con_Language_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles Con_Language.SelectedIndexChanged
With Con_Language.Text
Code1TextBox.SelectAll()
Select Case Con_Language.Text
Case Is = "VB"
Code1TextBox.Language = FastColoredTextBoxNS.Language.VB
Case Is = "CSharp"
Code1TextBox.Language = FastColoredTextBoxNS.Language.CSharp
Case Is = "HTML"
Code1TextBox.Language = FastColoredTextBoxNS.Language.HTML
Case Is = "PHP"
Code1TextBox.Language = FastColoredTextBoxNS.Language.PHP
Case Is = "SQL"
Code1TextBox.Language = FastColoredTextBoxNS.Language.SQL
Case Else
Code1TextBox.Language = FastColoredTextBoxNS.Language.Custom
End Select
Code1TextBox.UpperLowerCase()
Code1TextBox.GoHome()
End With
End Sub
Private Sub Con_SelAll_Click(sender As System.Object, e As System.EventArgs) Handles Con_SelAll.Click
Code1TextBox.SelectAll()
End Sub
#End Regionالان ناتي الى اهم كود وهو زر التخزين العام و هو كما يلي
كود :
'زر التخزين العام
Private Sub BtnSave_Click(sender As System.Object, e As System.EventArgs) Handles BtnSave.Click
Try
A = KindBindingSource.Position
B = CoderBindingSource.Position
'
saveCode()
Me.Validate()
'
KindBindingSource.EndEdit()
CoderBindingSource.EndEdit()
'
SaveData()
'
KindBindingSource.Position = A
CoderBindingSource.Position = B
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub- في البداية نحتفظ بالموقع الحالي لكل من الاصناف و الكود
- استدعي اجراء خاص SaveCode ساشرح لما استخدمته
- Me.Validate و ما بعدها سوف تتسبب في انهاء اي وضع تحرير للبيانات و بالتالي القيم المدخلة هي التي سيتم اعتمادها
- SaveData هو اجراء الحفظ العام الخاص بنا و الذي قمنا بانشائه سابقا في كلاس الاتصال
- بعد عملية الحفظ نعود الى مواقع السجلات التي خزناها سابقا
الكود الخاص بالاجراء SaveCode
كود :
Private Sub saveCode()
If Not String.IsNullOrEmpty(Code1TextBox.Text) Then
Dim RowCode As DataRowView
RowCode = CoderBindingSource.Current
RowCode("Code1") = Code1TextBox.Text
End If
End Subهذا كل ما لدينا للنموذج الاول Form1
يتبع....
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال


