Son Haberler
Anasayfa / Yazılım / C# / PrintPreviewDialog Kontrolü

PrintPreviewDialog Kontrolü

Bu yazıyı okumadan önce bir önceki yazıya göz atıp, linkte verilen uygulamayı indiriniz.

http://www.ismailgursoy.com.tr/pagesetupdialog-kontrolu/

Bu kontrolümüzün görevi yazdırılacak dökümanın önizlenmesini sağlamaktır. Windows uygulamalarında Print Preview dediğimizde karşımıza çıkan dialog penceresidir aslında. Bu kontrolümüzün en önemli özelliği yine daha önce değinmiş olduğum Print kontrollerinde olduğu gibi Document özelliğidir. Document özelliği ile Print edilmesi gereken alan için PrintDocument nesnesi belirlenir. Bu mutlaka belirlenmeli ki baskı önizleme yapılabilsin. Bunu belirleme işlemi PrintPreviewDialog kontrolü seçili iken özelliklerinden Document alanında ilgili PrintDocument nesnesini seçmek yeterlidir.

Şimdi uygulamama geri dönüyorum. Formuma bir adet PrintPreviewDialog kontrolü sürüklüyorum. Ardından bir adet button kontrolü sürüklüyorum. Button kontrolümün Text özelliğini Sayfa Önizleme, name özelliğini ise btnSayfaOnizleme yapıyorum. Daha sonra butonuma çift tıklıyorum ve click eventine aşağıdaki kodları yazıyorum.

private void btnSayfaOnizleme_Click(object sender, EventArgs e)
        {
            DialogResult sayfaOnizleme;
            sayfaOnizleme = printPreviewDialog1.ShowDialog();
            if (sayfaOnizleme == DialogResult.OK)
            {
                printDocument1.Print();
            }
        }

Uygulamamızı çalıştırıp Sayfa Önizleme butonuna bastığımızda aşağıdaki gibi bir pencere karşımıza çıkar :

Görüldüğü gibi boş temiz bir sayfa çıktı. Bunun nedeni şu, benim printDocument alanımda aslında şu anda henüz hiç bir şey yok, uygulama kodlarından da görebilirsiniz.

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 Printing1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

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

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {

        }

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

        private void btnSayfaOnizleme_Click(object sender, EventArgs e)
        {
            DialogResult sayfaOnizleme;
            sayfaOnizleme = printPreviewDialog1.ShowDialog();
            if (sayfaOnizleme == DialogResult.OK)
            {
                printDocument1.Print();
            }
        }
    }
}

Görüldüğü gibi boş. Ama şu anda amacımız sayfa önizleme dialog penceresini çıkarmaktı ve oldu. Buradan yazdırılacak döküman için hangi sayfasının görüntüleneceğini, önizleme esnasında kaç sayfanın önizlenebileceğini vb ayarları yapabilirsiniz. Bu arada değinmek istediğim bir nokta da bir dökümanı print preview yaptığımızda aslında bir nevi bunu yazdırıyoruz.

Şimdi bu temiz sayfayı dolduralım, PrintDocument içinde bir grafiksel şekil olsun ve bunu görelim. Bunun için PrintDocument nesnesinin PrintPage eventinde aşağıdaki kodları yazıyorum.

 private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawEllipse(Pens.Red, e.MarginBounds);
            System.Drawing.Drawing2D.GraphicsPath grYol = new System.Drawing.Drawing2D.GraphicsPath();
            grYol.AddRectangle(new Rectangle(280, 280, 300, 450));
            e.Graphics.DrawPath(Pens.Yellow, grYol);
            e.HasMorePages = false;
        }

Bir adet elips çizdirdim, içine de bir adet dikdörtgen ekledim. Birde PrintDocument kontrolümün EndPrint eventinde yazdırma işlemi tamamlandı uyarısı verdirelim. Bunun için PrintDocumentg nesnemin EndPrint eventinede kodlar ekliyorum ve son olarak tüm kodlarım şöyle :

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 Printing1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

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

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawEllipse(Pens.Red, e.MarginBounds);
            System.Drawing.Drawing2D.GraphicsPath grYol = new System.Drawing.Drawing2D.GraphicsPath();
            grYol.AddRectangle(new Rectangle(280, 280, 300, 450));
            e.Graphics.DrawPath(Pens.Yellow, grYol);
            e.HasMorePages = false;
        }

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

        private void btnSayfaOnizleme_Click(object sender, EventArgs e)
        {
            DialogResult sayfaOnizleme;
            sayfaOnizleme = printPreviewDialog1.ShowDialog();
            if (sayfaOnizleme == DialogResult.OK)
            {
                printDocument1.Print();
            }
        }

        private void printDocument1_EndPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
        {
            MessageBox.Show("Yazdırma işlemi tamamlandı");
        }
    }
}

Böylelikle uyarı ile baskı önizleme sayfası aynı anda açılır.

Şimdilik bu kadar aşağıdaki linkten uygulamayı indirebilirsiniz.

Bir yorum

  1. İyi günler. Makalenize okudum.Gayet Başarılı.
    Size bir sorum olacaktı ?

    Bİr tane c# projesi geliştirdim ve printpreview kullanarak bır döküman hazırladım. Bu dökümanı kullanıcıya göstermeden direk basmam lazım. Bunu nasıl yapabilirim.

    Yardımınız için teşekkürler.

Bir cevap yazın

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