در بخش های قبل با اصول اولیه برنامه نویسی به زبان سی شارپ آشنا شده و اولین پروژه ویژوال و فرم ویندوزی را به زبان سی شارپ آغاز کردید . همچنین در بخش چهارم با کنترل های ویژوال مهم در سی شارپ آشنا شدید. در این بخش روش کار با فرم های ویندوزی آموزش داده شده و با خصوصیات ، رویدادها و متدهای فرم کار خواهید کرد.
ساختار پروژه در سی شارپ
با ایجاد یک پروژه از نوع Windows Formsیک فایل حاوی تابع اصلی برنامه بنام program.cs و یک فرم بنام Form1 به پروژه اضافه می شوند. فایل program.cs دارای محتوای زیراست:
در فایل program.cs ، با استفاده از متذ Runفرم اول برنامه اجرا می شود.
برای هر کدام از فرم های اضافه شده به برنامه (مثلاً Form1) دو فایل جداگانه موجود است:
- یک فایل با نام Form1.cs
- یک فایل با نام Form1.Designer.cs
فایل کدنویسی فرم From1.cs : پیاده سازی توابع مربوط به رویدادهای عناصر یا توابع دیگر مورد نیاز در این فایل انجام می شود.در اين فايل بخشي از كلاس Form1 قرار گرفته كه بطور پيش فرض داراي يك تابع سازنده مي باشد. در تابع سازنده متدي بنام InitializeComponentفراخواني شده كه وظيفه مقداردهي اوليه اجزاي فرم را برعهده دارد. دستورات قرارگرفته در تابع سازنده، در زمان ايجاد فرم بصورت خودكار اجرا خواهند شد.
تابع InitializeComponentکه در تابع سازنده فایل Form1.cs فراخوانی شده بود در این فایل پیاده سازی شده است .
لازم به ذکر است تابع سازنده تابعی است همنام با خود کلاس که هنگام ایجاد نمونه از نوع کلاس (مثلاً بازکردن فرم) بصورت خودکار فراخوانی می شود.
فایل طراحی فرم From1.Designer.cs : حاوی تعریف متغیرهایی برای هر کدام از اجزای فرم و تنظیم خصوصیات آنها، با اضافه کردن عناصر به فرم و اعمال تنظیمات روی آنها، بصورت خودکار دستوراتی به این فایل اضافه می شود.در حالت عادی برنامه نویس نیازی به دستکاری این فایل ندارد.
از دیدگاه برنامه نویسی شی گرا:
با اضافه کردن یک فرم به پروژه، یک کلاس همنام با فرم به پروژه اضافه می شود که به دو بخش تقسیم شده است. یک بخش از آن در فایل طراحی و بخش دیگر آن در فایل کدنویسی قرار دارد. هر کدام از عناصری که به بصورت ویژوال به فرم اضافه می شوند، بصورت اجزایی از کلاس در فایل طراحی نوشته می شوند و توابع و متغیرهایی نیز توسط برنامه نویسی در کلاس فرم موجود در فایل کدنویسی اضافه می شوند. هنگام کمپایل برنامه محتوای دو بخش کلاس کنار هم قرار گرفته و یک کلاس کامل را تشکیل می دهند.
عملیات اصلی روی فرم ها
در این قسمت برای آموزش روش کار با فرم های ویندوزی ، عملیان روی فرم ها را بررسی می کنیم.
گفته شد هر فرم در پروژه در حقیقت یک کلاس (نوع داده ارجاعی) می باشد. و اجزای اضافه شده به فرم بعنوان اجزای کلاس و توابع اضافه شده توسط کاربر یا برنامه نویسی رویدادها بعنوان متدهای این کلاس شناخته می شوند.در برنامه نویسی شی گرا ، امکان ایجاد چندین نمونه (شیء – متغیر) از نوع هر کلاس (فرم) و نمایش تک تک آنها وجود دارد.
افزودن فرم به پروژه
روی نام پروژه در پنجره Solution Explorer کلیک راست کرده و گزینه Add | Windows From را اجرا می کنیم.
نمایش فرم
برای نمایش فرم، ابتدا یک متغیر از نوع کلاس فرم تعریف کرده و به آن حافظه تخصیص داده و سپس متد Show() یا ShowDialog() را برای نمایش فرم اجرا می کنیم:
Form2 f = new Form2();
f.Show();
یا
f.ShowDialog();
متد ShowDialog() فرم را بصورت کادر محاوره ای باز می کند، یعنی تا وقتی فرم جدید باز است امکان برگشت به فرم قبلی وجود ندارد.
پیاده سازی فرم های MDI
در سی شارپ امکان تعریف یک فرم بعنوان فرم مادر (MDI) و تعریف فرم های دیگر بعنوان فرزندان آن وجود دارد.به این منظور، برای فرم MDI خاصیتIsMdiContainer را مقدار true می دهیم:
IsMdiContainer = true;
وهنگام نمایش یک فرم فرزند، در فرم MDI به صورت زیر عمل می کنیم:
Form2 f = new Form2();
f.MdiParent = this;
f.Show();
تا فرم Form2 بصورت فرزند فرم فعلی تعریف شود .
تبدیل یک فرم به Start Up
فرم startup فرم اول برنامه است و به این منظور باید در برنامه اصلی (فایل program.cs)دستور زیر را به نام فرم مورد نظر اصلاح کنیم:
Application.Run(new Form1() );
بستن فرم
برای بستن فرم جاری کافی است متد Close() را اجرا کنیم و برای خروج از برنامه یا باید فرم اصلی برنامه بسته شود، یا اینکه متد Exit() به همراه کلاس Application اجرا گردد :
Application.Exit();
خاصیت های فرم ها در سی شارپ
خاصیت ها و رویدادهای مهم مربوط به فرم که معمولاً برای دیگر ابزارها نیز تا حدودی قابل استفاده هستند در جداول زیر آمده اند:
خاصیت های مربوط به فرم
کاربرد | خاصیت |
فاصله از بالا | Top |
فاصله از چپ | Left |
عرض | Width |
ارتفاع | Height |
رنگ پس زمینه | BackColor |
رنگ متن | ForeColor |
نوع کادر(fixed: ثابت sizeable : قابل تغییر) | FormBorderStyle |
فونت | Font |
متن و عنوان | Text |
جهت راست به چپ | LeftToRight |
محدودیت دسترسیPublic-Private | Modifiers |
درصد مات بودن | Opacity |
قرار گرفتن همیشه فرم بالای دیگر پنجره ها | TopMost |
موقعیت اولیه فرم در صفحه نمایش | StartPosition |
وضعیت اولیه فرم موقع بالا آمدن | WindowState |
داشتن جعبه کنترل | ControlBox |
داشتن دکمه حداکثرسازی | MinimizeBox |
داشتن دکمه حداقل سازی | MaximizeBox |
حداکثر اندازه فرم | MaximumSize |
MDI شدن فرم | IsMdiContainer |
تعیین دکمه ای که با زدن Enter روی فرم عمل می کند | AcceptButton |
تعیین دکمه ای که با زدن Esc روی فرم عمل می کند* | CancelButton |
رویدادهای فرم در سی شارپ
لیست رویداد های فرم در جدول زیر نشان داده شده است:
رویدادهای فرم
زمان وقوع | رویداد |
فعال شدن فرم | Activated |
غیرفعال شدن فرم | Deactivate |
بارگذاری فرم | Load |
کلیک روی فرم | Click |
دابل کلیک روی فرم | DoubleClick |
ورود به فرم | Enter |
ترک کردن فرم | Leave |
بعد از بسته شدن فرم | FromClosed |
حین بسته شدن فرم | FormClosing |
زدن دکمه صفحه کلید | KeyPress |
فشردن دکمه صفحه کلید | KeyDown |
رها کردن دکمه صفحه کلید | KeyUp |
حرکت دادن فرم | Move |
تغییر اندازه فرم | Resize |
تابع مربوط به هر رویداد بصورت پیشفرض دارای قالب زیر است:
privatevoid Form1_Load(object sender,EventArgs e)
{
MessageBox.Show(“Welcome ! “);
}
نام تابع نشان می دهد که این تابع برای رویداد بارگذاری (Load ) روی ابزار فرم 1 (From1) نوشته شده است. پارامتر sender به شیء اشاره می کند که رویداد روی آن اتفاق افتاده است و e حاوی یکسری اطلاعات تکمیلی در مورد رویداد است. در داخل آن دستوری برای کادر پیغام Welcome! نوشته شده است.
بنابراین هنگام بارگذاری فرم این پیغام نمایش داده خواهد شد.
متدهاي مربوط به فرم در سی شارپ
نام متد | کاربرد |
Show() | نمایش فرم |
ShowDialog() | نمایش فرم بصورت محاوره ای |
Close() | بستن فرم |
Hide() | مخفی کردن فرم |
Refresh() | تازه سازی فرم |
هر کدام از متدهای فوق یا باید به همراه شی فرم اجرا شوند یا اینکه روی فرم جاری:
Form2 f=new Form2();
f.ShowDialog();
f.Hide();
f.Close();
متغیر f یک شی از نوع کلاس Form2 می باشد.
یا برای اجرای متدهای فوق روی فرم جاری کافی است بنویسیم:
this.Close();
یا
Close();
this شی جاری (در اینجا فرم جاری )را مشخص می کند.
خواص و متدهای کلاس Application
کلاس Application دارای خواص و متدهای زیر است:
خاصیت ExecutablePath : مسیر و نام فایل اجرایی برنامه
خاصیت StartupPath : مسیر فایل اجرایی برنامه
متد Exit: قطع اجرای برنامه
Application.Exit();
متد Run: اجرای یک فرم
Application.Run(newForm1() );
فضاهای نامی در سی شارپ
فضای نامی(namespace) ، روشی برای سازماندهی کلاس های وابسته و یک روش جدید برای سازماندهی کدهای برنامه نویسی می باشد. بطور پیش فرض تمام کلاس های مربوط به یک پروژه در یک فضای نامی همنام با خود پروژه قرار می گیرند و یک فضای نامی می تواند در چند فایل فیزیکی گسترش پیدا کند.
در نتیجه تمام کلاس های (مثلاً فرمهای یک پروژه ) چون دارای فضای نامی یکسان هستند، بدون توجه به محل فیزیکی شان (فایل های فیزیکی مختلف)، از نظر منطقی کنار هم بوده و براحتی یکدیگر را شناسایی می کنند.
از طرفی در یک فایل نیز می توان چند فضای نامی داشت که کلاس های موجود در آنها قادر به شناسایی یکدیگر نخواهند بود هر چند داخل یک فایل قراردارند.
امکان تعریف namespace ها بصورت تودرتو نیز وجود دارد:
namespace n1{
namespace n11 {
class c1{ … }
class c2{ … }
}
namespace n12{
class c3{ … }
}
}
در مثال فوق کلاس c1 و c2 هر دو در یک فضای نامی با نام n1.n11 قرا دارند در حالی که کلاس c3 در فضای نامی با نام n1.n12 قرار دارد.
بطور کلی برای استفاده از یک کلاس قرار گرفته در فضای نامی دیگری ، یا باید قبل از نام کلاس، نام فضای نامی ذکر شود و یا با معرفی فضای نامی در ابتدای برنامه با کلمه using امکان دسترسی به کلاس های داخل آن فراهم شود.
فضاهای نامی که در ایتدای برنامه معرفی شده اند اغلب دارای کلاسهای مورد نیاز در آن برنامه هستند. بعنوان مثال برای استفاده از کلاس Form در برنامه، دو روش وجود دارد:
روش اول: نوشتن نام فضای نامی قبل از نام کلاس From
namespace WindowsFormsApplication3
{
publicpartialclassForm1 : System.Windows.Forms.Form
{
…
}
}
روش دوم: معرفی کردن نام فضای نامی در ابتدای برنامه
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
publicpartialclassForm1 : Form
{
…
}
}