سلام و درود بر کاربران سایت پروگرم 98 …
سلام بر تمامی برنامه نویسان عزیز . در این مطلب آموزشی ، نحوه ی پرینت گرفتن از فرم برنامه با زبان برنامه نویسی سی شارپ رو یاد می گیرید.البته در این آموزش ، یاد می گیرید که فرم برنامتون رو بدون Form Header and Form borders پرینت بگیرید که خودش یک مزیت به حساب میاد چون نیازی نیست که کاربر دکمه های خروج و ماکسیمایز و یا بردرهای فرم رو در هنگام پرینت گرفتن مشاهده کنه.
ابتدا یک پروژه ی جدید در ویژوال استودیو ایجاد کنید.
خب ابتدا کنترل های DataGridView و Button و PrintPreviewDialog و PrintDocument رو به فرم برنامتون اضافه کنید.
DataGridView برای نمایش اطلاعات است و Button هم یک دکمه است که کاربر با کلیک کردن بر روی آن می تواند Print Preview را مشاهده کند.
PrintPreviewDialog و PrintDocument هم در فرم نمایش داده نمی شوند و برای پرینت گرفتن هستند و درپایین قسمت طراحی (design) برنامه قرار می گیرند.
حالا باید دیتا گرید ویویی که درون فرم اضافه کردید رو با اطلاعاتی پر کنید.کد زیر می تواند به شما کمک کند (دقت کنید که این کد را باید برای رویداد Load فرم بنویسید):
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Country",typeof(string)) });
dt.Rows.Add(1, "ماری", "آمریکا");
dt.Rows.Add(2, "علی", "ایران");
dt.Rows.Add(3, "سوزان", "فرانسه");
dt.Rows.Add(4, "سعید", "ایران");
this.dataGridView1.DataSource = dt;
برای اطلاعات بیش تر درباره ی دیتا گرید ویو و DataTable و افزودن اطلاعات به دیتا گرید ویو پیشنهاد میکنم این مطلب را مشاهده کنید.
پس از با استفاده از کد زیر ، یک Bitmap object ایجاد کنید:
سپس در رویداد کلیک دکمه ، کد های زیر را وارد کنید:
Panel panel = new Panel();
this.Controls.Add(panel);
//Create a Bitmap of size same as that of the Form.
Graphics grp = panel.CreateGraphics();
Size formSize = this.ClientSize;
bitmap = new Bitmap(formSize.Width, formSize.Height, grp);
grp = Graphics.FromImage(bitmap);
//Copy screen area that that the Panel covers.
Point panelLocation = PointToScreen(panel.Location);
grp.CopyFromScreen(panelLocation.X, panelLocation.Y, 0, 0, formSize);
//Show the Print Preview Dialog.
printPreviewDialog1.Document = printDocument1;
printPreviewDialog1.PrintPreviewControl.Zoom = 1;
printPreviewDialog1.ShowDialog();
شرح کدها:
ابتدا به وسیله ی کدنویسی یک کنترل پنل ساخته می شود.سپس آبجکتی از کلاس Graphic ساخته شد و به پنل نسبت داده شد و پس از آن در کد this.ClientSize که طول و عرضش برابر انازه ی فرم منهای بردر و هدر است ، اندازه ی فرم درون formSize ریخته می شود و سپس یک Bitmap ساخته می شود که Width آن برابر formSize و Height آن برابر formSize می باشد.
سپس grp که ساخته شده بود ، به bitmap نسبت داده شد.
سپس کد زیر را اضافه کنید:
{
//Print the contents.
e.Graphics.DrawImage(bitmap, 0, 0);
}
یک 2 نظر
aliali3000
PrintPage یک رویداد هست و اگر printDocument رو درون برنامه تون اضافه کردید باید رویداد PrintPage برای printDocument باشه.
sara
سلام وقت بخیر.
سپاس از توضیحاتتون.
یه سوال داشتم.
private void PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//Print the contents.
e.Graphics.DrawImage(bitmap, 0, 0);
}
این کد که در اخر ذکر شده باید تو دکمه نوشته بشه یا بصورت یک تابع مجزا؟
من هر دو رو امتحان کردم برای “grafics” تو سطر اخر ارور میاره
فضای نامی چیزی نیاز داره؟
میشه لطفا بگید چطور این ارور رو رفع کنم؟
واینکه این کد برای پیش نمایش چاپ فرم هست؟
ممنون میشم پاسخ بدید