Anasayfa / Yazılım / C# / C# Print İşlemleri Sipariş Formu Örneği ? 4

C# Print İşlemleri Sipariş Formu Örneği ? 4

Bir önceki yazımızın devamı niteliğinde Print işlemlerine devam edelim. Bu yazıyı okumadan önce önceki yazıları okuduğunuzdan emin olunuz.

C# Print İşlemleri Sipariş Formu Örneği ? 3

Öncelikle çıkış butonumuz için kodlarımızı yazalım. Çıkışa bastığımızda formumuz kapanacak. Çıkış butonu üstünde çift tıklıyoruz ve butonun click eventinde;

 private void btnCikis_Click(object sender, EventArgs e)
        {
            this.Close();
        }

Tekrar formumuzun design alanına geri dönüyoruz. ToolBox alanından formumuza aşağıdakileri sürükleyip bırakıyoruz.

PrintDocument, PageSetupDialog1, PrintPreviewDialog1, PrintDialog bu kontollerimizi ekledik.

Forum üzerinde PageSetupDialog1 kontrolünü seçiyoruz ve özellikler alanından Document özelliğini PrintDocument1 yapınız.

Daha sonra Sayfa Ayarları butonumuza çift tıklayalım ve kod alanına geçelim.

 private void btnSayfaAyarlari_Click(object sender, EventArgs e)
        {
            pageSetupDialog1.ShowDialog();
        }

Burdan sonra tekrar forum design alanına geçip, PrintPreviewDialog kontrolünü seçip özellikler alanından Document özelliğini PrintDocument1 yapalım, daha sonra baskı önizleme butonuna çift tıklayıp kod kısmına geçelim. (Üstteki resimdeki gibi, bu sefer PrintPreviewDialog1 seçilecek)

 private void btnBaskiOnizleme_Click(object sender, EventArgs e)
        {
            printPreviewDialog1.ShowDialog();
        }

Tekrar forumun design alanına geçip bu sefer yazdır butonuna çift tıklayalım. Buradaki kodlarımız;

 private void btnYazdir_Click(object sender, EventArgs e)
        {
            DialogResult pdr = printDialog1.ShowDialog();
            if (pdr == DialogResult.OK)
            {
                printDocument1.Print();
            }
        }

Daha sonra tekrar formumuza dönüyoruz. PrintDocument kontrolümüzü seçiyoruz ve bu kontrolün event listesinden PrintPage eventine çift tıklıyoruz ve kod alanına geçiyoruz.

Oluşan Print_Page event handler içindeki kodlarımız :

 private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //Yazı fontumu ve çizgi çizmek için fırçamı ve kalem nesnemi oluşturdum
            Font myFont = new Font("Calibri", 28);
            SolidBrush sbrush = new SolidBrush(Color.Black);
            Pen myPen = new Pen(Color.Black);

            //Bu kısımda sipariş formu yazısını ve çizgileri yazdırıyorum
            e.Graphics.DrawLine(myPen, 120, 120, 750, 120);
            e.Graphics.DrawLine(myPen, 120, 180, 750, 180);
            e.Graphics.DrawString("SİPARİŞ FORMU", myFont, sbrush, 200, 120);

            e.Graphics.DrawLine(myPen, 120, 320, 750, 320);

            myFont = new Font("Calibri", 12, FontStyle.Bold);
            e.Graphics.DrawString("Adet", myFont, sbrush, 140, 328);
            e.Graphics.DrawString("Ürün Adı", myFont, sbrush, 240, 328);
            e.Graphics.DrawString("Birim Fiyatı", myFont, sbrush, 440, 328);
            e.Graphics.DrawString("Fiyat", myFont, sbrush, 640, 328);

            e.Graphics.DrawLine(myPen, 120, 348, 750, 348);

            int y = 360;

            StringFormat myStringFormat = new StringFormat();
            myStringFormat.Alignment = StringAlignment.Far;

            decimal gTotal = 0;

            foreach (ListViewItem lvi in listView1.Items)
            {
                e.Graphics.DrawString(lvi.SubItems[1].Text, myFont, sbrush, 160, y, myStringFormat);
                e.Graphics.DrawString(lvi.Text, myFont, sbrush, 220, y);
                decimal bFiyat = Convert.ToDecimal(lvi.SubItems[2].Text);
                decimal fiyat = Convert.ToDecimal(lvi.SubItems[1].Text) * Convert.ToDecimal(lvi.SubItems[2].Text);
                gTotal += fiyat;
                e.Graphics.DrawString(bFiyat.ToString("c"), myFont, sbrush, 530, y, myStringFormat);
                e.Graphics.DrawString(fiyat.ToString("c"), myFont, sbrush, 700, y, myStringFormat);

                y += 20;

            }

            e.Graphics.DrawLine(myPen, 120, y, 750, y);
            e.Graphics.DrawString(gTotal.ToString("c"), myFont, sbrush, 700, y + 10, myStringFormat);


            
        }

Şu anda uygulamamızı çalıştırıp, baskı önizleme dediğimizde aldığımız görüntü şöyle;

Birde Sipariş Formunun üstüne logo eklemeye değineyim. Bunun için öncelikle form design görünümünü açalım. Sağda Solution Explorer’da Properties alanından Resources açıyoruz. Burada Add Resource dedikten sonra Add Existing File diyoruz. Daha sonra dosyamız nerede ise konumunu gösteriyoruz.Sonra Resources kapatıyoruz. Değişiklikleri kaydetmek istiyormusunuz diye soracaktır evet diyoruz.

Daha sonra tekrar kod alanına dönüp kodlarımızı ekliyoruz. PrintDocument kontrolünün Print_Page eventi altına;

//logo için
            e.Graphics.DrawImage(Properties.Resources.logo, 100, 20);

Evet uygulamayı çalıştırıp, baskı önizleme dediğimiz de alacağımız görüntü;

Uygulama burada son buluyor. Kodların tamamını paylaşayım :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SiparisFormu
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnBaskiOnizleme_Click(object sender, EventArgs e)
        {
            printPreviewDialog1.ShowDialog();
        }

        private void btnilkKayit_Click(object sender, EventArgs e)
        {
            //ListView kontrolümdeki Items 0'a giderek ilk kayda gidiyorum. Ve buraya odaklanıyorum.
            listView1.Items[0].Selected = true;
            listView1.Focus();
            SayfaBilgisiAl();
        }

        //Bu metotla hangi sayfada yani hangi kayıtta olduğumu görebileceğim. 5 kayıttan işte 1. gibi, 1/5 gibi..
        private void SayfaBilgisiAl()
        {
            lblKonum.Text = (listView1.SelectedIndices[0] + 1).ToString() + "/" + listView1.Items.Count.ToString();            
        }

        private void btnGeri_Click(object sender, EventArgs e)
        {
            //if ile ilk kayıttamıyım değilmiyim onu kontrol ediyorum, eğer ilk kayıtta değilsem bu işlemde -1 yapılıyor.
            if (listView1.SelectedIndices[0] > 0)
            {
                listView1.Items[listView1.SelectedIndices[0] - 1].Selected = true;
            }
            listView1.Focus();
            SayfaBilgisiAl();
        }

        private void btnileri_Click(object sender, EventArgs e)
        {
            //if ile son kayıttamıyız değilmiyiz ona bakıyoruz, son kayıtta değilsek next işlemi uygulanıyor.
            if (listView1.SelectedIndices[0] < listView1.Items.Count - 1)
            {
                listView1.Items[listView1.SelectedIndices[0] + 1].Selected = true;                
            }
            listView1.Focus();
            SayfaBilgisiAl();
        }

        private void btnSonKayit_Click(object sender, EventArgs e)
        {
            listView1.Items[listView1.Items.Count - 1].Selected = true;
            listView1.Focus();
            SayfaBilgisiAl();
        }

        private void listView1_MouseClick(object sender, MouseEventArgs e)
        {
            SayfaBilgisiAl();
        }

        private void listView1_KeyUp(object sender, KeyEventArgs e)
        {
            SayfaBilgisiAl();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            listView1.Items[0].Selected = true;
            SayfaBilgisiAl();
            ToplamAl();
        }

        private void ToplamAl()
        {
            decimal toplam = 0;
            for (int i = 0; i < listView1.Items.Count; i++)
            {
                toplam += Convert.ToDecimal(listView1.Items[i].SubItems[2].Text);
            }
            txtToplam.Text = toplam.ToString("#,###.00 TL");
        }

        private void btnCikis_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnSayfaAyarlari_Click(object sender, EventArgs e)
        {
            pageSetupDialog1.ShowDialog();
        }

        private void btnYazdir_Click(object sender, EventArgs e)
        {
            DialogResult pdr = printDialog1.ShowDialog();
            if (pdr == DialogResult.OK)
            {
                printDocument1.Print();
            }
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //Yazı fontumu ve çizgi çizmek için fırçamı ve kalem nesnemi oluşturdum
            Font myFont = new Font("Calibri", 28);
            SolidBrush sbrush = new SolidBrush(Color.Black);
            Pen myPen = new Pen(Color.Black);

            //logo için
            e.Graphics.DrawImage(Properties.Resources.logo, 100, 20);

            //Bu kısımda sipariş formu yazısını ve çizgileri yazdırıyorum
            e.Graphics.DrawLine(myPen, 120, 120, 750, 120);
            e.Graphics.DrawLine(myPen, 120, 180, 750, 180);
            e.Graphics.DrawString("SİPARİŞ FORMU", myFont, sbrush, 200, 120);

            e.Graphics.DrawLine(myPen, 120, 320, 750, 320);

            myFont = new Font("Calibri", 12, FontStyle.Bold);
            e.Graphics.DrawString("Adet", myFont, sbrush, 140, 328);
            e.Graphics.DrawString("Ürün Adı", myFont, sbrush, 240, 328);
            e.Graphics.DrawString("Birim Fiyatı", myFont, sbrush, 440, 328);
            e.Graphics.DrawString("Fiyat", myFont, sbrush, 640, 328);

            e.Graphics.DrawLine(myPen, 120, 348, 750, 348);

            int y = 360;

            StringFormat myStringFormat = new StringFormat();
            myStringFormat.Alignment = StringAlignment.Far;

            decimal gTotal = 0;

            foreach (ListViewItem lvi in listView1.Items)
            {
                e.Graphics.DrawString(lvi.SubItems[1].Text, myFont, sbrush, 160, y, myStringFormat);
                e.Graphics.DrawString(lvi.Text, myFont, sbrush, 220, y);
                decimal bFiyat = Convert.ToDecimal(lvi.SubItems[2].Text);
                decimal fiyat = Convert.ToDecimal(lvi.SubItems[1].Text) * Convert.ToDecimal(lvi.SubItems[2].Text);
                gTotal += fiyat;
                e.Graphics.DrawString(bFiyat.ToString("c"), myFont, sbrush, 530, y, myStringFormat);
                e.Graphics.DrawString(fiyat.ToString("c"), myFont, sbrush, 700, y, myStringFormat);

                y += 20;

            }

            e.Graphics.DrawLine(myPen, 120, y, 750, y);
            e.Graphics.DrawString(gTotal.ToString("c"), myFont, sbrush, 700, y + 10, myStringFormat);


            
        }
    }
}

Uygulamayı aşağıdaki linkten indirebilirsiniz..

13 yorum

  1. Çok güzel ve faydalı bir anlatım teşekkürler.

  2. Açıklamalar çok iyi paylaşım için tşk.

  3. Elinize sağlık harika bir anlatım ve proje…

  4. Ellerinize sağlık. İşimi gördü. (;

  5. çok işime yaradı teşekkürler,
    sayfa ebatını nasıl girebilirim?

  6. iyi akşamlar ben listwiev değilde splitcounterner1.panel 1 içindeki form elemanlarını yazdırmak istiyorum bunu nasıl yapabilirim yardımcı olursanız sevinirim 🙂

  7. çok teşekkürler..

  8. İsmail Bey,

    Aşağıdaki dizide “TL” yi euro yapmak için c yerine ne yazmalıyız?

     e.Graphics.DrawString(bFiyat.ToString(“c”), myFont, sbrush, 530,

  9. Hocam eline sağlık. Güzel paylaşım. Yalnız bir sorum olacak. Listview değil datagripView kullanarak nasıl yapabiliriz? Destek olursan çok sevinirim.

  10. Bunda Listviewde ki verileri yazdırmıssınız checkboxta secilen verileri nasıl yazdırabilirim ya da datagridViewden ?

  11. sipariş formu yerine label deki yazıyı nasıl yazdırırız

  12. elinize sağlık. fakat bu konuyla alakalı size bir soru sormak istiyorum.

    bu çıktı sayfasını pdf ye çevirerek web uygulamasında gösterebilir miyiz.
    (benim bir web uygulamam var. html üzerinden printer.x yada y belirtip bir çıktı alamıyoruz.
    amacım mvc web uygulamasında girilen siparişleri yazdır dediğim zaman server da printer sayfası oluşturmak sonra bunu herhangi bir pdf yada yazıcı çıktı sayfası gibi web sayfasında açmak ve yazdırmak)

  13. teşekkürler.Güzel bir paylaşım.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir