C# ile Formu Yazdırmak
12 Mayıs 2009 – 13:11Yazı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.


8 Responses to “C# ile Formu Yazdırmak”
bu fonksiyonu çalıştıramadım yardımcı olurmusunuz
By Emrah Arslan on May 30, 2009
nerede takıldığını yada aldığın hata mesajını bildirirsen yardımcı olabilirim
By admin on May 30, 2009
ö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
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
teşekkür ederim bilgileriniz için dediğiniz gibi yapmaya çalışacağım.
By Emrah Arslan on Haz 2, 2009
problem çıkarsa tekrar iletişime geçebilirsin
iyi çalışmalar
By Tahir MUTLU on Haz 2, 2009
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
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