C# ile Formu Yazdırmak

12 Mayıs 2009 – 13:11

Yazımızda üzerinde çalışmakta olduğunuz yada , belirli bir sorgu sonucunda kullanıcıya aktardığınız formu nasıl yazdırabileceğimizi anlatıyor olacağız.
İlk olarak formumuza bir tane buton ve printDocument nesnesi ekleyelim. Bunu dışında çıktıda görmek istediklerinizi ekleyebilirsiniz. Formun tasarım işlemi tamamlandıktan sonra formumuzun görüntüsünü resme dönüştürme işlemi ile devam edelim.

[C#]

[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
private 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);
IntPtr dc1 = mygraphics.GetHdc();
IntPtr dc2 = memoryGraphics.GetHdc();
BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);
}

Yukarıdaki fonksiyon ile formumuzun görünümünü Bitmap nesnesi olan memoryImage değişkenine atamış olduk. Şimdide butonumuza tıklandığında eklemiş olduğumuz printDocument nesnesinin print fonksiyonundan yararlanacağız.

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

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

Bu şekilde formumuzun çıktısını almış olduk.

Bookmark and Share
  1. 8 Responses to “C# ile Formu Yazdırmak”

  2. bu fonksiyonu çalıştıramadım yardımcı olurmusunuz

    By Emrah Arslan on May 30, 2009

  3. nerede takıldığını yada aldığın hata mesajını bildirirsen yardımcı olabilirim

    By admin on May 30, 2009

  4. örneğin benim formum ekrana sığmıyor 800*600 çözünürlük bir bilgisayarda scrollbar ekledim fakat yazdırdıgımda sadece ekranda gözüken kısmı yazdırıyor formun gözüken kısmı formun hepsini yazdırmak için ne yapmalıyım..ekrana sığmayan yerleride yazdırmak istiyorum.

    By Emrah Arslan on Haz 2, 2009

  5. bizim yadığımız uygulamada ekran görüntüsün aldığı için formun görünmeyen kısmını algılamaz.

    BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376); bu kodu

    BitBlt(dc2, 0, 0, 800, 600, dc1, 0, 0, 13369376);

    olarak değiştirirsen mesela form dışında kalan yerleride alır fakat formu görüntülemez böyle durumlarda çıktı alınacak verileri konum ve değer olarak sen hazırlamalısın. Örneğin :
    e.Graphics.DrawImage(memoryImage, 0, 0); yerine

    Font font = new Font(”Verdana”, 11) ;
    e.Graphics.DrawString (”İsim :”, font, Brushes.Red, 20,30);
    e.Graphics.DrawString (txtAdi.text, font, Brushes.Red, 50,30,yPozisyon);
    20,30 yada 50,30 da ilk değer ile ifadenin soldan bırakacağı boşluk, 30 lar ilede yukardan bırakacağı boşluğu belirleyebilirsin.

    By Tahir MUTLU on Haz 2, 2009

  6. teşekkür ederim bilgileriniz için dediğiniz gibi yapmaya çalışacağım.

    By Emrah Arslan on Haz 2, 2009

  7. problem çıkarsa tekrar iletişime geçebilirsin ;) iyi çalışmalar

    By Tahir MUTLU on Haz 2, 2009

  8. Tahir bey ilk baştaki kodları programda uyguladım ancak DllImport kısmında hata veriyo anladıgım kadarıyla bu program formdaki bütün textboxlar listboxlar formun üzerinde ne varsa hepsinin çıktısını almaya yarıyo bunun sadece örneğin datagridview deki görüntüyü yazdırma gibi bi şansımız yok mu??

    By Yasin Gökrem on Tem 26, 2009

  9. datagridview deki görüntüyü yazdırma konusunda en esnek ve başarılı örnek http://www.codeproject.com/KB/grid/PrintDataGridView.aspx
    oldukça güzel yazılmış bir class ı kullanıyorsunuz sadece

    By Mert Erkol on Ağu 6, 2009

Post a Comment

Subscribe without commenting