عرض مشاركة واحدة
قديم 08-02-2008, 01:51 AM
  #34
محمد المعمري
مراقب سابق
 الصورة الرمزية محمد المعمري
تاريخ التسجيل: Oct 2007
الدولة: المنطقه الجنوبيه
المشاركات: 2,124
محمد المعمري has a reputation beyond reputeمحمد المعمري has a reputation beyond reputeمحمد المعمري has a reputation beyond reputeمحمد المعمري has a reputation beyond reputeمحمد المعمري has a reputation beyond reputeمحمد المعمري has a reputation beyond reputeمحمد المعمري has a reputation beyond reputeمحمد المعمري has a reputation beyond reputeمحمد المعمري has a reputation beyond reputeمحمد المعمري has a reputation beyond reputeمحمد المعمري has a reputation beyond repute
Read رد : المدخل إلى فيجوال بيسيك 2005و 2008 (الموضوع متجدد ويتبع )

3-مثال اخر على استخدام 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


ثم 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/0

أنتهى درس اليوم و يتبع..........
/////////////////////
مبرمج آل معمر
__________________



كثر الله خير و جمل الله حالك ياهبشان
لو أنني كنت شاعراً لكتبت معلقة غزل في روعة و جمال هذى النظام
أضغط على الصورة




كم هي جميلة شبكتنا .. وكم هي كبيره بكم
فشبكة قحطان بكم ولكم
فلننهظ بها
بصدق وأمانه
وبلا تذمر


محمد المعمري غير متواجد حالياً