Son Haberler
Anasayfa / Yazılım / C# / Birden Çok Sayfanın Önizlenmesi Multi Printing

Birden Çok Sayfanın Önizlenmesi Multi Printing

Bir önceki yazıda C Sharp’da baskı önizlemenin nasıl yapılacağına değinmiştim. Bu örneğimde de birden fazla sayfada yer alan verinin nasıl ne şekilde görüleceğini görmek için bir uygulama yapıyorum. Konu ile ilgili teorik bilgiyi önceki yazıdan alabilirsiniz. Bu yazıda direkt olarak uygulama yer alacak.

Önceki yazı : http://www.ismailgursoy.com.tr/printpreviewdialog-kontrolu/

Şimdi yeni bir windows projesi açıyorum. Bu projeme bir adet buton kontrolü ekliyorum. Daha sonra bir adet PrintDocument kontrolü ekliyorum. Daha sonra bir adette PrintPreviewDialog kontrolü ekliyorum. PrintPreviewDialog kontrolümün properties alanından Document özelliğini eklemiş olduğum PrintDocument1’i seçerek belirliyorum.

Daha sonra PrintDocument1 nesnemi form üzerinde seçiyorum ve properties alanında eventleri listeledikten sonra PrintPage eventinde aşağıdaki kodları yazıyorum. Öncesinde global olarak int tipinde a ve b değişkenlerimi tanımlıyorum.

 int a, b;
        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //3 sayfa genişliğinde 7 sayfa yüksekliğinde içi dolu kırmızı bir elips çizdiriyorum
            e.Graphics.FillEllipse(Brushes.Red, new Rectangle(-e.PageBounds.Width * a, -e.PageBounds.Height * b, e.PageBounds.Width * 3, e.PageBounds.Height * 7));
            b = b + 1;
            if (b == 7 & a == 0)
            {
                b = 0;
                a++;
                e.HasMorePages = true;

            }
            else if (b == 7 & a == 1)
            {
                e.HasMorePages = false;
            }
            else
            {
                e.HasMorePages = true;
            }

          
        }

Daha sonra form üzerinde buton kontrolüme çift tıklıyorum ve click eventine aşağıdaki kod satırımı ekliyorum.

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

Böylelikle yapmış olduğum iş aslında şu, birden çok sayıda sayfa üzerinde büyük içi dolu kırmızı renkte bir elips çizdirdim. Daha sonra buton kontrolüme bastığımda PrintDocument nesnem üzerinden PrintPreviewDialog açılıyor ve böylelikle baskı önizleme yapabiliyorum. Aşağıdaki gibi bir sonuca ulaşabilirim.

Tabi burda ben 6 sayfa şeklinde göstermesini istedim bundan dolayı 6 lı bir önizleme var, sizde açılan dilaog penceresinden üstteki butonlardan faydalanarak bunu bu şekilde görebilirsiniz.

Şimdi formuma bir adet de image ekleyip bunun baskı önizlemesi nasıl oluyor bunu görelim. Formuma bir adet buton daha ekliyorum. Buna ek olarak bir adet daha PrintDocument ekliyorum. Yine bir adet daha PrintPrewievDialog kontrolü ekliyorum. Son eklediğim PrintPreviewDialog kontrolünün document özelliğini PrintDocument2 yapıyorum. Daha sonra PrintDocument2 kontrolü seçiyorum ve event listesinde PrintPage eventinde çift tıklayarak bu eventin oluşmasını sağlıyorum. Buraya kod yazmadan önce Solution Explorer alanında Properties yazan yerin solundaki oka tıklıyorum ve alanı genişletiyorum, burada yer alan Resources.resx’e çift tıklıyorum.

Daha sonra Resource.resx açılıyor. Burada üst tabda yer alan add resource yazan yerdeki oka tıklıyorum ve hemen ilk seçenek olan Add Existing File diyorum.

Ben bilgisayarımda yer alan örnek resimlerden penguenleri ekledim 🙂 İstediğiniz bir resmi ekleyebilirsiniz. Ekleyince Resource.resx alanında zaten resmin küçük bir önizlemesi yer alacak.

Tekrar formuma dönüyorum. PrintPage eventinde PrintDocument üzerinde resmin çizilmesi için aşağıdaki kodu yazıyorum

private void printDocument2_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            //Görüldüğü gibi resminin adı Resources altında çıkıyor, genişlik olarak 2 piksel yükseklik olarak 50 piksel boşluk verdim
            e.Graphics.DrawImage(Properties.Resources.Penguins, new Point(2, 50));
        }

Daha sonra formum üzerinde sonradan oluşturduğum buton kontrolüne çift tıklıyorum bu kontrolün Click eventinde aşağıdaki kodu yazıyorum.

private void button2_Click(object sender, EventArgs e)
        {
            printPreviewDialog2.ShowDialog();
        }

Uygulamamı çalıştırıp buton2 ye bastığımda aşağıdaki gibi bir sonuç alıyorum.

Bu yazı aslında bir önceki yazı ile aynı nitelikte, ek olarak bir şey yapmadık ama en azından Resources.resx dışarıdan nasıl dosya ekleniyor bunu gördük, elips nasıl çizilir buna da kod kısmında yer verdik. Asıl amacımız birden fazla sayfanın önizlenmesi idi. Uygulamayı indirmek için aşağıdaki linki kullanabilirsiniz.

https://hotfile.com/dl/156546819/4feb530/Printing2.rar.html

3 yorum

  1. ismail bey iyi günler çalışmalaırınızı ilgi ile takip ediyorum benim bir sorum olacaktı size. bir panelim var ve üzerinde sorular mevcut bu panelin çıktısını almak istiyorum fakat bir türlü birden fazla sayfa yazdıramadım ya sonsuz döngüye giriyor yada çıktı alamıyorum yardımcı olmanız mümkünmü acaba

  2. Panel kontrolünüz içinde başka bir kontrol var mı? RichTextBox vs gibi?

  3. 3 panel ekleyip onları döngüye sokarak sorunu hallettim teşekkür ederim

Bir cevap yazın

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