خیلی وقتها
بعضیها از VB 6.0 یاد میکنند و به این فکر میکنند که ایجاد اشکال ساده
هندسی و همچنین پرینت کردن یک فرم با محتویاتش در آن چقدر ساده بود. با
ورود Visual Studio .NET 2002 کمی تغییر در روند طراحی نرم افزارها ایجاد
شد. یکی از این تغییراتی که کمی بیش از بقیه به چشم میآمد عدم وجود
امکاناتی برای رسم اشکال هندسی و همچنین پرینت کردم محتویات یک فرم به
سادگی فراخوانی ()Form1.print بود.
برای حل این مشکل تیم
نرمافزاری مایکروسافت اقدام به ایجاد بستهای تحت عنوان Visual Basic
Power Pack در نسخه های
.NET نموده است. با استفاده از
این بسته که هم اکنون نسخه
3.0 آن به همراه Visual Studio .NET 2010 ارائه شده
است میتوان به راحتی تمام اعمال فوق را انجام داد.
با نصب این نسخه
در قسمت ToolBox ویژوال استادیو، جبعه ابزاری به صورت زیر نمایان می شود:

تصویر 1. نمای کلی از جعبه ابزار Visual Basic Power Pack
این جعبه ابزار
دارای 5 کامپوننت است. در این مقاله کامپوننتهای فوق را مورد بررسی قرار
میدهیم.
کامپوننتهای
هندسی
در جعبه ابزار
Visual Basic Power Pack، سه کامپوننت برای رسم تصاویر هندسی در نظر گرفته
شده است. مزیت این کامپوننتها نسبت به روش رسم اشکال توسط
+GDI / GDI در این است که برنامهنویس در زمان
طراحی قادر به مشاهده کامل واسط کاربری بوده و میتواند توسط پنجره خصوصیات
IDE تمامی تنظمیات را با سرعت و دقت بالا انجام دهد.
آن دسته از
برنامهنویسان که از فضا نام System.Drawing برای ایجاد اشکالی این چنینی
استفاده کردهاند قطعاً با سختی آن روش برای کار آشنا هستند. ابتدا باید
شئای از Graphic ایجاد کرد. نوع قلم را تعیین کرد. مختصات را به صورت دستی
باید ست نمود و ...
یکی دیگر از
مزایای این اشکال، امکان ایجاد مدل پر کردن داخل آنها فقط و فقط با استفاده
از تنظیم یک خصوصیت در پنجره خصوصیات است. همچنین اشکالی که این چنین ایجاد
میشود «در حالت طراحی» رویدادهای Click و Double Click و ... را نیز
پشتیبانی میکنند. برای ایجاد چنین امکانی با مدل قبلی «کد نویسی به منظور
ایجاد اشکال هندسی» کمی مشکل بود.
نکته مهم دیگر در مورد این اشکال گرافیکی این است که دیگر نیازی به Render
کردن آنها در زمان تغییر اندازه و حالت فرم نیست. NET. این عمل را به خوبی
برای برنامه نویس انجام میدهد و نیازی به نگرانی در مورد آن نیست. برای
مثال باید از کدهای زیر به منظور رسم یک دایره در زمان اجرا استفاده کرد:
Graphics gr;
gr = this.CreateGraphics();
gr.DrawEllipse(new
Pen(Color.Black,
2), 10,
10, 100,
100);
حال باید برای زمانی
که فرم تغییر اندازه و یا تغییر حالت میدهد نیز در کدنویسی انجام دهیم.
برای این منظور در رویداد Paint کدنویسی انجام میگیرد.
کنترل PrintForm
برای چاپ محتویات یک فرم در زمان اجرا، بدون در نظر گرفتن PrintForm،
روشهای متعددی وجود دارد. یکی از این روشها ایجاد یک تصویر JPG از فرم مد
نظر و سپس چاپ آن میباشد. روش دیگر ایجاد شئ گرافیکی از فرم و تک تک اعضای
آن در زمان اجرا میباشد. روشهای فوق نیازمند کدنویسی زیادی میباشند و
برنامه نویسی باید آشنایی نسبی با کتابخانه +GDI داشته باشد. به عنوان مثال
میتوانید با مراجعه به آدرسهای زیر نحوه انجام دو روش فوق را مطالعه
کنید:
http://www.c-sharpcorner.com/UploadFile/srajlaxmi/PrintingWindowsForm01182008021239AM/PrintingWindowsForm.aspx
http://www.c-sharpcorner.com/UploadFile/mgold/HowToPrintingFormControlsinCSharpand.NET11212005063649AM/HowToPrintingFormControlsinCSharpand.NET.aspx
اما با به
کارگیری کامپوننت PrintForm میتوان به راحتی در زمان اجرا محتویات یک
پنجره را برای چاپگر ارسال نمود. این کامپوننت از نسخه موجود در VB 6.0
بهینه تر شده است و قابلیت کار با مجموعه Printerها را نیز دارد. پس از
قرار دادن یک نمونه از این کامپوننت بر روی فرم میتوان به راحتی با
فراخوانی متد ()Print آن، فرم را چاپ نمود. برای چاپ توسط این متد
پارامترهای متعددی وجود دارد. در ادامه آنها را بررسی میکنیم. برای
تست این متد از فرمی به صورت زیراستفاده می کنیم:
.jpg)
تصویر 2. فرم نمونه
در این فرم 9 عدد دکمه وجود دارد. به دلیل عدم
وجود فضا برای جای دادن تمامی دکمهها فرم به صورت اسکرول دار شده است.
اکنون مشاهده میکنید که چگونه با استفاده از متد ()Print خروجیهای
متفاوتی میتوان بدست آورد. اولین حالت فراخوانی متد ()Print با استفاده از
سربارگذاری اول آن میباشد:
printForm1.Print();
توجه داشته باشید که کامپوننت
PrintForm در Component
Tray قرار میگیرد. لذا شما بر روی فرم چیزی مشاهده نخواهید کرد. با به
کارگیری این متد، محدوده قابل مشاهده از فرم بدون Border فرم «منظور کناره
های فرم و نوار عنوان است» چاپ میشود.
.jpg)
خروجی نمونه 1.
اما اگر از سربارگذاری دوم استفاده کنید، برای
چاپ فرم از امکانات بیشتری برخوردار خواهید بود. دومین سربارگذاری این فرم
دارای 2 پارامتر است. پارامتر اول به فرمی که قرار است چاپ شود
اشاره میکند. اگر قصد دارید از فرم جاری پرینت تهیه کنید به سادگی از کلمه
کلیدی this استفاده کنید. اما اگر قصد دارید از درون فرم جاری، فرم دیگری
را برای پرینت ارسال کنید باید یک نمونه از فرم مذکور را در پارامتر اول
قرار دهید. توجه داشته باشید که نمونه مذکور باید نمایان «خصوصیت
Visible برابر true» و
همچنین دارای Focus باشد.
پارامتر دوم در این سربارگذاری نحوه چاپ فرم
را بیان میکند. برای این پارامتر از ثوابت زیر میتوانید استفاده کنید:
ClientAreaOnly: این گزینه که حالت پیشفرض
در سربارگذاری اول نیز میباشد، فقط از محدوده داخلی فرم تعیین شده بدون در
نظر گرفتن Border فرم پرینت میگیرد.
Scrollable: این حالت برای زمانی که
اطلاعات بیشتری نسبت به سایز فرم در فرم جای داده شدهاند مفید است. مانند
مثال فوق که تعدادی از دکمهها در تصویر وجود ندارد. بابه کارگیری این
گزینه، تمامی فرم چاپ میشود. خروجی این حالت برای فرم فوق به صورت زیر
است:
.jpg)
خروجی نمونه 2. حالت Scrollable
FullWindow: در این حالت، تمامی محتوای
نمایان پنجره به همراه Border آن نمایش داده میشود. خروجی نمونه به صورت
زیر است:
.jpg)
خروجی نمونه 3. حالت FullWindow
CompatibleModeFullWindow: اگر به خروجی فوق توجه کنید، درمی یابد که خروجی
بدون در نظر گرفتن حالت نمایشی ویندوز، به صورت Windows Basic چاپ شده است.
اما اگر بخواهیم مثلا در جایی که از Aero استفاده میشود به همان سبک خروجی
تهیه شود از این گزینه استفاده میکنیم. خروجی نمونه به صورت زیر است:
.jpg)
خروجی نمونه 4. حالت
CompatibleModeFullWindow
CompatibleModeClientAreaOnly: شباهت این مورد با
ClinetAreaOnly مانند گزینه شباهت گزینههای FullWindow و
CompatibleModeFullWindow می باشد.
کامپوننت
DataRepeater
همانطور که از نام این کامپوننت مشخص است، از این برای تکرار
تعدادی کنترل دیگر استفاده میکنیم. برای درک بهتر این کامپوننت به قسمت
Details در گزارشات Crystal Report فکر کنید. این کامپوننت دقیقاً همان
کاری را انجام میدهد که آن قسمت در گزارشات انجام میدهد به تصویر زیر دقت
کنید :
.jpg)
تصویر 3. خروجی DataRepeater
همانطور که مشخص
است در خروجی به تعداد سطرهای موجود در جدولی که به این DataRepeater متصل
شده است، کنترلهای برچسب و جعبه متن ایجاد شده و همگی با مقایر مرتبط پر
شدهاند. در این برنامه ابتدا از قسمت Data Source جدول مد نظر بر روی این
کامپوننت Darg شده است. توجه داشته باشید که در قسمت DataSource برای هر
جدول به صورت پیشفرض دو حالت نمایشی Grid و Detail در نظر گرفته شده است.
در تصویر فوق از حالت Detail استفاده شده است. البته برنامه نویس میتواند
با انتخاب گزینه custome طرح مد نظر خود را پیادهسازی نماید.
.jpg)
تصویر 4.
کامپوننت DataRepeater به صورت افقی