Son Haberler
Anasayfa / Yazılım / C# / PrintDialog ve PrintDocument Kontrolü

PrintDialog ve PrintDocument Kontrolü

PrintDialog kontrolünü anımsayabilmemiz için tanımlamaya şu şekilde başlamak istiyorum. Örneğin bir word, excel, notepad vb bir çok uygulama için sayfa yazdırmak istediğimde karşıma çıkan menüden yazıcı seçebiliyorum, yazdırmak istediğim dökümanın adını görebiliyorum hatta hangi sayfaları yazdırmak istediğimi ve bir takım değişik ayarları yapıyorum. İşte PrintDialog kontrolü de bu gibi işlemleri yapmamızı sağlayan bir kontroldür.
PrintDialog kontrolünü herhangi bir c# kontrolü üzerine sürükleyip bıraktığımızda tıpkı timer de olduğu gibi bu kontrole dair herhangi bir simgesel ibare göremeyiz.

PrintDialog kontrolünün çok kullanılan özellikleri :

PrintToFile : Herhangi bir file?a yazdırma olanağına izin verip vermemeyi sağlar.
AllowSelection : Belli bir seçimi yazdırıp yazdırmamaya izin verir.
AllowSomePages : Belli sayfaların yazdırılıp yazdırılmamasına izin verir.
ShowHelp : Yardım gösterme durumu.
ShowNetwork : Network?ü gösterme durumu.

PrintDialog kontrolü aşağıdaki gibi bir dilaog kutusudur

Üstteki resimden de göreceğiniz üzere Pages bizim AllowSomePages özelliğimize denk geliyor, yani hangi sayfaları yazdırabileceğimize olanak sağlayabiliyoruz, bu gibi özelliklerin dialog penceresinde görünüp görünmemesini PrintDialog kontrolümün özelliklerinden ayarlayabiliyoruz.

Şimdi uygulama ile birlikte konuyu anlatmaya devam ediyorum. Bir windows projesi oluşturuyorum ve formuma bir adet PrintDialog ekliyorum. Bir adet Buton ekliyorum text özelliğini yazdır yapıyorum ve adını btnYazdir veriyorum.

Butonuma çift tıklıyorum ve click eventinde aşağıdaki kodları yazıyorum :

private void btnYazdir_Click(object sender, EventArgs e)
        {
            DialogResult yazdirmaIslemi;
            yazdirmaIslemi = printDialog1.ShowDialog();
            if (yazdirmaIslemi == DialogResult.OK)
            {
                //Yazdırma işlemi için kodlarım yer alıyor.
            }
        }

Bu noktada değinmek istediğim bir husus var. Yazdırma uygulamalarında ekranda yer alanları yazdırabilmek için kullanmam gereken bir kontrolüm daha var. bu kontrolümün adı PrintDocument kontrolü. Bu konrol ile aslında yapılan şu uygulamalarımızda Print dediğimizde arka planda yazdırılacak alanı belirleyip sistemde çizen yani oluşturan bir kontroldür. Dolayısı ile bu kontrolü kullanmam gerekiyor. Ben formuma toolbaxdan print kontrolleri içinden PrintDocument kontrolünü de sürüklüyorum. Daha sonra PrintDocument kontrolümünün eventlerinden PrintPage eventini buluyor buna çift tıklıyorum ve burada işlemlerimi yaptırabiliyorum. Bu event ne yapıyor buna değineyim öncelikle. Print edilecek her sayfa için tetikleniyor. Tabi bunu yapabilmek için de bu event içinde oluşan e argümentinin

e.HasMorePages özelliğinin true olması gerekiyor. Yine burada dikkat edilecek nokta şu, kullanıcı son sayfayı yazdırdıktan sonra e.Cancel = true dememiz gerekir. Bunu demez isek uygulama sürekli sonsuz döngüde yazdırma işlemine devam etmek ister. bu konuya ilerleyen printing yazılarında daha detaylı olarak yer vereceğim, şimdilik teorik olarak bu kadar bilmemiz yeterli. Bu uygulama için sadece PrintDialog kontrolünün sistemden Print penceresini açmasını istiyorum, yani henüz yazdırma işlemi için bir şey yapmayacağım. Dolayısı ile sadece PrintDocument kontrolünün PrintPage eventini seçiyor çift tıklıyor ve boş bırakıyorum.

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

        }

Daha sonra butonumun click eventine dönüyor ve aşağıdaki şekilde düzenliyorum :

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

Uygulamamı çalıştırıp butona bastığımda yazdırma dialog pencresi açılıyor :

Görüldüğü gibi aynı dialog penceresi karşımızda. Tabi PrintDialog kontrolü için bazı kontrolleri True yapmadığımdan dolayı tüm özellikler açık değil. Bunları true yapıyorum.

Şimdi uygulamamı tekrar çalıştırdığım da dialog penceresinde bu sefer sayfa seçme alanım, sayfa seçme aralığım gibi özellikleri de açıyorum.

Böylelikle PrintDialog kontrolü ile Print dialog pencresini açmayı ve bir takım özelliklerini açıp kapamayı öğrenmiş bulunuyoruz. Daha ilerleyen yazılarda yazdırma işlemleri ile ilgili daha geniş çerçevede bilgi vereceğim. Aşağıdaki linkten bu uygulamayı indirebilirsiniz.

Sayfanın Tüm Kodları :

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)
        {

        }
    }
}

Bir yorum

  1. İyi günler İsmail Bey,
    yazdırma konusu ile ilgili yazılarınızı okudum,güzel bir anlatım emeğinize sağlık. Ben yapmış olduğum program gereği listviewde bulunan verileri aşağıdaki kodlarla excel ortamına aktarıyorum ve çıktısını almak istiyorum. Ama bir türlü beceremedim. Yalnız program gereği excel sayfasının gözükmesini istemiyorum butona tıkladığımda direk yazdırmasını istiyorum. Yardımcı olursanız sevinirim.
    Excel ortamına aktardığım kodlar aşağıdadır
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Dim xla As Microsoft.Office.Interop.Excel.Application = New Microsoft.Office.Interop.Excel.Application
    xla.Visible = True
    Dim wb As Microsoft.Office.Interop.Excel.Workbook = xla.Workbooks.Add(Microsoft.Office.Interop.Excel.XlSheetType.xlWorksheet)
    Dim ws As Microsoft.Office.Interop.Excel.Worksheet = CType(xla.ActiveSheet, Microsoft.Office.Interop.Excel.Worksheet)
    Dim satir As Integer = 7
    Dim sutun As Integer = 1
    For Each item As ListViewItem In ListView1.Items
    ws.Cells(satir, sutun) = item.Text.ToString
    xla.Columns.Font.Size = 10
    For Each subitem As ListViewItem.ListViewSubItem In item.SubItems
    ws.Cells(1, 3) = “KÖŞEM MARKET”
    ws.Cells(1, 3).font.bold = True
    ws.Cells(2, 3) = “Kemal Paşa Mah. 128.Sk. Nu:1/C Serdivan SAKARYA”
    ws.Cells(3, 3) = “V.D:Gümrükönü”
    ws.Cells(3, 4) = “22291329516”
    ws.Cells(4, 3) = “TARİH :”
    ws.Cells(4, 4) = DateTime.Now.ToShortDateString()
    ws.Cells(5, 3) = “SAAT :”
    ws.Cells(5, 4) = DateTime.Now.ToLongTimeString
    ws.Cells(6, 3) = “FİŞ NU : ” + lblSayac.Text

    ws.Cells(satir, sutun) = subitem.Text.ToString
    ws.Cells(satir + 1, 4) = “TOPLAM TUTAR :” + ” ” + AlisVerisToplami.Text + ” TL.”
    sutun = (sutun + 1)
    Next
    sutun = 1
    satir = (satir + 1)
    xla.Columns.AutoFit()
    Next
    xla.Columns.Font.Name = “Times New Roman”
    ws.Range(“c1”).Font.Name = “Brush Script MT”
    End Sub

Bir cevap yazın

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