تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
طباعة الداتاقريد Print DataGridView
#1
طباعة الداتاقريد Print DataGridView

بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
 





تمنيت ان تكون المناقشة و التصميم خطوة بخطوة للوصول الى الهدف المنشود عبر الموقع هنا

لكن تجري الرياح بما لا تشتهي السفن , منذ سنة تقريبا كان لدي مشروع و كان لا بد من طريقة ما لطباعة محتويات الداتا قريد

و المشكلة التي واجهتني يومها انني امام تقارير متغيرة حسب الحاجة ,وليس عملياً تصميم تقارير منفردة في بيئة Microsoft.Reports.rdlc

رغم انها تخدم العمل بشكل جيد,لكن الحاجة لطباعة DataGridView هي متجددة دائما و كثير ما نحتاجها,لذا كان من الافضل تصميم كلاس ما

يخدمني في كل المشاريع التي تحتاج الى طباعة القريد فيها و بالتالي اختصار للوقت و الجهد و امكانية التعديل كما اريد مستقبلا.

اذا الفكرة تكمن في تصميم المشروع كمكتبة و تخريج المحتوى الى ملف و استيراد هذا الملف الى المشاريع التي احتاج فيها الى طباعة القريد

و الاختصارقدر الامكان في طرق الاستدعاء و الحصول على المطلوب .

 

على اي حال لا اريد الاطالة عليكم بامكانكم تجاوز المقدمة و الدخول في المضمون مباشرة
 

المكتبة عبارة عن ملف Dll يحتوي على طرق معالجة و طباعة DataGridView عبر اجراء واحد بسيط طبعا بعد استيراد المكتبة
الى داخل مشروعك
المكتبة تم تجريبها و هي تعمل بشكل جيد (ربما تجد فيها خلل او نقص ما) و هو ناتج عن عدم المراجعة الكاملة مرة اخرى للمكتبة
مضى على المشروع اكثر من سنة و لا اتذكر كل التفاصيل , لذا المشروع يحتاج الى مراجعة من قبل المهتمين و التعديل كما يحب البعض
ساقدم هنا السورس كود الخاص بالمكتبة و هو عبارة عن مشروع Class Librrary معمول على VS 2010
بامكانكم التعديل فيه كما تشاؤون .
و ان شاء الله ساقدم مثال على استخدام المكتبة لطباعة DataGridView او طباعة اعمدة محددة من قبل المستخدم و كذلك مع امكانية
فرض حقول محوسبة(حقول للمجاميع) في نهاية التقرير.
الحقول المحوسبة فقط لانواع الحقول الرقمية من النوع Integer
تظهر لك قائمة بكل الحقول الرقمية التي يمكن شملها في التقرير و انت تحدد اي حقول تريدها ان تظهر (الحقول تقوم بعملية جمع قيم العمود في كل التقرير)
بالاضافة الى ثلاث خانات في اعلى التقرير و خانة في اسفل التقرير و ذلك لوضع ملاحظات او تسميات تحبذها
مع امكانية اظهار التاريخ (تاريخ الطباعة) و كذلك خانة لاسم المستخدم الذي قام بالطباعة
كما قلت سابقا الملف مفتوح للتعديل لمن يحب التعديل حسب مزاجه.
 
خطوات العمل
انسخ الملف المسمى gridprinting.dll الى داخل المشروع لديك الى مجلد Bin
ثم قم بعمل استيراد المرجع الى مشروعك عبر Add Referance و تحديد الملف من داخل المجلد الذي نسخت اليه الملف السابق gridprinting.dll
ثم قم بعمل Import له داخل الكلاس المراد استخدامه فيه
لنفرض ان لدينا مشروع فيه Form1 داخل الفورم نعمل Import للمكتبة للتعامل معها 
PHP كود :
Imports PrintGrid 



بعد ذلك اذا كان الفورم لديك مجهز  و يحتوي على DatagridView تعرض بيانات

يتبقى عليك عمل التالي , في حدث زر ما يتوجب عليك تعريف متغير كما يلي

PHP كود :
 Dim s1 As PrintGridView 



الان ما عليك الا اسناد القريد المراد طباعته الى الكائن S1 كما يلي
PHP كود :
s1.SetGrid dg1
       s1
.ShowPrintWizared() 

حيث dg1 هو القريد المراد طباعته

الاجراء ShowPrintWizared
يظهر لك نموذج بسيط مضمن ضمن المكتبة كما بالصورة




كما هو موضح الطباعة في الاتجاهين يمين و يسار

صناديق التسمية في اعلى و اسفل الصفحة يمكنك تغيرها كما تحب

حقول المجاميع التي تريد تضمينها في التقرير فقط اشر اليها و هي تقوم بعمل حساب للحقل في اخر التقرير

طبعا عدد الحقول الخاصة بالمجاميع يتغير حسب عددها لديك , ما عليك الى التجريب فقط.

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

امكانية المعاينة و الطباعة المباشرة

 

مثال : لامكانية تحديد اعمدة محددة من القريد لطباعتها
الفكرة تكمن في تصميم نموذج شبيه بهذه الصورة



يحتوي النموذج على DataGridView يحتوي على 3 اعمدة

 
اسم الحقل بالعربي / مربع نص

اسم الحقل الحقيقي / مربع نص /مخفي

طباعة / CheckBox
 


مهمة القريد في هذا النموذج هي عرض جميع اعمدة القريد المراد طباعته و فق جملة استعلام

(طبعا عرض اسماء الاعمدة و ليس البيانات التي بداخلها)

 
شرح المثال

اعمل فورم جديد لديك بالاسم Frprint1.vb

 اضف DataGridView بالاسم DgSelect و واحد اخر بالاسم DataGridView1

 اضف 3 اعمدة للقريد DgSelect  بالاسماء التالية

1- coldisc2 و اجعل HeaderText = اسم الحقل

2- colname2 و اجعل HeaderText = اسم الحقل الحقيقي/مخفي

3- colstate و جعل HeaderText = تحديد للطباعة / هذا العمود من النوع CheckBox

 اضف زر امر بالاسم Btnloadfilds

اضف كائن BindingSource  الى النموذج وسمه bnprint1 او يمكنك الاستغناء عنه

 
اجعل التصميم كما بالصورة السابقة
 
انتقل الى محرر الكود و استورد ما يلي
PHP كود :
Imports System.Data.OleDb
Imports gridprinting 


طبعا بفرض لدي القاعدة قاعدة اكسس 
عرف الكائنات التالية في بداية النموذج
PHP كود :
Public Class Frprint1
   
Public conprint As New OleDb.OleDbConnection
   Dim ds_print 
As New DataSet
   Dim adab_print1 
As New OleDbDataAdapter
   Dim adap_print2 
As New OleDbDataAdapter
   Dim dtprint1 
As DataTable
   Dim dtprint2 
As DataTable 


هذه الكائنات سنستخدمها للاتصال مع القاعدة و تخزين المعطيات

الان في حدث تحميل النموذج سنقوم بتامين الاتصال مع القاعدة و جلب الاعمدة التي نحتاج اليها
كما بالكود التالي
PHP كود :
      Dim selprint As String "select ID,fake_id,NationalNum,ms_details,Num,flname1,Mother,pfage,address,phone,cntinp from qprint "
 
      adab_print1 = New OleDbDataAdapter(selprintconprint)
 
      adab_print1.Fill(ds_print"tb_print1")
 
      FiledCaptions() '    'اسماء الاعمدة بالعربي
       bnprint1
.DataSource ds_print.Tables("tb_print1")
 
      DataGridView1.DataSource bnprint1
       
'
       loadfieldspriting() '
تحميل الاعمدة و اسمائها الى جدول خاص 



كما يتضح القريد الاساسي الذي يحتوي على البيانات هو DataGridView1

ومهمتنا هي جلب اسماء الاعمدة الى القريد الثاني مع امكانية التحديد للاعمدة المراد طباعتها فقط

لان مكتبة gridprinting تقوم فقط بطباعة الاعمدة المرئية في كائن DataGridView اي الاعمدة التي تمتلك الخاصية (Visible=True)

لذا عند اختيارنا لعمود ما نحن نفعل هذه الخاصية

(طبعا بامكانك اللعب بالكود باكثر من طريقة لتفعيل او تعطيل الخاصية كما تشاء ... )

 
ملاحظة:الكائن DataGridView  يمكنك جعله خارج حدود الرؤية بالنسبة للمستخدم كأن تضعه خلف القريد DgSelect

او ان تجعله خارج مساحة العمل ثم تقوم بتضييق النموذج لكي لا يراه المستخدم.

 الاجراءت الاضافية كما يلي

الاجراء  FiledCaptions
 
هذا الاجراء مهمته تعبئة الخاصية Caption باسماء عربية للحقول المتواجدة في الجدول tb_print1 
PHP كود :
​   Sub FiledCaptions()
 
      ds_print.Tables("tb_print1").Columns("ID").Caption "كود المريض"
 
      ds_print.Tables("tb_print1").Columns("fake_id").Caption "م.مريض"
 
      ds_print.Tables("tb_print1").Columns("NationalNum").Caption "الرقم الوطني"
 
      ds_print.Tables("tb_print1").Columns("ms_details").Caption "رقم التخزين"
 
      ds_print.Tables("tb_print1").Columns("Num").Caption "رقم الاضبارة"
 
      ds_print.Tables("tb_print1").Columns("flname1").Caption "الاسم"
 
      ds_print.Tables("tb_print1").Columns("Mother").Caption "الام"
 
      ds_print.Tables("tb_print1").Columns("pfage").Caption "العمر"
 
      ds_print.Tables("tb_print1").Columns("address").Caption "العنوان"
 
      ds_print.Tables("tb_print1").Columns("phone").Caption "الهاتف"
 
      ds_print.Tables("tb_print1").Columns("cntinp").Caption "مرات الدخول"

 
  End Sub 


الاجراء  loadfieldspriting

 هذا الاجراء نقوم فيه بانشاء جدول جديد نسميه dtprint1

 يحتوي على 3 اعمدة مشابه لاعمدة DataGridView التي سميناها سابقا بالاسم  DgSelect

ثم نقوم بعدها بعمل حلقة تقوم بالمرور على اعمدة الجدول المسمى tb_print1

و نخزن معلومات اسم العمود (name) و كذلك التسمية الخاصة بالعمود (Caption)

في اعمدة الجدول الجديد dtprint1

بعد تعبئة الجدول الجديد نقوم باسناده للكائن DataGridView المسمى DgSelect
 

PHP كود :
  Sub loadfieldspriting()
 
      If ds_print IsNot Nothing And ds_print.Tables.Count 0 Then
           
If ds_print.Tables.Contains("tb_print1"Then

               dtprint1 
= New DataTable
               dtprint1
.TableName "dt_print1"
 
              Dim colname2 As New DataColumn
               Dim coldisc2 
As New DataColumn
               Dim colcheck 
As New DataColumn
               
''''''
 
              colname2.DataType System.Type.GetType("System.String")
 
              coldisc2.DataType System.Type.GetType("System.String")
 
              colcheck.DataType System.Type.GetType("System.String")
 
              colname2.ColumnName "colname2"
 
              coldisc2.ColumnName "coldisc2"
 
              colcheck.ColumnName "colcheck"
 
              '''''''
               dtprint1.Columns.Add(colname2)
               dtprint1.Columns.Add(coldisc2)
               dtprint1.Columns.Add(colcheck)
               '
--
 
              ds_print.Tables.Add(dtprint1)
 
              '--
               Dim row As DataRow


               For Each colprint1 As DataColumn In ds_print.Tables("tb_print1").Columns
                   row = dtprint1.NewRow
                   row.Item("colname2") = colprint1.ColumnName
                   row.Item("coldisc2") = colprint1.Caption
                   dtprint1.Rows.Add(row)
               Next
               ds_print.Tables("dt_print1").Rows(0).Item("coldisc2") = "كود المريض"
               ds_print.Tables("dt_print1").Rows(1).Item("coldisc2") = "م.مريض"
               ds_print.Tables("dt_print1").Rows(2).Item("coldisc2") = "الرقم الوطني"
               ds_print.Tables("dt_print1").Rows(3).Item("coldisc2") = "رقم التخزين"
               ds_print.Tables("dt_print1").Rows(4).Item("coldisc2") = "رقم الاضبارة"
               ds_print.Tables("dt_print1").Rows(5).Item("coldisc2") = "الاسم الكامل"
               ds_print.Tables("dt_print1").Rows(6).Item("coldisc2") = "الام"
               ds_print.Tables("dt_print1").Rows(7).Item("coldisc2") = "العمر"
               ds_print.Tables("dt_print1").Rows(8).Item("coldisc2") = "العنوان"
               ds_print.Tables("dt_print1").Rows(9).Item("coldisc2") = "الهاتف"
               ds_print.Tables("dt_print1").Rows(10).Item("coldisc2") = "مرات الدخول"
               DgSelect.DataSource = dtprint1
           End If
       End If
   End Sub 



اجراء زر الامر  Btnloadfilds

هذا الاجراء كما هو مبين يقوم بالمرور على كل صفوف القريد المسمى DgSelect و فحص حالة العمود colstate فاذا كان العمود غير محدد سنقوم باخفائه

اي جعل القيمة Visible = False  و بالتالي عدم طباعته

ثم بعد ذلك تعريف كائن جديد PrintGridView

و نسند له القريد التي نريد طباعتها كما اسلفنا سابقا و نستدعي الطريقة ShowPrintWizared

و الباقي كما ورد في بداية الشرح.
 

PHP كود :
  Private Sub Btnloadfilds_Click(sender As System.ObjectAs System.EventArgsHandles Btnloadfilds.Click
       
Try
 
          Dim cnt As Integer 0
           
If dtprint1.Rows.Count 0 Then
               
For Each gridrow As DataGridViewRow In DgSelect.Rows

                   
If (gridrow.Cells("colstate").Value.ToString) = "1" Then
                       DataGridView1
.Columns(gridrow.Cells("colname2").Value.ToString).Visible True
                       cnt 
+= 1
                   
Else
 
                      DataGridView1.Columns(gridrow.Cells("colname2").Value.ToString).Visible False

                   End 
If
 
              Next
           End 
If

 
          Try
 
              DataGridView1.ColumnHeadersDefaultCellStyle.Font = New Font("tahoma"9FontStyle.Regular)
 
              If cnt <= 0 Then
                   MsgBox
(" لا يوجد حقول لطباعتها , حدد الحقول اولاً " " ؟ "48 MsgBoxStyle.MsgBoxRight MsgBoxStyle.OkOnly"معالج الطباعة")
 
                  Exit Sub
               End 
If


 
              Dim s1 As PrintGridView
               s1 
= New PrintGridView
               s1
.SetGrid DataGridView1
               s1
.ShowPrintWizared()

 
          Catch ex As Exception
               MessageBox
.Show(ex.Message"Error"MessageBoxButtons.OKMessageBoxIcon.Error)
 
          End Try

 
      Catch ex As Exception
           MsgBox
(ex.Message)
 
      End Try
 
  End Sub 



الكود الكامل للنموذج
PHP كود :
Imports System.Data.OleDb
Imports gridprinting
Public Class Frprint1
   
Public conprint As New OleDb.OleDbConnection
   Dim ds_print 
As New DataSet
   Dim adab_print1 
As New OleDbDataAdapter
   Dim adap_print2 
As New OleDbDataAdapter
   Dim dtprint1 
As DataTable
   Dim dtprint2 
As DataTable

   
'كائن نقل البيانات لجدول الاحالات
   ' 
Dim adapter_sentto As New OleDbDataAdapter

   
Private Sub Frprint1_Load(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
       
'تغيير لغة لوحة المفاتيح الى اللغه العربية  
       InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(New Globalization.CultureInfo("AR"))

       Dim selprint As String = "select ID,fake_id,NationalNum,ms_details,Num,flname1,Mother,pfage,address,phone,cntinp from qprint "
       adab_print1 = New OleDbDataAdapter(selprint, conprint)
       adab_print1.Fill(ds_print, "tb_print1")
       FiledCaptions() ' 
   'اسماء الاعمدة بالعربي
       bnprint1.DataSource = ds_print.Tables("tb_print1")
       DataGridView1.DataSource = bnprint1
       '
 
      loadfieldspriting() 'تحميل الاعمدة و اسمائها الى جدول خاص
       '

 
  End Sub

   
'اسماء الاعمدة بالعربي
   Sub FiledCaptions()
       ds_print.Tables("tb_print1").Columns("ID").Caption = "كود المريض"
       ds_print.Tables("tb_print1").Columns("fake_id").Caption = "م.مريض"
       ds_print.Tables("tb_print1").Columns("NationalNum").Caption = "الرقم الوطني"
       ds_print.Tables("tb_print1").Columns("ms_details").Caption = "رقم التخزين"
       ds_print.Tables("tb_print1").Columns("Num").Caption = "رقم الاضبارة"
       ds_print.Tables("tb_print1").Columns("flname1").Caption = "الاسم"
       ds_print.Tables("tb_print1").Columns("Mother").Caption = "الام"
       ds_print.Tables("tb_print1").Columns("pfage").Caption = "العمر"
       ds_print.Tables("tb_print1").Columns("address").Caption = "العنوان"
       ds_print.Tables("tb_print1").Columns("phone").Caption = "الهاتف"
       ds_print.Tables("tb_print1").Columns("cntinp").Caption = "مرات الدخول"

   End Sub

   '
اضافة الاعمدة و اسمائها الى جدول خاص
   Sub loadfieldspriting
()
 
      If ds_print IsNot Nothing And ds_print.Tables.Count 0 Then
           
If ds_print.Tables.Contains("tb_print1"Then

               dtprint1 
= New DataTable
               dtprint1
.TableName "dt_print1"
 
              Dim colname2 As New DataColumn
               Dim coldisc2 
As New DataColumn
               Dim colcheck 
As New DataColumn

               colname2
.DataType System.Type.GetType("System.String")
 
              coldisc2.DataType System.Type.GetType("System.String")
 
              colcheck.DataType System.Type.GetType("System.String")
 
              colname2.ColumnName "colname2"
 
              coldisc2.ColumnName "coldisc2"
 
              colcheck.ColumnName "colcheck"
 
              '''''''
               dtprint1.Columns.Add(colname2)
               dtprint1.Columns.Add(coldisc2)
               dtprint1.Columns.Add(colcheck)
               '
--
 
              ds_print.Tables.Add(dtprint1)
 
              '--
               Dim row As DataRow


               For Each colprint1 As DataColumn In ds_print.Tables("tb_print1").Columns
                   row = dtprint1.NewRow
                   row.Item("colname2") = colprint1.ColumnName
                   row.Item("coldisc2") = colprint1.Caption
                   dtprint1.Rows.Add(row)
               Next
               ds_print.Tables("dt_print1").Rows(0).Item("coldisc2") = "كود المريض"
               ds_print.Tables("dt_print1").Rows(1).Item("coldisc2") = "م.مريض"
               ds_print.Tables("dt_print1").Rows(2).Item("coldisc2") = "الرقم الوطني"
               ds_print.Tables("dt_print1").Rows(3).Item("coldisc2") = "رقم التخزين"
               ds_print.Tables("dt_print1").Rows(4).Item("coldisc2") = "رقم الاضبارة"
               ds_print.Tables("dt_print1").Rows(5).Item("coldisc2") = "الاسم الكامل"
               ds_print.Tables("dt_print1").Rows(6).Item("coldisc2") = "الام"
               ds_print.Tables("dt_print1").Rows(7).Item("coldisc2") = "العمر"
               ds_print.Tables("dt_print1").Rows(8).Item("coldisc2") = "العنوان"
               ds_print.Tables("dt_print1").Rows(9).Item("coldisc2") = "الهاتف"
               ds_print.Tables("dt_print1").Rows(10).Item("coldisc2") = "مرات الدخول"
               DgSelect.DataSource = dtprint1
           End If
       End If
   End Sub

   Private Sub Btnloadfilds_Click(sender As System.Object, e As System.EventArgs) Handles Btnloadfilds.Click
       Try
           Dim cnt As Integer = 0
           If dtprint1.Rows.Count > 0 Then
               For Each gridrow As DataGridViewRow In DgSelect.Rows

                   If (gridrow.Cells("colstate").Value.ToString) = "1" Then
                       DataGridView1.Columns(gridrow.Cells("colname2").Value.ToString).Visible = True
                       cnt += 1
                   Else
                       DataGridView1.Columns(gridrow.Cells("colname2").Value.ToString).Visible = False

                   End If
               Next
           End If

           Try
               DataGridView1.ColumnHeadersDefaultCellStyle.Font = New Font("tahoma", 9, FontStyle.Regular)
               If cnt <= 0 Then
                   MsgBox(" لا يوجد حقول لطباعتها , حدد الحقول اولاً " & " ؟ ", 48 + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.OkOnly, "معالج الطباعة")
                   Exit Sub
               End If


               Dim s1 As PrintGridView
               s1 = New PrintGridView
               s1.SetGrid = DataGridView1
               s1.ShowPrintWizared()

           Catch ex As Exception
               MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
           End Try

       Catch ex As Exception
           MsgBox(ex.Message)
       End Try
   End Sub
End Class 

 

بالنسبة لقاعدة البيانات في الشرح بامكانك تصميمها في الاكسس كما تريد لتمشي مع المثال (حيث اسماء الحقول موجودة في الكود)
 او ان تجرب اي قاعدة موجودة لديك مع مراعاة تغير اسماء الحقول
 
المرفقات تحتوي على المكتبة موجود فيها ملف  gridprinting.dll و هو في مجلد Bin الخاص بالمشروع
بعد اجرائك اي تعديلات على المكتبة و فق رغبتك اعمل للمكتبة Build من القائمة Build
لتسري التعديلات على ملف المكتبة .
  
 
مع تمنياتي للجميع بالتوفيق  . ولا تنسونا من صالح دعائكم
 

بعض دوال الرسم و كيفية التعامل معها


  
طبعا ليس موضوعنا هنا هو اعطاء دورة في دوال الرسم و التصميم
ولكن هي بعض الاكواد التي تساعدك في الرسم ,رايت ان اضعها مرفقة مع الموضوع
 
لتجربة الاكواد و التعامل معها انشئ مشروع جديد يحتوي على Form1 و في حدث Paint
الخاص بالنموذج حاول تجربة الاكواد
 
طبعا بعد استيراد فضاءات الاسماء التالية

PHP كود :
Imports System.Windows.Forms.VisualStyles
Imports System
.Drawing.Drawing2D 

رسم منحني
PHP كود :
  Private Sub DrawArcRectangleF(ByVal e As PaintEventArgs)

 
      ' Create pen.
       Dim blackPen As New Pen(Color.Black, 3)

       ' 
Create rectangle to bound ellipse.
 
      Dim rect As New RectangleF(0.0F0.0F100.0F200.0F)

 
      ' Create start and sweep angles on ellipse.
       Dim startAngle As Single = 45.0F
       Dim sweepAngle As Single = 270.0F

       ' 
Draw arc to screen.
 
      e.Graphics.DrawArc(blackPenrectstartAnglesweepAngle)
 
  End Sub 

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

رسم خط متموج
PHP كود :
  Private Sub DrawBezierPoint(ByVal e As PaintEventArgs)

 
      ' Create pen.
       Dim blackPen As New Pen(Color.Black, 3)

       ' 
Create points for curve.
 
      Dim start As New Point(100100)
 
      Dim control1 As New Point(20010)
 
      Dim control2 As New Point(35050)
 
      Dim [end] As New Point(500100)

 
      ' Draw arc to screen.
       e.Graphics.DrawBezier(blackPen, start, control1, control2, [end])
   End Sub 

رسم منحني مغلق
PHP كود :
  Private Sub DrawClosedCurvePointF(ByVal e As PaintEventArgs)

 
      ' Create pens.
       Dim redPen As New Pen(Color.Red, 3)
       Dim greenPen As New Pen(Color.Green, 3)

       ' 
Create points that define curve.
 
      Dim point1 As New PointF(50.0F50.0F)
 
      Dim point2 As New PointF(100.0F25.0F)
 
      Dim point3 As New PointF(200.0F5.0F)
 
      Dim point4 As New PointF(250.0F50.0F)
 
      Dim point5 As New PointF(300.0F100.0F)
 
      Dim point6 As New PointF(350.0F200.0F)
 
      Dim point7 As New PointF(250.0F250.0F)
 
      Dim curvePoints As PointF() = {point1point2point3point4_
       point5
point6point7}

 
      ' Draw lines between original points to screen.
       e.Graphics.DrawLines(redPen, curvePoints)

       ' 
Draw closed curve to screen.
 
      e.Graphics.DrawClosedCurve(greenPencurvePoints)
 
  End Sub 

رسم شكل بيضوي
PHP كود :
  Private Sub DrawEllipseRectangle(ByVal e As PaintEventArgs)

 
      ' Create pen.
       Dim blackPen As New Pen(Color.Black, 3)

       ' 
Create rectangle for ellipse.
 
      Dim rect As New Rectangle(00200100)

 
      ' Draw ellipse to screen.
       e.Graphics.DrawEllipse(blackPen, rect)
   End Sub 
رسم  ايقونة من ملف (الايقونة موجودة داخل مجلد bin)
PHP كود :
  Private Sub DrawIconRectangle(ByVal e As PaintEventArgs)

 
      ' Create icon.
       Dim newIcon As New Icon("sample.ico")

       ' 
Create rectangle for icon.
 
      Dim rect As New Rectangle(100100200200)

 
      ' Draw icon to screen.
       e.Graphics.DrawIconUnstretched(newIcon, rect)
   End Sub 
رسم صورة من ملف(موجودة في مجلد bin)
PHP كود :
  Private Sub DrawImagePoint(ByVal e As PaintEventArgs)

 
      ' Create image.
       Dim newImage As Image = Image.FromFile("sample.jpg")

       ' 
Create Point for upper-left corner of image.
 
      Dim ulCorner As New Point(2020)

 
      ' Draw image to screen.
       e.Graphics.DrawImage(newImage, ulCorner)
   End Sub 

رسم صورة من ملف بشكل منحرف
PHP كود :
  Private Sub DrawImagePara(ByVal e As PaintEventArgs)

 
      ' Create image.
       Dim newImage As Image = Image.FromFile("sample.jpg")

       ' 
Create parallelogram for drawing image.
 
      Dim ulCorner As New Point(100100)
 
      Dim urCorner As New Point(550100)
 
      Dim llCorner As New Point(150250)
 
      Dim destPara As Point() = {ulCornerurCornerllCorner}

 
      ' Draw image to screen.
       e.Graphics.DrawImage(newImage, destPara)
   End Sub 

رسم صورة من ملف
PHP كود :
  Private Sub DrawImageParaRect(ByVal e As PaintEventArgs)

 
      ' Create image.
       Dim newImage As Image = Image.FromFile("sample.jpg")

       ' 
Create parallelogram for drawing image.
 
      Dim ulCorner As New Point(100100)
 
      Dim urCorner As New Point(325100)
 
      Dim llCorner As New Point(150250)
 
      Dim destPara As Point() = {ulCornerurCornerllCorner}

 
      ' Create rectangle for source image.
       Dim srcRect As New Rectangle(50, 50, 150, 150)
       Dim units As GraphicsUnit = GraphicsUnit.Pixel

       ' 
Draw image to screen.
 
      e.Graphics.DrawImage(newImagedestParasrcRectunits)
 
  End Sub 

رسم خط بتحديد نقاط التموضع مع اللون و السماكة
PHP كود :
  Public Sub DrawLinePoint(ByVal e As PaintEventArgs)

 
      ' Create pen.
       Dim blackPen As New Pen(Color.Black, 3)

       ' 
Create points that define line.
 
      Dim point1 As New Point(100100)
 
      Dim point2 As New Point(500100)

 
      ' Draw line to screen.
       e.Graphics.DrawLine(blackPen, point1, point2)
   End Sub 
رسم خط بزوايا (وفق مصفوفة نقاط)
PHP كود :
  Public Sub DrawLinesPoint(ByVal e As PaintEventArgs)

 
      ' Create pen.
       Dim blackPen As New Pen(Color.Black, 3)

       ' 
Create array of points that define lines to draw.
 
      Dim points As Point() = {New Point(1010), New Point(10100), _
       
New Point(20050), New Point(250300)}

 
      'Draw lines to screen.
       e.Graphics.DrawLines(blackPen, points)
   End Sub 

رسم مضلع
PHP كود :
  Public Sub DrawPolygonPoint(ByVal e As PaintEventArgs)

 
      ' Create pen.
       Dim blackPen As New Pen(Color.Black, 3)

       ' 
Create points that define polygon.
 
      Dim point1 As New Point(5050)
 
      Dim point2 As New Point(10025)
 
      Dim point3 As New Point(2005)
 
      Dim point4 As New Point(25050)
 
      Dim point5 As New Point(300100)
 
      Dim point6 As New Point(350200)
 
      Dim point7 As New Point(250250)
 
      Dim curvePoints As Point() = {point1point2point3point4_
       point5
point6point7}

 
      ' Draw polygon to screen.
       e.Graphics.DrawPolygon(blackPen, curvePoints)
   End Sub 

رسم مستطيل
PHP كود :
  Public Sub DrawRectangleRectangle(ByVal e As PaintEventArgs)

 
      ' Create pen.
       Dim blackPen As New Pen(Color.Black, 3)

       ' 
Create rectangle.
 
      Dim rect As New Rectangle(00200200)

 
      ' Draw rectangle to screen.
       e.Graphics.DrawRectangle(blackPen, rect)
   End Sub 

رسم مجموعة مستطيلات
PHP كود :
  Public Sub DrawRectanglesRectangle(ByVal e As PaintEventArgs)

 
      ' Create pen.
       Dim blackPen As New Pen(Color.Black, 3)

       ' 
Create array of rectangles.
 
      Dim rects As Rectangle() = {New Rectangle(00100200), _
       
New Rectangle(10020025050), _
       
New Rectangle(300050100)}

 
      ' Draw rectangles to screen.
       e.Graphics.DrawRectangles(blackPen, rects)
   End Sub 
رسم نص داخل مستطيل
PHP كود :
  Public Sub DrawStringRectangleF(ByVal e As PaintEventArgs)

 
      ' Create string to draw.
       Dim drawString As [String] = "Sample Text"

       ' 
Create font and brush.
 
      Dim drawFont As New Font("Arial"16)
 
      Dim drawBrush As New SolidBrush(Color.Black)

 
      ' Create rectangle for drawing.
       Dim x As Single = 150.0F
       Dim y As Single = 150.0F
       Dim width As Single = 200.0F
       Dim height As Single = 50.0F
       Dim drawRect As New RectangleF(x, y, width, height)

       ' 
Draw rectangle to screen.
 
      Dim blackPen As New Pen(Color.Black)
 
      e.Graphics.DrawRectangle(blackPenxywidthheight)

 
      ' Draw string to screen.
       e.Graphics.DrawString(drawString, drawFont, drawBrush, drawRect)
   End Sub 
رسم  نص عمودي
PHP كود :
  Public Sub DrawStringPointFFormat(ByVal e As PaintEventArgs)

 
      ' Create string to draw.
       Dim drawString As [String] = "Sample Text"

       ' 
Create font and brush.
 
      Dim drawFont As New Font("Arial"16)
 
      Dim drawBrush As New SolidBrush(Color.Black)

 
      ' Create point for upper-left corner of drawing.
       Dim drawPoint As New PointF(150.0F, 50.0F)

       ' 
Set format of string.
 
      Dim drawFormat As New StringFormat
       drawFormat
.FormatFlags StringFormatFlags.DirectionVertical

       
' Draw string to screen.
       e.Graphics.DrawString(drawString, drawFont, drawBrush, _
       drawPoint, drawFormat)
   End Sub 
رسم نص داخل مستطيل مع محاذاة النص للوسط
PHP كود :
  Public Sub DrawStringRectangleFFormat(ByVal e As PaintEventArgs)

 
      ' Create string to draw.
       Dim drawString As [String] = "Sample Text"

       ' 
Create font and brush.
 
      Dim drawFont As New Font("Arial"16)
 
      Dim drawBrush As New SolidBrush(Color.Black)

 
      ' Create rectangle for drawing.
       Dim x As Single = 150.0F
       Dim y As Single = 150.0F
       Dim width As Single = 200.0F
       Dim height As Single = 50.0F
       Dim drawRect As New RectangleF(x, y, width, height)

       ' 
Draw rectangle to screen.
 
      Dim blackPen As New Pen(Color.Black)
 
      e.Graphics.DrawRectangle(blackPenxywidthheight)

 
      ' Set format of string.
       Dim drawFormat As New StringFormat
       drawFormat.Alignment = StringAlignment.Center

       ' 
Draw string to screen.
 
      e.Graphics.DrawString(drawStringdrawFontdrawBrush_
       drawRect
drawFormat)
 
  End Sub 
رسم نص مع التنسيق
PHP كود :
  Public Sub DrawStringFloatFormat(ByVal e As PaintEventArgs)

 
      ' Create string to draw.
       Dim drawString As [String] = "Sample Text"

       ' 
Create font and brush.
 
      Dim drawFont As New Font("Arial"16)
 
      Dim drawBrush As New SolidBrush(Color.Black)

 
      ' Create point for upper-left corner of drawing.
       Dim x As Single = 150.0F
       Dim y As Single = 50.0F

       ' 
Set format of string.
 
      Dim drawFormat As New StringFormat
       drawFormat
.FormatFlags StringFormatFlags.DirectionVertical

       
' Draw string to screen.
       e.Graphics.DrawString(drawString, drawFont, drawBrush, _
       x, y, drawFormat)
   End Sub 

رسم مستطيل و ملئه بلون ازرق
PHP كود :
  Public Sub ExcludeClipRectangle(ByVal e As PaintEventArgs)

 
      ' Create rectangle for exclusion.
       Dim excludeRect As New Rectangle(100, 100, 200, 200)

       ' 
Set clipping region to exclude rectangle.
 
      e.Graphics.ExcludeClip(excludeRect)

 
      ' Fill large rectangle to show clipping region.
       e.Graphics.FillRectangle(New SolidBrush(Color.Blue), 0, 0, _
       300, 300)
   End Sub 
ملئ مستطيل بلون و نص على الحافة الخارجية
PHP كود :
  Private Sub SetAndFillClip(ByVal e As PaintEventArgs)

 
      ' Set the Clip property to a new region.
       e.Graphics.Clip = New Region(New Rectangle(10, 10, 100, 200))

       ' 
Fill the region.
 
      e.Graphics.FillRegion(Brushes.LightSalmone.Graphics.Clip)

 
      ' Demonstrate the clip region by drawing a string
       ' 
at the outer edge of the region.
 
      e.Graphics.DrawString("Outside of Clip"_
           
New Font("Arial"12.0FFontStyle.Regular), _
           Brushes
.Black0.0F0.0F)

 
  End Sub 
ملئ الفورم بلون جديد و رسم مستطيل باللون السابق للفورم
PHP كود :
  Private Sub DemonstrateRegionData2(ByVal e As PaintEventArgs)

 
      'Create a simple region.
       Dim region1 As New Region(New Rectangle(10, 10, 100, 100))

       ' 
Extract the region data.
 
      Dim region1Data As System.Drawing.Drawing2D.RegionData region1.GetRegionData
       Dim data1
() As Byte
       data1 
region1Data.Data

       
' Create a second region.
       Dim region2 As New Region

       ' 
Get the region data for the second region.
 
      Dim region2Data As System.Drawing.Drawing2D.RegionData region2.GetRegionData()

 
      ' Set the Data property for the second region to the Data from the first region.
       region2Data.Data = data1

       ' 
Construct a third region using the modified RegionData of the second region.
 
      Dim region3 As New Region(region2Data)

 
      ' Dispose of the first and second regions.
       region1.Dispose()
       region1.Dispose()

       ' 
Call ExcludeClip passing in the third region.
 
      e.Graphics.ExcludeClip(region3)

 
      ' Fill in the client rectangle.
       e.Graphics.FillRectangle(Brushes.Red, Me.ClientRectangle)

       region3.Dispose()

   End Sub 
رسم نص و احاطته بمستطيل
PHP كود :
  Private Sub MeasureStringMin(ByVal e As PaintEventArgs)

 
      ' Set up string.
       Dim measureString As String = "Measure String"
       Dim stringFont As New Font("Arial", 16)

       ' 
Measure string.
 
      Dim stringSize As New SizeF
       stringSize 
e.Graphics.MeasureString(measureStringstringFont)

 
      ' Draw rectangle representing size of string.
       e.Graphics.DrawRectangle(New Pen(Color.Red, 1), 0.0F, 0.0F, stringSize.Width, stringSize.Height)

       ' 
Draw string to screen.
 
      e.Graphics.DrawString(measureStringstringFontBrushes.Black, New PointF(00))
 
  End Sub 
استخدام خواص التنعيم و التقطيع في رسم الخط
PHP كود :
  Private Sub ShowPensAndSmoothingMode(ByVal e As PaintEventArgs)

 
      ' Set the SmoothingMode property to smooth the line.
       e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias

       ' 
Create a new Pen object.
 
      Dim greenPen As New Pen(Color.Green)

 
      ' Set the width to 6.
       greenPen.Width = 6.0F

       ' 
Set the DashCap to round.
 
      greenPen.DashCap Drawing2D.DashCap.Round

       
' Create a custom dash pattern.
       greenPen.DashPattern = New Single() {4.0F, 2.0F, 1.0F, 3.0F}

       ' 
Draw a line.
 
      e.Graphics.DrawLine(greenPen20.0F20.0F100.0F240.0F)

 
      ' Change the SmoothingMode to none.
       e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.None

       ' 
Draw another line.
 
      e.Graphics.DrawLine(greenPen100.0F240.0F160.0F20.0F)

 
      ' Dispose of the custom pen.
       greenPen.Dispose()
   End Sub 
استخدام القلم في المحاذاة و استخدام خاصية التعريض
PHP كود :
  Private Sub PenAlignmenting(ByVal e As PaintEventArgs)
 
      Dim blackPen As New Pen(Color.FromArgb(255000), 1)
 
      Dim greenPen As New Pen(Color.FromArgb(25502550), 10)
 
      greenPen.Alignment PenAlignment.Center

       
' Draw the line with the wide green pen.
       e.Graphics.DrawLine(greenPen, 10, 100, 100, 50)

       ' 
Draw the line with the thin black pen.
 
      e.Graphics.DrawLine(blackPen1010010050)
 
  End Sub 
رسم نص داخل المستطيل مع استخدام المحاذاة
PHP كود :
  Private Sub ShowLineAndAlignment(ByVal e As PaintEventArgs)

 
      ' Construct a new Rectangle.
       Dim displayRectangle _
           As New Rectangle(New Point(40, 40), New Size(80, 80))

       ' 
Construct two new StringFormat objects
       Dim format1 
As New StringFormat(StringFormatFlags.NoClip)
 
      Dim format2 As New StringFormat(format1)

 
      ' Set the LineAlignment and Alignment properties for
       ' 
both StringFormat objects to different values.
 
      format1.LineAlignment StringAlignment.Near
       format1
.Alignment StringAlignment.Center
       format2
.LineAlignment StringAlignment.Center
       format2
.Alignment StringAlignment.Far

       
' Draw the bounding rectangle and a string for each
       ' 
StringFormat object.
 
      e.Graphics.DrawRectangle(Pens.BlackdisplayRectangle)
 
      e.Graphics.DrawString("Showing Format1"Me.FontBrushes.Red_
           RectangleF
.op_Implicit(displayRectangle), format1)
 
      e.Graphics.DrawString("Showing Format2"Me.FontBrushes.Red_
           RectangleF
.op_Implicit(displayRectangle), format2)
 
  End Sub 

رسم نص طويل داخل المستطيل مع خاصية الالتفاف

PHP كود :
  Private Sub ShowStringTrimming(ByVal e As PaintEventArgs)

 
      Dim format1 As New StringFormat
       Dim quote 
As String "Not everything that can be counted counts," _
           
" and not everything that counts can be counted."
 
      format1.Trimming StringTri 


الملفات المرفقة
.rar   gridprinting.rar (الحجم : 104.78 ك ب / التحميلات : 1,406)
.pdf   طباعة القريد.pdf (الحجم : 355.49 ك ب / التحميلات : 1,325)
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
#2
مجهود كبير، شكراً أستاذنا.  Heart
الرد }}}
تم الشكر بواسطة: ابو ليلى , asemshahen5
#3
منور يا غالي و الحمد لله على سلامتك افتقدناك
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة: الوادي , asemshahen5
#4
رائع
شكرا لك على الإفادة
الرد }}}
تم الشكر بواسطة: ابو ليلى , asemshahen5
#5
اداة رائعة بالفعل

هناك بعض الاشكاليات
1- عند طباعة داتا جرايد فيها صفوف كثيرة لا تضهر كل الصفوف من المفترض تضهر كل الصفوف ويكون حجم كل عمود نسبة معينة من حجم الورقة
2- عند الطباعة بالاتجاه العربي يبداء الطباعة من الاتجاة الايسر
الرد }}}
تم الشكر بواسطة: ابو ليلى , asemshahen5
#6
لماذا لا يمكنني أستدعاء هذه المكتبة في اصدار 2012 ؟
الرد }}}
تم الشكر بواسطة: asemshahen5
#7
شكرا
الرد }}}
تم الشكر بواسطة: asemshahen5 , asemshahen5
#8
أخي الكريم يقول ان
Variabl:e 's1' is used before it has been assigned a value. A null reference exception could result at runtime
الرد }}}
تم الشكر بواسطة:
#9
موضوع و شرح واف و جميل متعوب عليه ...جعله في ميزان حسناتكم
 لعل الكلمة التي تنفعني لم أكتبها بعد
عبد الله بن المبارك
الرد }}}
تم الشكر بواسطة:
#10
(25-01-21, 08:51 PM)Necro PC كتب : أخي الكريم يقول ان
Variabl:e 's1' is used before it has been assigned a value. A null reference exception could result at runtime

نفس الموضوع معي
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  تصدير DataGridView الى xls HASAN6.0 28 11,360 20-12-22, 11:40 PM
آخر رد: Mohammed Nafa
  جمع قيم عمود معين فى datagridview الجندى 8 8,306 15-05-22, 10:27 PM
آخر رد: ابراهيم ايبو
Exclamation [VB.NET] استيراد ملف اكسل الى vb.net Import Excel File Table –datagridview Sheet samo2000 1 2,900 20-02-22, 05:49 PM
آخر رد: رضوان الجماعي
  طريقة إنشاء برنامج طباعة ملصقات الباركود ملهمـ 1 4,398 22-12-21, 05:09 PM
آخر رد: alessam4pro
  [سلسلة تعليمية] تخصيص الاداة السحرية datagridview moosa_alabri 0 2,293 18-01-21, 09:51 AM
آخر رد: moosa_alabri
  طباعة تقارير Report Viewer مباشرة علي سالم 0 3,212 02-05-20, 08:45 PM
آخر رد: علي سالم
  [كود] DataGridView Copy & Paste HASAN6.0 2 5,182 19-07-19, 04:31 PM
آخر رد: mo.fathi
  طباعة بيانات موجودة في برنامج على ( 2003 Microsoft Office Word ) abulayth 1 4,487 11-09-16, 07:20 AM
آخر رد: أبووسم
  [VB.NET] جمع العمود في datagridview في vb net أحمد النجار 0 3,592 26-01-15, 01:28 AM
آخر رد: أحمد النجار
  [VB.NET] تنسيق البينات بناء على المدخلات datagridview vb net فيديو أحمد النجار 0 3,591 24-01-15, 07:42 PM
آخر رد: أحمد النجار

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم