المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [VB.Net] إستخدام Currency Manager فى ربط قاعدة بيانات أكسس فى فيجوال بيسيك 2005


الصفحات : [1] 2

SmoothCriminal
19-09-2007, 02:28 AM
بسم الله الرحمن الرحيم
Currency Manager
ما هو Currency Manager أو مدير التعاملات
هو مجموعة من أدوات التحكم تقوم بإدارة الاتصال بقاعدة البيانات وربطها بالتطبيق وعرض البيانات داخل الفورم ولكن لكى نفهم معنى Currency Manager يجب أن نعرف مسار عملية الإتصال بقاعدة البيانات
-عندما تريد الإتصال بقاعدة البيانات بغرض التحكم فى محتوياتها فمعنى ذلك أنة قد صدر أمر منك من خلال هذا الإتصال الصادر منك إلى قاعدة البيانات وهذا يسمى Data Connection
http://absba9.absba.org/teamwork1/518338/1.jpg
وعلى ذلك ينبغى أن يتم الرد فى الوارد

http://absba9.absba.org/teamwork1/518338/2.jpg

ويسمى الوارد من قاعدة البيانات إليك Data Adaptor ويتضمن معلومات حول الجداول والحقول التى قمت باختيارها
إذن لدينا الان Data Connection و Data Adaptor
ولكن كيف يمكن معرفة محتويات القاعدة من خلال الإتصال وبمعنى أكثر وضوحا كيف وبأى طريقة سيتم عرض المحتويات
يتم تفصيل وتقسيم محتويات قاعدة البيانات فى جزء يعرف باسم DataSet حيث أنة يتم تحليل قاعدة البيانات إلى مكوناتها الرئيسية Tables وViews وStored Procedures و Functions ....الخ
كما يتم عرض مكونات الجداول أيضا من حقول

http://absba9.absba.org/teamwork1/518338/3.jpg

بعد ذلك تذهب كافة المعلومات إلى أداة الربط Binding Source ومن خلال اسمها فمن الواضح أنها تقوم بتثبيت الاتصال الذى تم إنشاؤة وربط المعلومات بالفورم الذى ستقوم من خلالة بعرض البيانات

http://absba9.absba.org/teamwork1/518338/4.jpg


إذن هذا هو مسار الاتصال بقاعدة بيانات يمكننا أن نقوم بالحصول على البيانات عن طريق سلوك نفس المسار باستخدام كود دون أن نقوم بربط كل مربع نص بالحقل المطلوب هل يمكن ذلك
مثال
نفترض أن لدينا قاعدة بيانات A وأن بها الجدول B وعدد من الحقول ba,bb,bc,bd وأنة أثناء عمل اتصال بقاعدة البيانات قام معالج الإتصال بعمل Dataset وقام بتسميتها مثلا CDataSet نستطيع أن نقوم بتجميع هذة المعلومات لإنشاء كود لإحضار البيانات التى فى الحقل ba وإظهارها فى TextBox داخل الفورم
أى أننا نريد احضار النص Text الموجود فى قاعدة البيانات A فى الجدول B فى الحقل ba وربط البيانات DataBindings بمربع النص TextBox وبما أن DataSet قام بإحضار ما يلزمنا فى العمل فإننا سنذهب إلية ولن نذهب إلى قاعدة البيانات
يمكننا ترتيب السطر السابق لنحصل على جملة مفيدة كالتالى
TextBox.DataBindings.Add
وAdd لأننا نريد إضافتة
ثم نريد عرض Text الموجود فى DataSet المسماة CDataSet وبالتحديد فى الجدول B الحقل ba
("Text", CDataSet, "B.ba")
فتكون الصيغة الكاملة
TextBox.DataBindings.Add("Text", CDataSet, "B.ba")
ويجب أ ن نعتبرها قاعدة ويمكنكم دائما استخدام هذة القاعدة لإنشاء الكود

http://absba9.absba.org/teamwork1/518338/5.jpg

خصائص Currency Manager
والمقصود بهذة الخصائص هو العمليات التى يمكننا تنفيذها
1-Bindings
لربط مجموعة من العناصر ليتم التحكم بها من خلال Currency Manager
2-Count
لمعرفة عدد الصفوف المرتبطة مع Currency Manager
3-Current
لاستدعاء الصف المرتبط حاليا مع Currency Manager
4-List
لعرض قائمة تكون مرتبطة بقاعدة البيانات مثل DataViews
5-Position
للتعامل مع الصف الحالى اعتمادا على رقم هذا الصف داخل قاعدة البيانات
الوظائف التى يمكن تنفيذها من خلال Currency Manager
1- AddNew إضافة جديد
2- CancelCurrentEdit إلغاء التغييرات
3- EndCurrentEdit إنهاء وحفظ
4- Re fresh تحديث وإعادة تعبئة البيانات
5- RemoveAt إزالة
ولكى نفهم ما هو الفرق بين الخاصية والوظيفة فإننا سنقوم بعمل مثال بسيط جدا
مثال : الربط البسيط
الغرض من هذا المثال هو كيف تتعلم أن تقوم بابتكار الكود دون أن تظل تبحث عن كود لإنشاء برنامجك
الان نقوم بعمل ربط مباشر وبسيط للفورم بقاعدة البيانات دون أن نستخدم Binding Navigator
المثال
http://absba9.absba.org/teamwork1/518338/6.jpg
سنقوم بعمل تطبيق Currency Manager والمثال الذى سنتعامل معة اليوم يصلح لأن يستخدم للتعامل مع بيانات الأفراد والمعلومات الخاصة بهم مثل موظف أو تلميذ أو ملف لأحد المرضى فى مستشفى أو ما شابة ذلك
أولا يجب أن نقوم بإنشاء قاعدة بيانات جديدة وستحتوى قاعدة البيانات على جدول واحد بة 7 حقول يمكننا تسمية الجدول باسم مثل Information وتسمية قاعدة البيانات بأى اسم مثلا Informations
الحقول هى
1-اسم الحقل ID
Data Type=AutoNumber
Indexed= Yes (No Duplicates)
2- FirstName
3- LastName
4- HomePhone
5- Grade
6- PictureFile
وكلها نص Text
7- BirthDate
ثم قم بحفظ قاعدة البيانات بصورة Access2000
قم بفتح مشروع جديد مستخدما فيجوال بيسيك 2005 مكوناتة كالتالى
-عدد 3 TextBox
-Date Time Picker
- PictureBox
-عدد 6 Lable
-عدد 12 Buttons
أمامنا الان عملية ترتيب هذة المكونات لتكون شكل ملائم ومناسب
-فى خصائص PictureBox يمكنكم تغيير BackColor إلى أى لون كما يفضل تغيير خاصية Size إلى المقياس 3/2بمعنى أن يكون عرض مربع الصورة إلى طول مربع الصورة = 2 إلى 3 يعنى لو الطول 15 يكون العرض 10 ولو العرض 80 يكون الطول 120 وهكذا
-من المستسحن تغيير الخاصية SizeMode إلى Zoom لكى تستطيع مشاهدة جوانب الصورة كاملة شاملة الحواف
-من الممكن تغيير خاصية الإسم فى الأزرار الخاصة بالتالى فى Text وبدلا من أن نكتب السابق والتالى يمكننا كتابة
الأول كالتالى |< والأخير هكذا >| وكلا من < و > للسابق والتالى فتصبح أزرار التحكم بصورة أفضل
ولتغيير حجم Lable الذى سيكون أسفل صندوق الصورة قم بتغيير الخاصية Autosize إلى False
سنقوم بتسمية بعض المكونات وهذا الموضوع اختيارى لكننى قمت بإعادة تسمية المكونات التالية
Form1=frmInfo
Lable أسفل الصورة= lblPhotoFile
TextBox1= txtFirstName
TextBox2=txtLastName
TextBox3=txtHomePhone
TextBox4=txtGrade
btnFirstو btnPrevious و btnNext و btnLast و btnEdit و btnSave و btnCancel و btnAdd و btnDelete و btnPrint و btnExit و btnLoadPhoto
قم الان بحفظ المشروع ثم قم بنقل قاعدة البيانات إلى المجلد الذى بة المشروع
ندخل الان إلى مرحلة كتابة الكود
ندخل الان إلى مرحلة كتابة الكود


سنقوم باستيراد أسماء المجالات NameSpaces التى سنحتاجها وهى
Imports System.Data
Imports System.Data.OleDb


وطبعا سيتم كتابتها فى General التى تسمى بالتصريحات العامة وهى المنطقة التى تسبق أسطر إدخال الكود فى أعلى الصفحة
ثم الإعلان عن المتغيرات
Dim InfoConnection As OleDbConnection
Dim InfoCommand As OleDbCommand
Dim InfoAdapter As OleDbDataAdapter
Dim InfoTable As DataTable
Dim InfoManager As CurrencyManager
Dim InfoState As String
Dim InfoBookmark As Integer


يجب علينا الان أن نقوم بعمل الإتصال بقاعدة البيانات وكذلك إنشاء مكونات الإتصال DataSet وTable وDataAdapter وتعريف المتغيرات
لتعريف InfoConnection فإن الكود يكون التالى
InfoConnection = New OleDbConnection _
("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " _
+ Application.StartupPath + "\..\..\Informations.mdb")
InfoConnection.Open()


ثم InfoCommand
http://img220.imageshack.us/img220/5760/tytwu9zl2.jpg

ثم InfoAdapter

InfoAdapter = New OleDbDataAdapter()
InfoAdapter.SelectCommand = InfoCommand
InfoTable = New DataTable()
InfoAdapter.Fill(InfoTable)


ثم نقوم بوضع DataBinding
txtFirstName.DataBindings.Add("Text", InfoTable, "FirstName")
txtLastName.DataBindings.Add("Text", InfoTable, "LastName")
txtHomePhone.DataBindings.Add("Text", InfoTable, "HomePhone")
txtGrade.DataBindings.Add("Text", InfoTable, "Grade")
DateTimePicker1.DataBindings.Add("Text", InfoTable, "BirthDate")
lblPhotoFile.DataBindings.Add("Text", InfoTable, "PictureFile")


ثم InfoManager

InfoManager = DirectCast(Me.BindingContext(InfoTable), CurrencyManager)
ثم Call
Call SetState("View")
Call ShowPhoto()


ويتم كتابة كل ما سبق فى الفورم
ثم نقوم بإنشاء SetState وهى تحدد أوضاع الأزرار وصناديق النصوص من ناحية نشط أو غير نشط وللقراءة فقط

Private Sub SetState(ByVal AppState As String)
InfoState = AppState
Select Case AppState
Case "View"
btnFirst.Enabled = True
btnPrevious.Enabled = True
btnNext.Enabled = True
btnLast.Enabled = True
btnEdit.Enabled = True
btnSave.Enabled = False
btnCancel.Enabled = False
btnAdd.Enabled = True
btnDelete.Enabled = True
btnPrint.Enabled = True
btnExit.Enabled = True
txtFirstName.ReadOnly = True
txtLastName.ReadOnly = True
txtHomePhone.ReadOnly = True
DateTimePicker1.Enabled = False
btnLoadPhoto.Enabled = False
txtGrade.ReadOnly = True
Case "Edit", "Add"
btnFirst.Enabled = False
btnPrevious.Enabled = False
btnNext.Enabled = False
btnLast.Enabled = False
btnEdit.Enabled = False
btnSave.Enabled = True
btnCancel.Enabled = True
btnAdd.Enabled = False
btnDelete.Enabled = False
btnPrint.Enabled = False
btnExit.Enabled = False
txtFirstName.ReadOnly = False
txtLastName.ReadOnly = False
txtHomePhone.ReadOnly = False
DateTimePicker1.Enabled = True
btnLoadPhoto.Enabled = True
txtGrade.ReadOnly = False
End Select
txtFirstName.Focus()
End Sub

ثم ShowPhoto

Private Sub ShowPhoto()
If lblPhotoFile.Text <> "" Then
Try
PictureBox1.Image = Image.FromFile(lblPhotoFile.Text)
Catch ex As Exception
MessageBox.Show(ex.Message, "خطاء فى تحميل الصورة", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Else
PictureBox1.Image = Nothing
End If
End Sub

ثم نقوم بإنشاء حدث الإغلاق بنفس الطريقة التى اتبعناها فى موضوع (الإتصال بقاعدة البيانات وعرض محتوياتها)

Private Sub frmInfo_FormClosing(ByVal sender As Object, _
ByVal e As System.Windows.Forms. _
FormClosingEventArgs) Handles Me.FormClosing
If InfoState = "Edit" Or InfoState = "Add" Then
MessageBox.Show("يجب إنهاء التحرير أولا", "", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
e.Cancel = True
Else
Try
Dim InfoAdapterCommands As New OleDbCommandBuilder(InfoAdapter)
InfoAdapter.Update(InfoTable)
Catch ex As Exception
MessageBox.Show(ex.Message, "خطاء فى حفظ قاعدة البيانات", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
InfoConnection.Close()
InfoCommand.Dispose()
InfoAdapter.Dispose()
InfoTable.Dispose()
End If
End Sub

ثم نقوم بإنشاء إطار طباعة الكارت أو البطاقة التعريفية وسوف نقوم برسم هذا الإطار كالتالى وهذا مثال فقط للإطار ويمكنكم تطويرة حسب الرغبة

Private Sub PrintInfo(ByVal sender As Object _
, ByVal e As Drawing.Printing.PrintPageEventArgs)
Dim MyPen As Pen = New Pen(Color.Black, 3)
e.Graphics.DrawRectangle _
(MyPen, e.MarginBounds.X, e.MarginBounds.Y, 200, 350)
Dim MyFont As Font = New Font("Arial", 12, FontStyle.Bold)
Dim S As String = "أكتب هنا إسم المؤسسة أو الهيئة"
Dim SSize As SizeF = e.Graphics.MeasureString(S, MyFont)
e.Graphics.DrawString(S, MyFont, Brushes.Black _
, e.MarginBounds.X + CInt(0.5 * (200 - SSize.Width)) _
, e.MarginBounds.Y + 15)
e.Graphics.DrawImage(PictureBox1.Image, _
e.MarginBounds.X + 25, e.MarginBounds.Y + 50, 150, 200)
e.HasMorePages = False
MyFont = New Font("Arial", 14)
Dim Y As Integer = e.MarginBounds.Y + 260
S = txtFirstName.Text
SSize = e.Graphics.MeasureString(S, MyFont)
e.Graphics.DrawString(S, MyFont, Brushes.Black, _
e.MarginBounds.X + CInt(0.5 * (200 - SSize.Width)), Y)
Y += CInt(MyFont.GetHeight(e.Graphics))
S = txtLastName.Text
SSize = e.Graphics.MeasureString(S, MyFont)
e.Graphics.DrawString(S, MyFont, Brushes.Black, _
e.MarginBounds.X + CInt(0.5 * (200 - SSize.Width)), Y)
Y += CInt(MyFont.GetHeight(e.Graphics))
S = txtGrade.Text
SSize = e.Graphics.MeasureString(S, MyFont)
e.Graphics.DrawString(S, MyFont, Brushes.Black, _
e.MarginBounds.X + CInt(0.5 * (200 - SSize.Width)), Y)
End Sub
ثم نقوم بانشاء حدث الإنتقال والتركيز على مربع النص الأول عند الإضافة والتحرير

Private Sub txtFirstName_KeyPress(ByVal sender As _
System.Object, ByVal e As System.Windows.Forms. _
KeyPressEventArgs) Handles txtFirstName.KeyPress
If e.KeyChar = ControlChars.Cr Then
txtLastName.Focus()
End If
End Sub

وأخيرا الأكواد الخاصة بأزرار المشروع
فى زر الأول

InfoManager.Position = 0
Call ShowPhoto()

فى زر السابق

InfoManager.Position -= 1
Call ShowPhoto()

فى زر التالى

InfoManager.Position += 1
Call ShowPhoto()

فى زر الأخير

InfoManager.Position = InfoManager.Count - 1
Call ShowPhoto()

ثم إضافة

InfoBookmark = InfoManager.Position
Call SetState("Add")
InfoManager.AddNew()
PictureBox1.Image = Nothing
lblPhotoFile.Text = "

ثم إلغاء

InfoManager.CancelCurrentEdit()
If InfoState = "Add" Then
InfoManager.Position = InfoBookmark
End If
Call ShowPhoto()
Call SetState("View"

ثم حفظ

If txtLastName.Text.Trim = "" Then
MessageBox.Show("يجب إدخال إسم العائلة", "إدخال خاطىء", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
txtLastName.Focus()
Exit Sub
End If
Dim SavedItem As String = txtLastName.Text
Dim SavedRow As Integer
InfoManager.EndCurrentEdit()
InfoTable.DefaultView.Sort = "LastName"
SavedRow = InfoTable.DefaultView.Find(SavedItem)
InfoManager.Position = SavedRow
Call ShowPhoto()
Call SetState("View")

ثم تحرير

Call SetState("Edit")

ثم تحميل صورة

Try
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
lblPhotoFile.Text = OpenFileDialog1.FileName
Call ShowPhoto()
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "خطاءفى فتح الصورة", _
MessageBoxButtons.OK, MessageBoxIcon.Error)

ثم طباعة

Dim InfoDocument As Drawing.Printing.PrintDocument
InfoDocument = New Drawing.Printing.PrintDocument()
InfoDocument.DocumentName = "Info"
AddHandler InfoDocument.PrintPage, AddressOf Me.PrintInfo
Dim SavedPosition As Integer = InfoManager.Position
PrintPreviewDialog1.Document = InfoDocument
PrintPreviewDialog1.ShowDialog()
InfoDocument.Dispose()
InfoManager.Position = SavedPosition

ثم حذف

If MessageBox.Show("هل أنت متأكد من أنك تريد حذف هذا السجل" _
, "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question, _
MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
InfoManager.RemoveAt(InfoManager.Position)
Call ShowPhoto()
End If
Call SetState("View")

ثم إغلاق

Close()

وهذا رابط تحميل المشروع
http://www.zshare.net/download/37241619ac3ce2
ولعمل بحث على نفس المشروع
-قم بإدراج ز و مربع نص
قم باستخدام الصيغة التالية فى كود الزر
InfoTable.DefaultView.Sort = "اسم عمود البحث"
Dim FoundRow As Integer = InfoTable.DefaultView.Find(مربع النص)
If FoundRow <> -1 Then
InfoManager.Position = FoundRow
End If
فإذا أردنا البحث عن الإسم مثلا FirstName
InfoTable.DefaultView.Sort = "FirstName"
Dim FoundRow As Integer = InfoTable.DefaultView.Find(TextBox.Text)
If FoundRow <> -1 Then
InfoManager.Position = FoundRow
End If
وهكذا مع باقى الأعمدة
وكل عام وأنتم بخير
تم رفع صور الشرح على سيرفر المنتدى من قبل المراقب ahmadapril

karim-sat
19-09-2007, 03:32 AM
http://**.***.com/vb3/

تم تحرير المشاركة من قبل المشرف العام : أبو موسى

loolaa
19-09-2007, 03:47 AM
الله يجزاك ألف خير يا SmoothCriminal

عمل جداً رائع

ومجهود تشكر عليه

تم حفظ الصفحه والدرس لتطبيقها بأقرب فرصه

والله يجزاك ألف خير

ahmedhamama
19-09-2007, 09:26 AM
شكرا لك أخى على الدرس
جزاك الله كل خير ..

BoneCrusher
19-09-2007, 02:31 PM
درس رائع بارك الله فيك

فلورندا
19-09-2007, 04:30 PM
مشكور د/طاهر
بصراحة هذا التطبيق لقاعدة بيانات مع فيجوال 2005 رائع جدا ومبتكر وسهل جدا بارك اللة فيك

SmoothCriminal
19-09-2007, 07:21 PM
الله يجزاك ألف خير يا SmoothCriminal

عمل جداً رائع

ومجهود تشكر عليه

تم حفظ الصفحه والدرس لتطبيقها بأقرب فرصه

والله يجزاك ألف خير
شكرا وارجوا أن تقومى بالنظر مرة أخرى إلى الأكواد فقد قمت بنعديلها بسبب وجود مشكلة بالصفحات

SmoothCriminal
19-09-2007, 11:32 PM
مثال اخر
أولا إنشاء قاعدة بيانات جديدة وستحتوى قاعدة البيانات على جدول واحد بة 7 حقول
يمكننا تسمية الجدول باسم مثل Information وتسمية قاعدة البيانات بأى اسم
الحقول هى
1-اسم الحقل ID
Data Type=AutoNumber
Indexed= Yes (No Duplicates)
2- FirstName
3- LastName
4- HomePhone
وكلها نص Text
5- Grade
Data Type=Number
6- BirthDate
Data Type= Date/Time
7- PictureFile
Data Type= Text
قم بفتح مشروع جديد ثم ضع المكونات الاتية داخل الفورم وهى كالتالى
-عدد 3 TextBox
-Date Time Picker
- عدد 6 RadioButtons
- PictureBox
-عدد 5 Lable
-عدد 12 Buttons
-OpenFileDialog
-PrintPreviewDialog
أمامنا الان عملية ترتيب هذة المكونات لتكون شكل ملائم ومناسب
-يجب وضع الستة RadioButton داخل GroupBox ونقم بتسميتها فى Text باسم مناسب

إليكم 2 تصميم لهذا المشروع يمكنكم اختيار أحدهما أو ابتكار تصميم ثالث

http://absba9.absba.org/teamwork1/518338/7.jpg

أو هذا التصميم
http://absba9.absba.org/teamwork1/518338/8.jpg

أو ابتكار شكل جديد اخر اعتمادا على المكونات التى لديكم ومن المستحسن وضع كل محموعة من الأزرار داخل GroupBox فهى تظهر الشكل أكثر تماسكا وتعطية صورة احترافية
بعد الإنتهاء من التصميم يجب حفظة ونقل قاعدة البيانات إلى المجلد الذى قمت بحفظ التطبيق الجديد بة
الان ندخل إلى مرحلة التعريفات وشرح الأكواد وكتابتها
التسمية
هناك بعض المكونات يفضل تسميتها بأى اسم مناسب كالتالى
مربعات النصوص الثلاثة يتم تسميتها
txtFirstName وtxtLastName وtxtHomePhone
مجموعة GroupBox2 التى تحتوى على RadioButtons يمكن تسميتها إلى grpGrade
Lable الموجود أسفل صندوق الصورة يتم تسميتة إلى lblPhotoFile
وأخيرا قم بوضع Lable جديد فى أى مكان وقم بتسميتة lblGrade وقم بجعل الخاصية Visible إلى False
الكود
سنقوم باستيراد أسماء المجالات NameSpaces وهى

Imports System.Data
Imports System.Data.OleDb

ثم الإعلان عن المتغيرات

Dim InfoConnection As OleDbConnection
Dim InfoCommand As OleDbCommand
Dim InfoAdapter As OleDbDataAdapter
Dim InfoTable As DataTable
Dim InfoManager As CurrencyManager
Dim InfoState As String
Dim InfoBookmark As Integer





يجب علينا الان أن نقوم بعمل الإتصال بقاعدة البيانات وكذلك إنشاء عوامل الإتصال DataSet وTable وDataAdapter وتعريف المتغيرات لذلك سنكتب الكود التالى فى الفورم






http://img225.imageshack.us/img225/2336/tytwu9.png

ولكن ما معنى ShowRelated و SetState
الأول ShowRelated وهو استدعاء لعرض Related وهذا الإسم اختيارى وأقصد ية المتعلقات ولكن ما هى المتعلقات ؟
هى الصورة وكذلك العناصر التى فى داخل المجموعة grpGrade والذى سنقوم باستخدام واسطة بينة وبين InfoTable ومذة الواسطة هى التى ستتحكم فى الإدخال والإخراج هى lblGrade ولكن ماهى محتويات Related هذا؟
لتعريف ذلك قم بكتابة الكود التالى

Private Sub ShowRelated()
Select Case lblGrade.Text
Case "1"
RadioButton1.Checked = True
Case "2"
RadioButton2.Checked = True
Case "3"
RadioButton3.Checked = True
Case "4"
RadioButton4.Checked = True
Case "5"
RadioButton5.Checked = True
Case "6"
RadioButton6.Checked = True
End Select
Call ShowPhoto()

ولكننا نلا حظ أننا فى نهاية الكود وضعنا Call ShowPhoto() فماذا سيكون الكود

Private Sub ShowPhoto()
If lblPhotoFile.Text <> "" Then
Try
PictureBox1.Image = Image.FromFile(lblPhotoFile.Text)
Catch ex As Exception
MessageBox.Show(ex.Message, "خطاء فى تحميل الصورة", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Else
PictureBox1.Image = Nothing
End If
End Sub

ثم نقوم بإنشاء حدث الإغلاق

Private Sub frmInfo_FormClosing(ByVal sender As Object, _
ByVal e As System.Windows.Forms. _
FormClosingEventArgs) Handles Me.FormClosing
If InfoState = "Edit" Or InfoState = "Add" Then
MessageBox.Show("يجب إنهاء التحرير أولا", "", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
e.Cancel = True
Else
Try
Dim InfoAdapterCommands As New OleDbCommandBuilder(InfoAdapter)
InfoAdapter.Update(InfoTable)
Catch ex As Exception
MessageBox.Show(ex.Message, "خطاء فى حفظ قاعدة البيانات", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
InfoConnection.Close()
InfoCommand.Dispose()
InfoAdapter.Dispose()
InfoTable.Dispose()
End If
End Sub

ثم نقوم بوضع الكود الخاص بحالة التغير الخاصة لكل زر داخل grpGrade يعنى تحديد الحالة التى يكون كل RadioButton فيها Checked أو non Checked

Private Sub RadioButtonGrade_CheckedChanged _
(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles RadioButton1.CheckedChanged, RadioButton2.CheckedChanged _
, RadioButton3.CheckedChanged, RadioButton4.CheckedChanged _
, RadioButton5.CheckedChanged, RadioButton6.CheckedChanged
Dim ButtonChecked As RadioButton = CType(sender, RadioButton)
Select Case ButtonChecked.Text
Case "1"
lblGrade.Text = "1"
Case "2"
lblGrade.Text = "2"
Case "3"
lblGrade.Text = "3"
Case "4"
lblGrade.Text = "4"
Case "5"
lblGrade.Text = "5"
Case "6"
lblGrade.Text = "6"
End Select
End Sub

ثم نقوم بإنشاء إطار الطباعة

Private Sub PrintInfo(ByVal sender As Object _
, ByVal e As Drawing.Printing.PrintPageEventArgs)
Dim MyPen As Pen = New Pen(Color.Black, 3)
e.Graphics.DrawRectangle(MyPen, e.MarginBounds.X, e.MarginBounds.Y, 200, 350)
Dim MyFont As Font = New Font("Arial", 12, FontStyle.Bold)
Dim S As String = "أكتب هنا إسم المؤسسة أو الهيئة"
Dim SSize As SizeF = e.Graphics.MeasureString(S, MyFont)
e.Graphics.DrawString(S, MyFont, Brushes.Black _
, e.MarginBounds.X + CInt(0.5 * (200 - SSize.Width)) _
, e.MarginBounds.Y + 15)
e.Graphics.DrawImage(PictureBox1.Image, _
e.MarginBounds.X + 25, e.MarginBounds.Y + 50, 150, 200)
e.HasMorePages = False
MyFont = New Font("Arial", 14)
Dim Y As Integer = e.MarginBounds.Y + 260
S = txtFirstName.Text
SSize = e.Graphics.MeasureString(S, MyFont)
e.Graphics.DrawString(S, MyFont, Brushes.Black, _
e.MarginBounds.X + CInt(0.5 * (200 - SSize.Width)), Y)
Y += CInt(MyFont.GetHeight(e.Graphics))
S = txtLastName.Text
SSize = e.Graphics.MeasureString(S, MyFont)
e.Graphics.DrawString(S, MyFont, Brushes.Black, _
e.MarginBounds.X + CInt(0.5 * (200 - SSize.Width)), Y)
Y += CInt(MyFont.GetHeight(e.Graphics))
S = "Grade " + lblGrade.Text
SSize = e.Graphics.MeasureString(S, MyFont)
e.Graphics.DrawString(S, MyFont, Brushes.Black, _
e.MarginBounds.X + CInt(0.5 * (200 - SSize.Width)), Y)
End Sub


ثم نقوم بانشاء حدث الإنتقال والتركيز على مربع النص الأول عند الإضافة والتحرير
Private Sub txtFirstName_KeyPress(ByVal sender As System.Object _
, ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles txtFirstName.KeyPress
If e.KeyChar = ControlChars.Cr Then
txtLastName.Focus()
End If
ثم أكواد الأزرار
فى زر الأول
InfoManager.Position = 0
Call ShowRelated()
فى زر السابق
InfoManager.Position -= 1
Call ShowRelated()
فى زر التالى
InfoManager.Position += 1
Call ShowRelated()
فى زر الأخير
InfoManager.Position = InfoManager.Count - 1
Call ShowRelated()

فى زر جديد أو إضافة
InfoBookmark = InfoManager.Position
Call SetState("Add")
InfoManager.AddNew()
RadioButton1.Checked = True : lblGrade.Text = "1"
PictureBox1.Image = Nothing
lblPhotoFile.Text = ""
فى زر إلغاء أو تراجع
InfoManager.CancelCurrentEdit()
If InfoState = "Add" Then
InfoManager.Position = InfoBookmark
End If
Call ShowRelated()
Call SetState("View"
فى زر الحفظ

If txtLastName.Text.Trim = "" Then
MessageBox.Show("يجب إدخال إسم العائلة", "إدخال خاطىء", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
txtLastName.Focus()
Exit Sub
End If
Dim SavedItem As String = txtLastName.Text
Dim SavedRow As Integer
InfoManager.EndCurrentEdit()
InfoTable.DefaultView.Sort = "LastName"
SavedRow = InfoTable.DefaultView.Find(SavedItem)
InfoManager.Position = SavedRow
Call ShowRelated()
Call SetState("View")

فى زر تحرير
Call SetState("Edit")
فى زر تحميل الصورة
Try
If OpenFileDialog1.ShowDialog _
= Windows.Forms.DialogResult.OK Then
lblPhotoFile.Text = OpenFileDialog1.FileName
Call ShowPhoto()
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "خطاءفى فتح الصورة", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

فى زر حذف
If MessageBox.Show("هل أنت متأكد من أنك تريد حذف هذا السجل" _
, "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question, _
MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
InfoManager.RemoveAt(InfoManager.Position)
Call ShowRelated()
End If
Call SetState("View")

ثم زر الطباعة

Dim InfoDocument As Drawing.Printing.PrintDocument
InfoDocument = New Drawing.Printing.PrintDocument()
InfoDocument.DocumentName = "Info"
AddHandler InfoDocument.PrintPage, _
AddressOf Me.PrintInfo
Dim SavedPosition As Integer = InfoManager.Position
PrintPreviewDialog1.Document = InfoDocument
PrintPreviewDialog1.ShowDialog()
InfoDocument.Dispose()
InfoManager.Position = SavedPosition

وزر إنهاء

Close()

ورابط تحميل المشروع
http://www.zshare.net/download/37177295a64f52 (http://www.zshare.net/download/37177295a64f52)
تم رفع صور الشرح على سيرفر المنتدى من قبل المراقب ahmadapril

SmoothCriminal
20-09-2007, 04:29 PM
شكرا لك أخى على الدرس
جزاك الله كل خير ..
أهلا بيك أخى العزيز أحمد وكل عام وأنتم بخير

ADMIRI1
20-09-2007, 04:52 PM
درس رائع بارك الله فيك

المنتبه
21-09-2007, 05:10 AM
بارك الله فيك ....

تم التقييم 5/5 ;)

SmoothCriminal
21-09-2007, 04:56 PM
درس رائع بارك الله فيك
مشكور وكل عام وأنتم بخير

SmoothCriminal
21-09-2007, 05:02 PM
بارك الله فيك ....

تم التقييم 5/5 ;)
تسعدنى دائما بمرورك وكل عام وأنتم بخير

BoneCrusher
26-09-2007, 03:28 PM
مشكور مرة ثانية لكننا سنحتاج إلى مثال أخر للتدريب علية بخصوص Radio Buttons in Group Box لأنها فكرة فخمة جدا والكود بتاعها دماغة عالية أوى بصراحة الفكرة دى
famous........famous....famous
فكرتنى بفكرة البرنامج إلى وضعة محمد على باشا للقضاء على المماليك والاستيلاء على أجهزتهم المحمولة ومصادرة نسخة الفيستا التى كانت لدى مراد باشا وزينب هانم خاتون

BumFunkMcs
26-09-2007, 05:34 PM
أكثر من 6 شهور وأنا أتابع موضوعاتك لأحاول أن أفهم أى نوع من الرجال أنت ولم أكن أتخيل أنة لا يزال هناك عرب مثلك فقد انقرضت هذة النوعية
أنت فخرٌ لكل عربى

hamamo
26-09-2007, 07:54 PM
great work and great job

SmoothCriminal
27-09-2007, 05:41 PM
great work and great job
شكراأخى العزيز hamamo وكل عام وأنتم بخير

فلورندا
30-09-2007, 09:54 PM
نريد المزيد من التطبيقات وشكرا

sayedxp
01-10-2007, 06:20 AM
مجهود متميز .. إلى الأمام
5/5

ASrtre258
01-10-2007, 01:26 PM
وهذا رابط الكراك
http://*****

تم تحرير الرابط من قبل المشرف العام_alaa oda

لا حاجة لوضع رابط لموضوع مغلق...نتمني التقيد بالقوانين مستقبلا...

BumFunkMcs
01-10-2007, 05:32 PM
وهذا رابط الكراك
http://*****

تم تحرير الرابط من قبل المشرف العام_alaa oda


إيش الكلام هذا باين عليك ما انت مظبوط

BoneCrusher
03-10-2007, 05:09 PM
إيش الكلام هذا باين عليك ما انت مظبوط
أنا اسف يا جماعة أنا السبب فى ان الشخص الغريب دة عمل كدة لكن لم أقصد ذلك:(

SmoothCriminal
04-10-2007, 08:39 PM
أنا اسف يا جماعة أنا السبب فى ان الشخص الغريب دة عمل كدة لكن لم أقصد ذلك:(
أصلا هذا الموضوع حظة سىء يعنى أول مشاركة جة واحد عمل إعلان لأحد المنتديات داخل الموضوع لكن ما فيش مشاكل إلى اللقاء فى الموضوع القادم

SmoothCriminal
04-10-2007, 08:43 PM
أنا شايف أن الجميع يحتاج إلى الدخول فى قواعد بيانات SQL فما رأيكم فى أن يكون الدرس القادم هو عن SQL ؟

pooo31
04-10-2007, 10:09 PM
أكثر من 6 شهور وأنا أتابع موضوعاتك لأحاول أن أفهم أى نوع من الرجال أنت ولم أكن أتخيل أنة لا يزال هناك عرب مثلك فقد انقرضت هذة النوعية



أنت فخرٌ لكل عربى



وانا معاك اخى الفاضل بارك الله فية وفى امثالة من الذين لايبخلون عليتا بهذة المعرفة


بس لى سؤال SmoothCriminal


خاص ببرنامج للموظفين

SmoothCriminal
10-10-2007, 08:45 PM
وانا معاك اخى الفاضل بارك الله فية وفى امثالة من الذين لايبخلون عليتا بهذة المعرفة


بس لى سؤال SmoothCriminal


خاص ببرنامج للموظفين[/center]
وما هو السؤال الذى تقصدة

srsr909
11-10-2007, 04:37 AM
كل يوم يتضح لي انني امام قامة برمجة ليست طبيعة

سر اخي الكريم والله يحفظك ويرعاك

وكل عام وانت بخير

BumFunkMcs
16-11-2007, 02:16 PM
كل يوم يتضح لي انني امام قامة برمجة ليست طبيعة

سر اخي الكريم والله يحفظك ويرعاك

وكل عام وانت بخير

http://img124.imageshack.us/img124/2305/all22oh4.gif
The End
والله إنك غالى علينا :)

مزلزل
02-12-2007, 07:59 PM
أكثر من 6 شهور وأنا أتابع موضوعاتك لأحاول أن أفهم أى نوع من الرجال أنت ولم أكن أتخيل أنة لا يزال هناك عرب مثلك فقد انقرضت هذة النوعية



أنت فخرٌ لكل عربى



ألف ألف ألف شكر لك
مجهود رائع وممتاز
الله يعطيك العافيه

zidan2008
28-01-2008, 10:32 AM
أكثر من 6 شهور وأنا أتابع موضوعاتك لأحاول أن أفهم أى نوع من الرجال أنت ولم أكن أتخيل أنة لا يزال هناك عرب مثلك فقد انقرضت هذة النوعية


أنت فخرٌ لكل عربى

موضوع أكثر من رائع لكن لى طلب فضلا لأمرا وهو كيف نسوى زر البحث ؟
حاولت لكن ما قدرت أسوية:confused:

SmoothCriminal
29-01-2008, 12:53 AM
موضوع أكثر من رائع لكن لى طلب فضلا لأمرا وهو كيف نسوى زر البحث ؟


حاولت لكن ما قدرت أسوية:confused:


-قم بإدراج ز و مربع نص

قم باستخدام الصيغة التالية فى كود الزر

InfoTable.DefaultView.Sort = "اسم عمود البحث"
Dim FoundRow As Integer = InfoTable.DefaultView.Find(مربع النص)
If FoundRow <> -1 Then
InfoManager.Position = FoundRow
End If

فإذا أردنا البحث عن الإسم مثلا FirstName




InfoTable.DefaultView.Sort = "FirstName"
Dim FoundRow As Integer = InfoTable.DefaultView.Find(TextBox.Text)
If FoundRow <> -1 Then
InfoManager.Position = FoundRow
End If
وهكذا مع باقى الأعمدة

حارق القلوب99
19-02-2008, 01:04 AM
ماشاء الله يادكتور SmoothCriminal
ربنا يسعدك مجهود بلفعل تستحق الشكر والتقدير

wolf_alwolf
07-03-2008, 01:07 AM
الف شكر على الشرح الممتع وممكن خدمة يا اخي العزيز

انني مستخدم فيجوال نت 2003 واريد اغير الى 2005 او 2008 مافيه فرق اعتقد بينمها كثير
مشكلتي في قاعدة البيانات في فيجوال 2005 في الاكسس
كنت اسحب الجدول الى الفورم وينزل لي الاتصال وكذلك adapter واضيف oledb command
وبعدين اضيف parameters لاضافة وتعديل وغير ذلك
وفي فيجوال 2005 ما حصلت الشغلة هذه كلها ولا اريد اشتغل على المعالج اذا عندك خلفية ارجوك لاني عجزت احصل لها حل وطبعاً عن طريق الاكسس ولا اريد sql
ولك الف شكر مرة ثانية

SmoothCriminal
07-03-2008, 01:13 AM
الف شكر على الشرح الممتع وممكن خدمة يا اخي العزيز

انني مستخدم فيجوال نت 2003 واريد اغير الى 2005 او 2008 مافيه فرق اعتقد بينمها كثير
مشكلتي في قاعدة البيانات في فيجوال 2005 في الاكسس
كنت اسحب الجدول الى الفورم وينزل لي الاتصال وكذلك adapter واضيف oledb command
وبعدين اضيف parameters لاضافة وتعديل وغير ذلك
وفي فيجوال 2005 ما حصلت الشغلة هذه كلها ولا اريد اشتغل على المعالج اذا عندك خلفية ارجوك لاني عجزت احصل لها حل وطبعاً عن طريق الاكسس ولا اريد sql
ولك الف شكر مرة ثانية
موجودة وانا قمت بشرحها مع بعنوان استخدام معالج ADO.NET2 لربط قاعدة بيانات وكمان شرحتها بأكثر من طريقة
1-كيفية إنشاء قاعدة بيانات (http://absba.org/vb/showpost.php?p=4660369&postcount=500)
2-ربط قاعدة البيانات بالتطبيقات (http://absba.org/vb/showpost.php?p=4673406&postcount=506)
3-إنشاء الإستعلام Query باستخدام عبارات SQL (http://absba.org/vb/showpost.php?p=4680723&postcount=511)
4-تعريف Currency Manager (http://absba.org/vb/showpost.php?p=4703416&postcount=529)
5-تطبيق على استخدام مدير التعاملات(Currency Manager)الجزء الأول (http://absba.org/vb/showpost.php?p=4737944&postcount=548)
6-تطبيق على استخدام مدير التعاملات(Currency Manager)الجزء الثانى (http://absba.org/vb/showpost.php?p=4744133&postcount=552)
7-مثال اخر على استخدام Currency Manager (http://absba.org/vb/showpost.php?p=4746831&postcount=555)
8-الإتصال بقاعدة بيانات SQL فى SQL 2005 Express (http://absba.org/vb/showpost.php?p=4821676&postcount=596)
9-إنشاء مصدر البيانات وإضافة عناصر التحكم (http://absba.org/vb/showpost.php?p=4822556&postcount=597)
10-طريقة إضافة الإستعلام باستخدام FillBy (http://absba.org/vb/showpost.php?p=4836632&postcount=600)
11-دمج مربعات النص إلى ComboBox (http://absba.org/vb/showpost.php?p=4847034&postcount=605)
12-ربط قواعد بياناتSQLServer وانشاء زر البحث باستخدام ADO.NET 2.0 (http://absba.org/showpost.php?p=5159144&postcount=778)
13-أنواع البيانات فى SQL Server2005 (http://absba.org/showpost.php?p=5040206&postcount=684)
14-قواعد بيانات SQLباستخدام SQL Server Management Studio ج 1 (http://absba.org/showpost.php?p=5159188&postcount=779)
15- قواعد بيانات SQL باستخدام SQL Server Management Studio ج 2 (http://absba.org/showpost.php?p=5159207&postcount=780)
16-طريقة تصدير البيانات من قاعدة البيانات إلى ملف إكسل (http://absba.org/showpost.php?p=5131069&postcount=741)

هذة هى النقاط التى شرحتها فى قواعد البيانات ويمكنك استخدام نفس الطريقة المتبعة فى
12-ربط قواعد بياناتSQLServer وانشاء زر البحث باستخدام ADO.NET 2.0 (http://absba.org/showpost.php?p=5159144&postcount=778)
مع مراعاة تغيير مصدر البيانات طبعا

SigmaT
16-04-2008, 06:09 PM
-قم بإدراج ز و مربع نص




قم باستخدام الصيغة التالية فى كود الزر

InfoTable.DefaultView.Sort = "اسم عمود البحث"
Dim FoundRow As Integer = InfoTable.DefaultView.Find(مربع النص)
If FoundRow <> -1 Then
InfoManager.Position = FoundRow
End If

فإذا أردنا البحث عن الإسم مثلا FirstName





InfoTable.DefaultView.Sort = "FirstName"


Dim FoundRow As Integer = InfoTable.DefaultView.Find(TextBox.Text)

If FoundRow <> -1 Then

InfoManager.Position = FoundRow
End If







وهكذا مع باقى الأعمدة







بارك الله فيك

نونا وتوتا
19-04-2008, 06:40 PM
جزاك الله خيرا

beauty heart
15-05-2008, 04:29 PM
مشكوووووووووووووووووووووووووور
كتييييييييير بجد أسلوبك في طرح المعلومة أكثر من رائع
الله يبارك فيك يااااااارب ويسعدك
بجد انت فخخخخخخخخخخر لنا ولجميييييييييييع العرب
وأنت مثال يحتذى به :)
مشكووور والله يسعدك :)

رحمن يوسف
16-05-2008, 08:58 AM
مشكورين على المعلومات

ahmadapril
30-06-2008, 09:17 PM
السلام عليكم
ينقل الموضوع الى شروحات قسم البرمجة

qazan
20-09-2008, 04:35 PM
جزاك الله كل خير

SmoothCriminal
13-10-2008, 04:15 AM
شكرا لكم جميعا
وفقكم الله

joefr1968
23-10-2008, 01:26 AM
بوركت أخي الكريم
لا تحرمنا من جديدك

mos
13-12-2008, 12:41 AM
السلام عليكم

الاخ العزيز SmoothCriminal
شكرا لك على هذا المجهود الجبار وعلى توضيحك لكثير من الامور الصعبة التى تحتاج كثير من الوقت لفهمه
ارجوا منك عزيزى اعادة رفع المشروع لان عند فتح موقع التنزيل يبلغنا باءن الملف غير موجود

تحياتى

SmoothCriminal
13-12-2008, 02:19 AM
السلام عليكم

الاخ العزيز SmoothCriminal
شكرا لك على هذا المجهود الجبار وعلى توضيحك لكثير من الامور الصعبة التى تحتاج كثير من الوقت لفهمه
ارجوا منك عزيزى اعادة رفع المشروع لان عند فتح موقع التنزيل يبلغنا باءن الملف غير موجود

تحياتى
هذا هو الرابط
http://www.fileflyer.com/view/hdU22AN

mos
13-12-2008, 12:01 PM
شكرا عزيزى

على سرعة الاستجابة والاهتمام

علي الحواش
16-12-2008, 05:33 PM
شكرا لمجهودك ، ولكن للأسف المشاريع غير موجودة في الموقع المحدد

malhajri2006
19-02-2009, 04:09 PM
بارك الله فيك وجزاك الف خير

(ONE★LOVE)
01-03-2009, 07:34 PM
بارك الله فيك ورحم الله والديك

eldahawe
14-06-2009, 01:05 AM
شكرا اخي الكريم لمجهودك

sssweet
22-07-2009, 06:24 PM
درس ممتاز :)