الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن الطباعة في سي شارب

بدأه المبرمجh في 31 يناير 2012 · 6 رد · 3,775 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كيف اقوم بطباعة الفورم بعد ان يدخل المستخدم في ال TEXT BOX المعلومات المطلوبة ؟

عن طريق زر ، وعن طريقة القائمة PRINT ؟

ممكن وضع الاكواد مع الشرح .

1
#2

اخى الكريم.... لو حضرتك عايز تطبع الفورمة.... يبقى تنظر الى هذا الكود :

using System; 
using System.Windows.Forms; 
using System.Drawing; 
using System.Drawing.Printing; 

public class Form1 :  Form 
  { 
    private Button printButton = new Button(); 
    private PrintDocument printDocument1 = new PrintDocument(); 

   public Form1() 
    { 
      printButton.Text = "Print Form"; 
      printButton.Click += new EventHandler(printButton_Click); 
      printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage); 
      this.Controls.Add(printButton); 
    } 

   void printButton_Click(object sender, EventArgs e) 
   { 
     CaptureScreen(); 
     printDocument1.Print(); 
   } 

   Bitmap memoryImage; 

   private void CaptureScreen() 
   { 
     Graphics myGraphics = this.CreateGraphics(); 
     Size s = this.Size; 
     memoryImage = new Bitmap(s.Width, s.Height, myGraphics); 
     Graphics memoryGraphics = Graphics.FromImage(memoryImage); 
     memoryGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s); 
   } 

   private void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e) 
   { 
     e.Graphics.DrawImage(memoryImage, 0, 0); 
   } 

  public static void Main() 
   { 
     Application.Run(new Form1()); 
   } 
 }

ملحوظة هذا الكود على سبيل المثال

واتمنى لك التوفيق.... وشكرا

#3
صوت الماضى كتب:

اخى الكريم.... لو حضرتك عايز تطبع الفورمة.... يبقى تنظر الى هذا الكود :

using System; 
using System.Windows.Forms; 
using System.Drawing; 
using System.Drawing.Printing; 

public class Form1 :  Form 
  { 
    private Button printButton = new Button(); 
    private PrintDocument printDocument1 = new PrintDocument(); 

   public Form1() 
    { 
      printButton.Text = "Print Form"; 
      printButton.Click += new EventHandler(printButton_Click); 
      printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage); 
      this.Controls.Add(printButton); 
    } 

   void printButton_Click(object sender, EventArgs e) 
   { 
     CaptureScreen(); 
     printDocument1.Print(); 
   } 

   Bitmap memoryImage; 

   private void CaptureScreen() 
   { 
     Graphics myGraphics = this.CreateGraphics(); 
     Size s = this.Size; 
     memoryImage = new Bitmap(s.Width, s.Height, myGraphics); 
     Graphics memoryGraphics = Graphics.FromImage(memoryImage); 
     memoryGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s); 
   } 

   private void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e) 
   { 
     e.Graphics.DrawImage(memoryImage, 0, 0); 
   } 

  public static void Main() 
   { 
     Application.Run(new Form1()); 
   } 
 }

ملحوظة هذا الكود على سبيل المثال

واتمنى لك التوفيق.... وشكرا

اخي الكريم جزيت خيرا اولا

ولكن ارجوا ان توضح اين اضع كل من الاكواد السابقة ؟

وانا اود ان اطبع الفورم دون الزر الذي يظهر عليه .

وتقبل تحياتي .

#4

الكود الذي تم وضعه يقوم بطباعة كل شيء موجود على الفورم ( داخل التاب و خارجه).

إذا أردت طباعة فقط تاب محدد فعليك تعديل الكود كالتالي:

1) يجب إضافة عنصر الزر خارج التاب إذا أردت عدم طباعته.

2) يجب إضافة عنصر PrintDocument ( تجده ضمن خانة ال Printing في لائحة العناصر )

3) أضف تعريف المتحول التالي ضمن كلاس الفورم:

        Bitmap memoryImage;

هذا المتحول هو من نوع Bitmap و هو عبارة عن كلاس لتحزين معلومات صورة ( و هي في حالتنا صورة عنصر التاب )

4) اعمل دبل كليك على الPrintDocument من أجل إضافة كود معالجة الطباعة و اكتب ضمنه الكود التالي:

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawImage(memoryImage, 0, 0); 
        }

و هذا الكود يقوم بعملية طباعة الصورة الموجودة حالياً في المتحول memoryImage إلى الطابعة الافتراضية

5) اعمل دبل كليك على الزر و اكتب ضمنه الكود التالي:

        private void button1_Click(object sender, EventArgs e)
        {
            Size s = tabControl1.SelectedTab.Size;
            memoryImage = new Bitmap(s.Width, s.Height);
            tabControl1.SelectedTab.DrawToBitmap(memoryImage, tabControl1.SelectedTab.ClientRectangle);
            printDocument1.Print();
        }

أول سطر للحصول على حجم عنصر التاب "المحدد حالياً"

ثاني سطر لتهيئة المتحول memoryImage بصورة فارغة لها طول و عرض عنصر التاب المحدد

ثالث سطر ينفذ عملية رسم (نسخ محتوى ) التاب المحدد إلى المتحول memoryImage

رابع سطر لبدء عملية الطباعة و التي تحفز تنفيذ الكود في الخطوة 4

أرفقت لك مشروع للتجربة.

WindowsFormsApplication7.zip

#5
Adel Khayata كتب:

الكود الذي تم وضعه يقوم بطباعة كل شيء موجود على الفورم ( داخل التاب و خارجه).

إذا أردت طباعة فقط تاب محدد فعليك تعديل الكود كالتالي:

1) يجب إضافة عنصر الزر خارج التاب إذا أردت عدم طباعته.

2) يجب إضافة عنصر PrintDocument ( تجده ضمن خانة ال Printing في لائحة العناصر )

3) أضف تعريف المتحول التالي ضمن كلاس الفورم:

        Bitmap memoryImage;

هذا المتحول هو من نوع Bitmap و هو عبارة عن كلاس لتحزين معلومات صورة ( و هي في حالتنا صورة عنصر التاب )

4) اعمل دبل كليك على الPrintDocument من أجل إضافة كود معالجة الطباعة و اكتب ضمنه الكود التالي:

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawImage(memoryImage, 0, 0); 
        }

و هذا الكود يقوم بعملية طباعة الصورة الموجودة حالياً في المتحول memoryImage إلى الطابعة الافتراضية

5) اعمل دبل كليك على الزر و اكتب ضمنه الكود التالي:

        private void button1_Click(object sender, EventArgs e)
        {
            Size s = tabControl1.SelectedTab.Size;
            memoryImage = new Bitmap(s.Width, s.Height);
            tabControl1.SelectedTab.DrawToBitmap(memoryImage, tabControl1.SelectedTab.ClientRectangle);
            printDocument1.Print();
        }

أول سطر للحصول على حجم عنصر التاب "المحدد حالياً"

ثاني سطر لتهيئة المتحول memoryImage بصورة فارغة لها طول و عرض عنصر التاب المحدد

ثالث سطر ينفذ عملية رسم (نسخ محتوى ) التاب المحدد إلى المتحول memoryImage

رابع سطر لبدء عملية الطباعة و التي تحفز تنفيذ الكود في الخطوة 4

أرفقت لك مشروع للتجربة.

اخي الكريم جزيت الف خير

لكن منظر التاب ليس جيد ، الا يوجد هنالك طريقة لنقوم بطباعة ما بداخل التاب ، ولكن بشكل منسق وجيد ، لاني لما جربت الطريقة التي وضعتها ، طبع التاب كما هو بمربعاته .... ، لكن انا اريد ان اطبق ورقة مثل الورق العادي اي لا يظهر عليها انها لبرنامج او انها tab معينة ، وانا عندي قوائم من ضمنها زل للطباعة ، فهل ممكن ان اضع في الرز هذا كود بحيث اي tab انا فيها اذا اردت ان اطبعها يقبل ؟

ومنكم اخوتي نتعلم .

تم تعديل هذه المشاركة بواسطة المبرمجh في 1 فبراير 2012 في 13:55

#6
اقتباس
لكن منظر التاب ليس جيد ، الا يوجد هنالك طريقة لنقوم بطباعة ما بداخل التاب ، ولكن بشكل منسق وجيد ، لاني لما جربت الطريقة التي وضعتها ، طبع التاب كما هو بمربعاته .... ، لكن انا اريد ان اطبق ورقة مثل الورق العادي اي لا يظهر عليها انها لبرنامج او انها tab معينة

إذاً يجب أن تقوم بعملية الطباعة بشكل يدوي: أي أن تقوم بطباعة النص و المستطيل و الخط ... هذا مثال:

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            // Create string to draw.
            String drawString = "Sample Text";

            // Create font and brush.
            Font drawFont = new Font("Arial", 16);
            SolidBrush drawBrush = new SolidBrush(Color.Black);

            // Create point for upper-left corner of drawing.
            PointF drawPoint = new PointF(150.0F, 150.0F);

            // Draw string to screen.
            e.Graphics.DrawString(drawString, drawFont, drawBrush, drawPoint);


            // Create pen.
            Pen blackPen = new Pen(Color.Black, 3);

            // Create rectangle.
            Rectangle rect = new Rectangle(50, 50, 400, 400);

            // Draw rectangle to screen.
            e.Graphics.DrawRectangle(blackPen, rect);
        }

هذا المثال يقوم بطباعة نص و مستطيل ... حاول مراجعة الكود خطوة خطوة وبعدها إذا أردت التفصيل ممكن نفصل.

اقتباس
وانا عندي قوائم من ضمنها زل للطباعة ، فهل ممكن ان اضع في الرز هذا كود بحيث اي tab انا فيها اذا اردت ان اطبعها يقبل ؟

العملية بسيطة للغاية, فمن إجراء معالجة الضغط على القائمة : فقط استدعي عملية الطباعة:

        private void printToolStripMenuItem_Click(object sender, EventArgs e)
        {
            printDocument1.Print();
        }

أرفقت لك المشروع المعدل لتطلع عليه.

WindowsFormsApplication7.zip

#7

جميل جدا بارك الله فيك هذا ما كنت احتاجه

:cash: :cash: :ty: :ty: :salam:

مواضيع مشابهة