PDA

View Full Version : سوال: پرینت گرفتن از کل فرم با تمام اطلاعات داخل فرم



forodo
یک شنبه 26 مرداد 1393, 17:11 عصر
سلام
من با کدهای زیر از فرم پرینت می گیرم ولی بعضی از فرمهام که کامل پیدا نیست و با Scroll بالا و پایین می شه فقط اون قسمتی که در حال نمایش هست رو پرینت می گیره.
چیکار می تونم بکنم که تمام فرم رو در اون حالت پرینت بگیره؟
با تشکر
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
PrintFromForm PFF = new PrintFromForm();
PFF.pprriinntt(this, printDocument1, e);
}
public void pprriinntt(Form f, PrintDocument pd, PrintPageEventArgs e)
{
Bitmap b = new Bitmap(f.Width, f.Height);
int newWidth = (int)pd.DefaultPageSettings.PrintableArea.Width;
int newHeight = (int)pd.DefaultPageSettings.PrintableArea.Height;
f.DrawToBitmap(b, new Rectangle(0, 0, f.Width, f.Height));
e.Graphics.DrawImage(b, new Rectangle(0, 0, newWidth, newHeight), new Rectangle(0, 0, b.Width, b.Height), GraphicsUnit.Pixel);
}

private void btnPrint1_Click(object sender, EventArgs e)
{
PrintFromForm PFF = new PrintFromForm();
PFF.pprriinntt(this, printDocument1, printDialog1, false);
}
public void pprriinntt(Form f, PrintDocument dp, PrintDialog p, bool b)
{
foreach (Control ctrl in f.Controls)
{
if (ctrl.GetType().Name.ToString() == "Button")
{
ctrl.Visible = false;
}
}
f.FormBorderStyle = FormBorderStyle.None;
p.ShowDialog();
dp.Print();
if (b)
{
f.Close();
}
else
{
foreach (Control ctrl in f.Controls)
{
if (ctrl.GetType().Name.ToString() == "Button")
{
ctrl.Visible = true;
}
}
f.FormBorderStyle = FormBorderStyle.FixedSingle;
}
}

khokhan
یک شنبه 26 مرداد 1393, 21:22 عصر
چیکار می تونم بکنم که تمام فرم رو در اون حالت:لبخند: پرینت بگیره؟:متفکر:

شاید این نمونه خیلی ابتدایی باشه ولی خیلی جالبه یه نگاه بنداز ضرر نداره:لبخند:

forodo
دوشنبه 27 مرداد 1393, 12:51 عصر
شاید این نمونه خیلی ابتدایی باشه ولی خیلی جالبه یه نگاه بنداز ضرر نداره:لبخند:
ممنون
ولی من الان دیگه نمی تونم همه کنترلهام رو داخل Panel بندازم.
بدجوری به هم می ریزه.
چطوری می تونم همینطوری که هست از کل فرم پرینت یا عکس بگیرم؟

plus
دوشنبه 27 مرداد 1393, 13:30 عصر
اگه فقط فرم Scroll خورده، میتونید عکس اول رو که میگیرید، فرم رو Scroll کنید (با کد البته) و عکس بدی رو بگیرید و عکس ها رو به هم بچسبونید.اگه Scroll خیلی طولانی باشه ممکنه به بیشتر از دو عکس نیاز باشه...
ولی در کل کاری که میخواین بکنین و فرم رو به یک عکس تبدیل کنید و در نهایت Print کنید روش مطمئن و منطقی ای نیست.برای مثال فرض کنید مشکل Scroll رو هم حل کردین.اگه TextBox ی داشته باشین که متنش از اندازش بیشتر باشه کل متن در عکس نمایش داده نمیشه...
روش منطقی میتونه استفاده از ابزارهای ساخت گزارش و ایجاد گزارش به صورت Dynamic بر اساس کنترل/داده های ی موجود روی فرم باشه که خوب موضوع ساده ای نیست.

forodo
سه شنبه 28 مرداد 1393, 00:41 صبح
اگه فقط فرم Scroll خورده، میتونید عکس اول رو که میگیرید، فرم رو Scroll کنید (با کد البته) و عکس بدی رو بگیرید و عکس ها رو به هم بچسبونید.اگه Scroll خیلی طولانی باشه ممکنه به بیشتر از دو عکس نیاز باشه...
ولی در کل کاری که میخواین بکنین و فرم رو به یک عکس تبدیل کنید و در نهایت Print کنید روش مطمئن و منطقی ای نیست.برای مثال فرض کنید مشکل Scroll رو هم حل کردین.اگه TextBox ی داشته باشین که متنش از اندازش بیشتر باشه کل متن در عکس نمایش داده نمیشه...
روش منطقی میتونه استفاده از ابزارهای ساخت گزارش و ایجاد گزارش به صورت Dynamic بر اساس کنترل/داده های ی موجود روی فرم باشه که خوب موضوع ساده ای نیست.
یعنی منظور شما اینه که کلاً گزارش گیری انجام بدم؟
الان به این نتیجه رسیدم که وقتی طرف دکمه پرینت رو زد اندازه فرم رو به اندازه ای که می خوام تبدیل کنم و وقتی عمل پرینت یا همون عکس گرفتنم تموم شد دوباره فرم رو به حالت قبلی برگردونم. که یعنی یک لحظه فرم بزرگ و کوچک می شه.
ولی می خوام با گزارش گیری این کار رو انجام بدم که اونم یاد بگیرم و فکر کنم خیلی تمیزتر هم درمیاد.

khokhan
سه شنبه 28 مرداد 1393, 01:20 صبح
ممنون
ولی من الان دیگه نمی تونم همه کنترلهام رو داخل Panel بندازم.
بدجوری به هم می ریزه.
چطوری می تونم همینطوری که هست از کل فرم پرینت یا عکس بگیرم؟
لزومی نداره حتما پانل استفاده کنی :لبخند:
می تونستین کد رو وارونه کنین ..... !!! یعنی به جای پنل کل فرم رو یکجا در نظر بگیرین ... به عبارتی همون کار رو بافرم انجام بدین ......!!!! فرمی که پنل نداره
اینطوری :

forodo
سه شنبه 28 مرداد 1393, 10:07 صبح
لزومی نداره حتما پانل استفاده کنی :لبخند:
می تونستین کد رو وارونه کنین ..... !!! یعنی به جای پنل کل فرم رو یکجا در نظر بگیرین ... به عبارتی همون کار رو بافرم انجام بدین ......!!!! فرمی که پنل نداره
اینطوری :
این اندازه A4 عکس می گیره.
چون من با اون کدای پرینت می تونم کل فرم رو تو اندازه برگه A4 بکشه و کل برگه رو پر کنه. می خوام بدونم اینم همونطوریه؟

plus
سه شنبه 28 مرداد 1393, 12:30 عصر
یعنی منظور شما اینه که کلاً گزارش گیری انجام بدم؟
الان به این نتیجه رسیدم که وقتی طرف دکمه پرینت رو زد اندازه فرم رو به اندازه ای که می خوام تبدیل کنم و وقتی عمل پرینت یا همون عکس گرفتنم تموم شد دوباره فرم رو به حالت قبلی برگردونم. که یعنی یک لحظه فرم بزرگ و کوچک می شه.
ولی می خوام با گزارش گیری این کار رو انجام بدم که اونم یاد بگیرم و فکر کنم خیلی تمیزتر هم درمیاد.
خوب شاید روش صحیحش استفاده از ابزارهای گزارش گیری باشه چون ابزارهای گزارش گیری سیستم Layout (چینش و نمایش داده ها) شون بر اساس اندازه ثابت کاغذ و بدون Scroll هست (بر خلاف فرم).
در این مورد، طبیعتا یک راه این هست که گزارش رو به صورت دستی طراحی کنید و اطلاعات رو از فرم به گزارش انتقال بدین.این روشی هست که اگرچه شاید روش پر کاری به نظر بیاد ولی اگه میخواین وقت زیادی صرف نکنید مناسب ترین روش هست.
اگر هم بخوایین گزارش به صورت خودکار از روی فرم تولید بشه، امکانش وجود داره ولی ساخت و تکمیل یک چنین سیستمی نیاز به دانش بالایی داره و زمان بر هست.