لطفا از تمام مطالب دیدن فرمایید.
نمایش کادر های محاوره ای(کنترل Print Dialog)
کنترل PrintDialog:
هربرنامه ای معمولا در قسمتی نیاز به امکان چاپ دارد. این نیاز می تواند به صورت نیاز به چاپ ساده ی یک متن و یا موارد پیشرفته تری مانند چاپ قسمتی از متن و یا صفحات مشخصی از آن باشد. درقسمت بعد به بررسی چگونگی چاپ یک متن ساده خواهیم پرداخت و نحوه ی استفاده از کلاسهای مربوط به چاپ درNET. رامشاهده خواهیم کرد.
یکی از کنترل هایی که درویژوال برای چاپ به کار می رود، کنترل PrintDialog است. این کنترل کار چاپ را انجام نمی دهد. بلکه به کاربراجازه می دهد چاپگری را برای چاپ انتخاب کرده وتنظیمات قبل از چاپ را درآن چاپگر انجام دهد. برای مثال کاربر می تواند دراین کادرجهت صفحه، کیفیت چاپ ویا محدوده موردنظر برای چاپ را تعیین کند. شما ازاین ویژگی ها درمثال بعدی استفاده نخواهید کرد، اما همانطور که درشکل زیرمشاهده می کنید تمام این قابلیت ها به وسیله کادر PrintDialog قابل دسترسی است.
همانند تمام کادرهایی که در بخشهای قبلی مشاهده کردید، کادرPrintنیز دارای دو دکمه OK و Cancel است. بنابراین تابع ShowDialog مربوط به این کادر هم مقدار OK.DialogResult ویا Cancel.DialogResultرا بر می گرداند و می تواند از دستور if برای بررسی نتیجه برگشت داده شده توسط کادر استفاده کنید.

خاصیتهای کنترل PrintDialog :
در جدول زیرلیستی از خاصیتهای پر کاربرد کنترل PrintDialog و نیز توضیح آنها آمده است:
AllowPrintTofile == مشخص می کند آیا در کادرگزینه Print To File فعال باشد یا نه ؟
AllowSelection == مشخص می کند درکادر، دکمه رادیویی Selectin فعال باشدیا نه؟
AllowSomePages == مشخص می کند در کادر، دکمه رادیویی Pages فعال باشد یا نه؟
Document ==مشخص کننده سندی است که برای چاپ استفاده می شود.
PrinterSettings == تنظیماتی که در کادر، برای چاپگر انتخابی اعمال می شود را نگهداری می کند.
PrintToFile ==مشخص می کند آیا گزینه Print to file انتخاب شده است یا نه؟
ShowHelp ==مشخص می کند آیا دکمه فرمان Help در کادر نمایش داده شود یا نه؟
ShowNetwork ==مشخص می کند دکمه فرمان Network در کادر Print نمایش داده شود یا نه؟
استفاده ازکنترل PrintDialog :
برای نمایش کادرPrint کافی است که تابع ShowDialog آن را فراخوانی کنید. به این صورت کادر Print همانند شکل زیر نشان داده خواهد شد. همانطور که پیشتر نیز گفتم کنترل PrintDialog فقط کادری را برای تنظیمات چاپ نمایش می دهد و هیچ متنی را نمی تواند چاپ کند. قطعه کد زیر برای نمایش کادر Print می تواندمورد استفاده قرار بگیرد:
کلاس PrintDocument :
قبل از این که تابع ShowDialog در کنترل PrintDialog را فراخوانی کنید، باید خاصیت Document کلاس PrintDialog را تنظیم کنید. این خاصیت مقداری از نوع کلاس PrintDocument دریافت می کند. کلاس PrintDocument می تواند تنظیمات چاپگر را دریافت کرده و سپس با توجه به آن نتظیمات، خروجی خود (که در حقیقت همان اطلاعات مورد نظر ما است) را برای چاپ به چاپگر می فرستد. این کلاس درفضای نام System .Drawing .Printing قرار دارد. پس بهتر است که قبل از استفاده از آن برای اینکه هر بارنام کامل این فضای نام را وارد نکنیم، با استفاده از راهنمای using آن را به برنامه اضافه کنیم.
خصوصیات کلاس PrintDocument :
قبل از ادامه بهتر است نگاهی به بعضی از خصوصیات مهم کلاس PrintDocument که در جدول زیر آمده اند داشته باشیم.
DefaultPageSettings == مشخص کننده ی تنظیمات پیش فرض چاپگر برای چاپ سند(اطلاعات) مورد نظر است.
DocumentName == مشخص کننده نامی است که هنگام چاپ سند نمایش داده می شود. همچنین این نام در کادر Print Status ودر لیست اسناد موجود در صف چاپ برای مشخص کردن سند نوشته می شود.
PrintController == محتوی شیئ از کلاس PrintController است که پروسه چاپ را مدیریت می کند.
PrinterSettings == مشخص کننده چاپگری است که برای چاپ این سند استفاده می شود.
چاپ یک سند :
متد Print از کلاس PrintDocument سندی را به وسیله چاپگر مشخص شده در خاصیت PrinterSettings چاپ می کند. هنگامی که این تابع را در برنامه فراخوانی کنید، هر بار که صفحه ای بخواهد به وسیله این تابع چاپ شود متد مربوط به رویدادPrintPage از کلاس PrintDocument نیز فراخوانی می شود. تابع Print به وسیله این متد مشخص می کند که کدام بخش از فایل باید در صفحه جاری چاپ شود. بنابراین قبل از اینکه بتواند متنی را چاپ کنید باید متدی را برای این رویداد ایجاد کنید. سپس در این متد باید یک صفحه از متن را به وسیله کلاس StreamReader از فایل خوانده و آن را به چاپگر بفرستید تا چاپ شود.
در بخش امتحان کنید زیر مشاهده خواهیم کرد که چگونه می توان محتویات یک فایل متنی را به وسیله کلاس PrintDocument چاپ کرد.
امتحان کنید: کار با کنترل PrintDialog
-
درمحیط ویژوال استودیو، پروژه Dialogs را باز کنید.
-
با استفاده از جعبه ابزار کنترل Button دیگری را بر روی فرم قرار داده و خاصیتهای آن را مطابق لیست زیر تنظیم کنید:
خاصیت Name را برابر با btnPrint قرار دهید.
خاصیت Anchor را برابر با Top’Right قرار دهید.
خاصیت Location را برابر با 367;128 قرار دهید.
خاصیت Text را برابر با Print قرار دهید.
-
در جعبه ابزار به قسمت Printing بروید وبر روی کنترل PrintDialog دو بار کلیک کنیدتا بر روی فرم قرار بگیرد. مشاهده خواهید کرد که این کنترل نیز همانند کادرهای قبلی، در پایان قسمت طراحی فرم قرار می گیرد.
-
به قسمت ویرایشگر کد بروید و با استفاده از راهنمای using فضای نامهای زیر را به برنامه اضافه کنید:
-
حال متغیرهایزیر را به صورت عمومی در ابتدای کلاس مربوط به فرم برنامه تعریف کنید:
-
به قسمت طراحی فرم برگردید وبر روی دکمه ی btnPrint دو بار کلیک کنید تا متد مربوط به رویداد کلیک آن ایجاد شود. سپس کد زیر را در این متد وارد کنید:
......................................................
نمایش کادر های محاوره ای(کنترل Print Dialog)
کنترل PrintDialog:
هربرنامه ای معمولا در قسمتی نیاز به امکان چاپ دارد. این نیاز می تواند به صورت نیاز به چاپ ساده ی یک متن و یا موارد پیشرفته تری مانند چاپ قسمتی از متن و یا صفحات مشخصی از آن باشد. درقسمت بعد به بررسی چگونگی چاپ یک متن ساده خواهیم پرداخت و نحوه ی استفاده از کلاسهای مربوط به چاپ درNET. رامشاهده خواهیم کرد.
یکی از کنترل هایی که درویژوال برای چاپ به کار می رود، کنترل PrintDialog است. این کنترل کار چاپ را انجام نمی دهد. بلکه به کاربراجازه می دهد چاپگری را برای چاپ انتخاب کرده وتنظیمات قبل از چاپ را درآن چاپگر انجام دهد. برای مثال کاربر می تواند دراین کادرجهت صفحه، کیفیت چاپ ویا محدوده موردنظر برای چاپ را تعیین کند. شما ازاین ویژگی ها درمثال بعدی استفاده نخواهید کرد، اما همانطور که درشکل زیرمشاهده می کنید تمام این قابلیت ها به وسیله کادر PrintDialog قابل دسترسی است.
همانند تمام کادرهایی که در بخشهای قبلی مشاهده کردید، کادرPrintنیز دارای دو دکمه OK و Cancel است. بنابراین تابع ShowDialog مربوط به این کادر هم مقدار OK.DialogResult ویا Cancel.DialogResultرا بر می گرداند و می تواند از دستور if برای بررسی نتیجه برگشت داده شده توسط کادر استفاده کنید.

خاصیتهای کنترل PrintDialog :
در جدول زیرلیستی از خاصیتهای پر کاربرد کنترل PrintDialog و نیز توضیح آنها آمده است:
AllowPrintTofile == مشخص می کند آیا در کادرگزینه Print To File فعال باشد یا نه ؟
AllowSelection == مشخص می کند درکادر، دکمه رادیویی Selectin فعال باشدیا نه؟
AllowSomePages == مشخص می کند در کادر، دکمه رادیویی Pages فعال باشد یا نه؟
Document ==مشخص کننده سندی است که برای چاپ استفاده می شود.
PrinterSettings == تنظیماتی که در کادر، برای چاپگر انتخابی اعمال می شود را نگهداری می کند.
PrintToFile ==مشخص می کند آیا گزینه Print to file انتخاب شده است یا نه؟
ShowHelp ==مشخص می کند آیا دکمه فرمان Help در کادر نمایش داده شود یا نه؟
ShowNetwork ==مشخص می کند دکمه فرمان Network در کادر Print نمایش داده شود یا نه؟
استفاده ازکنترل PrintDialog :
برای نمایش کادرPrint کافی است که تابع ShowDialog آن را فراخوانی کنید. به این صورت کادر Print همانند شکل زیر نشان داده خواهد شد. همانطور که پیشتر نیز گفتم کنترل PrintDialog فقط کادری را برای تنظیمات چاپ نمایش می دهد و هیچ متنی را نمی تواند چاپ کند. قطعه کد زیر برای نمایش کادر Print می تواندمورد استفاده قرار بگیرد:
کلاس PrintDocument :
قبل از این که تابع ShowDialog در کنترل PrintDialog را فراخوانی کنید، باید خاصیت Document کلاس PrintDialog را تنظیم کنید. این خاصیت مقداری از نوع کلاس PrintDocument دریافت می کند. کلاس PrintDocument می تواند تنظیمات چاپگر را دریافت کرده و سپس با توجه به آن نتظیمات، خروجی خود (که در حقیقت همان اطلاعات مورد نظر ما است) را برای چاپ به چاپگر می فرستد. این کلاس درفضای نام System .Drawing .Printing قرار دارد. پس بهتر است که قبل از استفاده از آن برای اینکه هر بارنام کامل این فضای نام را وارد نکنیم، با استفاده از راهنمای using آن را به برنامه اضافه کنیم.
خصوصیات کلاس PrintDocument :
قبل از ادامه بهتر است نگاهی به بعضی از خصوصیات مهم کلاس PrintDocument که در جدول زیر آمده اند داشته باشیم.
DefaultPageSettings == مشخص کننده ی تنظیمات پیش فرض چاپگر برای چاپ سند(اطلاعات) مورد نظر است.
DocumentName == مشخص کننده نامی است که هنگام چاپ سند نمایش داده می شود. همچنین این نام در کادر Print Status ودر لیست اسناد موجود در صف چاپ برای مشخص کردن سند نوشته می شود.
PrintController == محتوی شیئ از کلاس PrintController است که پروسه چاپ را مدیریت می کند.
PrinterSettings == مشخص کننده چاپگری است که برای چاپ این سند استفاده می شود.
چاپ یک سند :
متد Print از کلاس PrintDocument سندی را به وسیله چاپگر مشخص شده در خاصیت PrinterSettings چاپ می کند. هنگامی که این تابع را در برنامه فراخوانی کنید، هر بار که صفحه ای بخواهد به وسیله این تابع چاپ شود متد مربوط به رویدادPrintPage از کلاس PrintDocument نیز فراخوانی می شود. تابع Print به وسیله این متد مشخص می کند که کدام بخش از فایل باید در صفحه جاری چاپ شود. بنابراین قبل از اینکه بتواند متنی را چاپ کنید باید متدی را برای این رویداد ایجاد کنید. سپس در این متد باید یک صفحه از متن را به وسیله کلاس StreamReader از فایل خوانده و آن را به چاپگر بفرستید تا چاپ شود.
در بخش امتحان کنید زیر مشاهده خواهیم کرد که چگونه می توان محتویات یک فایل متنی را به وسیله کلاس PrintDocument چاپ کرد.
امتحان کنید: کار با کنترل PrintDialog
-
درمحیط ویژوال استودیو، پروژه Dialogs را باز کنید.
-
با استفاده از جعبه ابزار کنترل Button دیگری را بر روی فرم قرار داده و خاصیتهای آن را مطابق لیست زیر تنظیم کنید:
خاصیت Name را برابر با btnPrint قرار دهید.
خاصیت Anchor را برابر با Top’Right قرار دهید.
خاصیت Location را برابر با 367;128 قرار دهید.
خاصیت Text را برابر با Print قرار دهید.
-
در جعبه ابزار به قسمت Printing بروید وبر روی کنترل PrintDialog دو بار کلیک کنیدتا بر روی فرم قرار بگیرد. مشاهده خواهید کرد که این کنترل نیز همانند کادرهای قبلی، در پایان قسمت طراحی فرم قرار می گیرد.
-
به قسمت ویرایشگر کد بروید و با استفاده از راهنمای using فضای نامهای زیر را به برنامه اضافه کنید:
-
حال متغیرهایزیر را به صورت عمومی در ابتدای کلاس مربوط به فرم برنامه تعریف کنید:
-
به قسمت طراحی فرم برگردید وبر روی دکمه ی btnPrint دو بار کلیک کنید تا متد مربوط به رویداد کلیک آن ایجاد شود. سپس کد زیر را در این متد وارد کنید:
-
سپس متد زیر را در قسمت ویرایشگر کد وارد کنید:
-
حال می توانید عملکرد کدهای این قسمت را مشاهده کنید. بنابراین روی دکمه Start در نوار ابزار کلیک کنید تا برنامه اجرا شود.
-
درفرم اصلی برنامه روی دکمه ی Open کلیک کنید وفایلی را باز کنید تا محتویات آن در فرمنمایش داده شود. سپس برروی دکمه ی Print کلیک کنید تا کادر محاوره ای Print همانند شکل زیر نمایش داده شود. توجه کنید که در این کادر گزینه Print to file و همچنین قسمتهای Selection و Pages غیر فعال هستند. دلیل غیر فعال بودن این قسمتها به خاطر این است که قبل از فراخوانی تابع ShowDialog خاصیتهای AllowPrintToFile ، AllowSelection ، AllowSomePages را برابر با False قرار دادیم. اگر در سیستم خود بیش از یک چاپگر داشته باشید، همانند شکل زیر می توانید تعیین کنید که فایل باز شده به وسیله کدام چاپگر، چاپ شود.
-
روی دکمه Print در کادر کلیک کنید تا محتویات فایل چاپ شود.

چگونه کار می کند؟
یکی از مهمترین قسمتهای این برنامه، متد مربوط به رویداد کلیک دکمه ی btnPrint است. همانطور که مشاهده می کنید این متد را با تعریف یک شیئ از کلاس PrintDocument آغاز کردیم. عمل اصلی چاپ به وسیله این شیئ صورت می گیرد:
سپس خاصیت DocumentName مربوط به این شیئ را تنظیم کردیم. اگر همزمان چند برنامه بخواهند از چاپگر استفاده کنند، سند های آنها در یک صف چاپ قرار می گیرد. نامی که در این قسمت وارد می کنیم، برای مشخص کردن سند مربوط به برنامه ما در صف چاپ به کار می رود.
در قسمت بعد، به تنظیم بعضی از خاصیتهای کنترل PrintDialog می پردازیم. دراین بخش فقط می خواهیم یک عمل چاپ ساده را انجام دهیم، به همین دلیل بهتر است قسمتهای Print to file و همچنین Selection و Pages را در کادر Print غیر فعال کنیم. برای این کار کافی است خاصیتهای مربوط به آنها را برابر با false قرار دهیم:
قبل از نمایش کادرPrint باید مشخص کنید تنظیماتی که کاربر دراین کادر مشخص می کند، برای چاپ چه سندی به کار می روند. برای این کار باید خاصیت Document کنترل PrintDialog را برابر با شیئ PrintDocument ای قرار دهید که نشان دهنده ی سند مورد نظر است.
حال می توانیم کادر Print را نمایش دهیم. همانند کادرهای قبلی، برای این کار کافی است متد ShowDialog مربوط به این کنترل را فراخوانی کنیم. این متد نیز مقداری را از نوع DialogResult بر می گرداند. اگر کاربر در کادر روی دکمه ی Print کلیک کند، تابع OK . DialogResult و اگر کاربر روی دکمه ی Cancel کلیک کند، تابع Cancel . DialogResult را بر می گرداند. همانند قسمتهای قبل با استفاده از دستور if نتیجه را بررسی می کنیم.
اگر کاربر در کادر روی دکمه Print کلیک کند باید محتویات فایلی که آدرس آن در متغییر strFileName قرار دارد را چاپ کنیم. بنابراین ابتدا یک شیئ از نوع StreamReader تعریف می کنیم. این شیئ برای دسترسی به محتویات یک فایل مورد استفاده قرار می گیرد و هنگام تعریف آن باید آدرس فایل مورد نظر را به آن بفرستیم. پس متغییر strFileName که حاوی آدرس فایل است را به عنوان پارامتر به این شیئ ارسال می کنیم.
سپس باید فونت و اندازه متن را برای چاپ مشخص کنیم. به همین علت شیئ را از نوع Font تعریف کرده و فونت Arial و اندازه 10 را برای آن تعریف می کنیم.
همانطور که در قسمتهای قبل گفتیم، هنگامی که یک رویداد به وسیله یک کلاس رخ می دهد، تعدادی از توابع برای پاسخ دادن به آن رویداد اجرا می شود. برای مثال در قسمتهای قبل مشاهده کردید با دو بار کلیک بر روی یک کنترل Button در زمان طراحی، متدی ایجاد می شد و این متد هنگامی که کاربر روی آن کنترل در طی اجرا برنامه کلیک می کرد، توسط برنامه فراخوانی می شد. برای بررسی دقیق تر این موردباید بگویم که هر رویداد شامل لیستی از توابع است. هنگامی که رویداد رخ می دهد، کلاس مربوطه تمام توابع موجود در در لیست مربوط به آن رویداد را فراخوانی می کند. برای مثال می توانید چندین متد تعریف کنیدو آن ها را به رویداد کلیک یک Button اضافه کنید. به این ترتیب هنگامی که بر روی آن دکمه کلیک شود تمام متد هایی که به آن اضافه کرده اید اجرا خواهند شد.
در قسمت قبل گفتم که کلاس PrintDocument برای این که تشخیص دهد چه متنی را باید چاپ کند، درهر صفحه رویداد PrintPage را فراخوانی می کند. به عبارت دقیق تر باید بگوییم که این کلاس در هر مرحله تمام توابعی که در لیست رویداد PrintPage هستند را اجرا می کند. پس باید متدی را ایجاد کنیم وآن را به لیست متد های رویداد PrintPage اضافه کنیم. برای این کار متد prtPage را ایجاد کرده وآن را به وسیله دستور زیر به رویداد PrintPage اضافه کنیم:
حال باید چاپگر مورد استفاده برای چاپ و همچنین تنظیمهای آن را، برای شیئ PrintDocument مشخص کنیم. برای این کار کافی است تنظیمهایی که کاربر در کادرPrint مشخص کرده است را به این شیئ بفرستیم. تنظیم های کادر PrinterSettings . objPrintDocument را برابر با آن قرار دهیم.
حال باید متد Print را فراخوانی کنیم. این متد رویداد PrintPage را احضار می کند و احضار این رویداد نیز باعث می شود که کد درون متد prtPage اجرا شود.
نکته دیگری که در اضافه کردن یک متد به یک رویداد باید در نظر داشته باشیداین است که متدهایی که می توانند به رویداد Print Page اضافه شوند باید دارای ساختار خاصی باشند. این متدها نباید مقداری را برگردانند( مقدار برگشتی آنها باید به صورت void تعریف شود). همچنین باید دو پارامتررا از ورودی دریافت کنند: اولین پارامتر مشخص کننده شیئ است که این رویداد را فراخوانی کرده است. نام این پارامتر sender و نوع آن از نوع کلاس Object خواهد بود. دومین پارامتر باید شیئ از نوع کلاس PrintPageEventArgs باشد. این پارامتر حاوی اطلاعاتی در مورد صفحه ای که باید چاپ شود خواهد بود. بنابراین متد prtPage که باید به وسیله رویداد PrintPage فراخوانی شود مشابه زیر خواهد بود:
حال به بررسی کد هایی می پردازیم که در داخل این متد باید اجرا شوند. ابتدا باید تعدادی متغیر تعریف کنیم و مقادیر آنها را تنظیم کنیم. توجه کنید که مقادیر متغییرهای sngLeftMargin و sngTopMargin به وسیله مقادیر موجود در پارامتر PrintPageEventArgs که به متد ارسال می شود تنظیم خواهد شد.
حال باید مشخص کنیم که در هر صفحه چند خط می تواند چاپ شود. برای این کار باید ارتفاع قابل چاپ در صفحه را بر ارتفاع فونت (ارتفاع هر خط ) تقسیم کنیم. برای دسترسی به ارتفاع قابل چاپ در صفحه می توانیم از خاصیت Height . MarginBounds در شیئ e از کلاس PrintPageEventArgs استفاده کنیم (این شیئ، به عنوان پارامتربه متد فرستاده شده است).
ارتفاع قابل چاپ در صفحه در کادر PrintDialog تنظیم شده و در خاصیت PrinterSettings قرار می گیرد. همانطور که مشاهده کردیددر کدهای قبلی این خاصیت را درخاصیت PrinterSettings مربوط به شیئ objPrintDocument قرار دادیم. شیئ objPrintDoument هم هنگامی که بخواهد رویداد Print Page را فراخوانی کند، این مقدار را به وسیله شیئ از کلاس Print PageEventArgs به متدهای فراخوانی شده می فرستد.
پس به این ترتیب متغییر sngLinesPerPage حاوی تعداد خطوطی خواهد بود که در هر صفحه قرار می گیرد. حال باید محتویات فایل را خط به خط خوانده و در صفحه برای چاپ قرار دهیم. برای این کار با استفاده از یک حلقه، متن داخل فایل را خط به خط در صفحه وارد می کنیم. اجرای این حلقه تا زمانی ادامه پیدا می کند که یا متن داخل فایل تمام شود وبه انتهای فایل برسیم و یا تعداد خطهایی که در صفحه قرار داده ایم برابر با حداکثر تعداد خطهایی شود که می توانیم در یک صفحه وارد کنیم، به عبارت دیگر صفحه پر شود. بنابراین ابتدا اولین خط را خوانده و در متغییر strLine قرار می دهیم و سپس حلقه را اجرا می کنیم:
قبل ازاینکه متنی رادر صفحه قراردهیم باید مشخص کنیم که موقعیت عمودی متن در صفحه چقدراست. به عبارت دیگر باید فاصله متن را از بالای صفحه مشخص کنیم. برای تعیین فاصله متن از بالای صفحه باید اندازه قسمت سفید بالای صفحه را با ارتفاع تعداد خطهایی که تا کنون چاپ شده اندجمع کنیم. برای محاسبه ارتفاع تعداد خطهایی که تا کنون چاپ شده اند نیز باید حاصل ضرب تعداد خطهایی که در صفحه چاپ شده اند در ارتفاع هر خط را به دست آوریم:
برای اینکه واقعا متن را به چاپگر بفرستیم باید از تابع DrawString در کلاس Graphics استفاده کنیم. کلاس Graphics به صورت یکی از خاصیتهای کلاس PrintPageEventArgs به این متد فرستاده می شود. پارامترهایی که تابع DrawString دریافت می کند عبارتند از: متنی که باید چاپ شود، فونت متنی که باید چاپ شود، رنگ متنی که باید چاپ شود(این رنگ باید از شمارنده ی Brushes انتخاب شود)، فاصله متن از سمت چپ صفحه، فاصله متن از بالای صفحه، و قالب متن برای چاپ. دراین قسمت قالبی برای متن مشخص نمی کنیم بلکه یک شیئ جدید از کلاس StringFormat ایجاد کرده و آن را به تابع می فرستیم.
به این ترتیب یک خط از متن را چاپ کرده ایم، پس یک واحد به تعداد خطها اضافه می کنیم:
حال بررسی می کنیم که صفحه پر شده است یا نه. اگر صفحه پر نشده بود خط دیگری را از فایل خوانده و در متغییر strLine قرار میدهیم تا حلقه با خط جدید ادامه پیدا کند:
بعد از اینکه یک صفحه کاملا پر شد، برنامه از حلقه خارج می شود. حال باید مشخص کنیم که صفحه دیگری هم باید چاپ شود و یا اینکه متن داخل فایل تمام شده است. اگر متن داخل فایل تمام شده بود باید خاصیت HasMorePages را برابر با false قرار دهیم که تابع Print بار دیگر باعث فراخوانی شدن رویداد PrintPage نشود. اما اگر متن تمام نشده بود، کافی است که برای چاپ ادامه ی متن، خاصیت HasMorePage را برابربا true قرار دهیم. به این ترتیب تابع Print بار دیگر رویداد PrintPage را فراخوانی می کند تا متد prtPage بتواند صفحه بعد را چاپ کند.
هنگامی که تمام متن داخل فایل به چاپگر فرستاده شد، وظیفه متد Print تمام شده است و برنامه به ادامه کدهای موجود در متد Click _ btnPrint بر می گردد. تنها کاری که باید در ادامه انجام دهیم این است که فضای اشغال شده به وسیله اشیای مربوط به چاپ و نیز اشیای مربوط به خواندن از فایل آزاد کنیم.
برچسبها:
تاريخ : چهارشنبه 12 شهریور 1393 | 08:05 | نویسنده : کـــــوچـــــولـــــو |
ارسال نظر(0)
لطفا از دیگر مطالب نیز دیدن فرمایید













