ایران سرفراز- نرم افزار وپروژهای دانشجویی


نرم افزار وپروژهای دانشجویی

فصل چهاردهم ایجاد برنامه در در های ویندوز فرم #C

<!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:BNazaninBold; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-alt:"Times New Roman"; mso-font-charset:178; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:8193 0 0 0 64 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:"Times New Roman";} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

چهاردهم فصل

برنامه در ایجاد

‍‍‍C# در های ویندوز فرم

آنچه که در این فصل یاد خواهید گرفت:

مقدمه: با چند خط کد م ی توانید یک برنامه کاربردی ویندوزی بسازید که اداره کردن رویدادها و فر م های فرزند را

نشان دهد.

ارث بری م ی کنند. اعضای این کلاس یک روش یکتا Control همه کنترل ها از کلاس پایه :Form • کاربرد کنترل های

برای تغییر موقعیت، اندازه و ظاهر کنترل فراهم می کنند.

خصوصیات سفارشی دارد که ظاهر آن را تحت تاثیر قرار م ی دهد و آن را قادر م ی سازد تا Form کلاس :Form • کلاس

با منوها کار کند و فرم های فرزند را مدیریت کند.

1)، ظرفی برای نگه داشتن فرم های فرزند است. از طریق منوی اصلی (MDI یک واسط چند سندی :MDI • فرم های

می توان فرم ها را سازما ندهی، دستیابی و دستکاری کرد.

دو نوع منو را پشتیبانی م ی کند: منوی فرم اصل ی 2 و منوی محتو ا 3 که م ی تواند به کنتر ل های NET. : • کار با منوه ا

منفرد اختصاص داده شود.

گزینه هایی برای اضافه کردن کمک به فرم HTML Help ها و ToolTip ،Help • اضافه کردن کمک به فرم: دکمه های

هستند.

وراثت فرم: وراثت بصری ایجاد سریع یک فرم را ممکن می سازد.

برای میزکار هستن د ( برخلاف برنامه های تحت اجرا روی GUI این فصل فرض م ی کند توسعه دهندگان مسئول ایجاد برنام ه های

کتابخانه های کلاس مجزایی را برای هر نوع برنامه فراهم .NET سرور وب یا دستگاه موبای ل ). این تمایز بسیار مهم اس ت ، چ ون

کرده و آنها را در فضاهای نامی متمایز گروه بندی می کند.

System.Windows.Forms فرم های ویندوز

1 Multiple Document Interface

2 MainMenu

3 Context Menu

mohsen_mahyar@yahoo.com

186

System.Web.UIWebControls فرم های وب

System.Web.UIMobileControls فرم های موبایل مخصوص دستگاههای جیبی و دستی

اگرچه این فصل روی فر م های ویندوز تمرکز دار د . مهم است بدانید که برنام ه های مدرن مجبور هستند محی ط های چندگانه را

سعی می کند یک احساس و نظر یکنواختی برای هر نوع برنام هی توسعه یافته ارائه دهد. .NET . پشتیبانی کنند

استناد م ی کنند. به راحتی م ی توان روی این ( VS همچون ) IDE به GUI معمولاً توسعه دهندگان برای توسعه برنام ه های

حقیقت مسلط شد که فرم کلاسی است که از کلا س های دیگر ار ث بری می کند و خصوصیات و متدهای خود را دار د . این فصل

اعضای کلاس، نحوه پیاد هسازی آنها و تأثیر روی رفتار فر م را ،VS.NET برای فراهم کردن یک فهم درست از فر م ها در کنار

بررسی می کند. مواردی همچون نمایش فر م ها، تغییر انداز ه آنها، قابل لغزید ن 1 یا شفاف کرد ن 2 آنه ا، ایجاد فر م های ارث بری

شده و واکنش آنها به ماوس و صفحه کلید را بررسی م یکنیم.

مابین Tab ترتیب ،Help نیست . اما نحوه اضاف ه کردن قابلیت هایی همچون فای ل های GUI این فصل درباره اصول طراحی

کنترل ها و بهبود قابلیت استفاده فرم را ارائه م یدهد. کنترل ها فقط بصورت کلی بحث می شوند.

-1-14 برنامه نویسی یک فرم ویندوز

است که از Form اجرای همه برنام ه های ویندوزی در یک پنجر ه اصلی طراحی شده آغاز م ی شود. در واقع این پنجره یک ش ی

ارث بری م ی کند. پنجره اولی با ارسال یک نمونه از آ ن کلاس به متد ایستای System.Windows.Forms.Form کلاس

نمایش داده می شود. ()Application.Run

چالش یک توسع ه دهنده ایجاد واسطی است که قانون پایه طراحی را در برداشته باش د . بدین معنی که طرح یک فرم عملیات

آن را تا وسی ع ترین حد ممکن پشتیبانی کن د . برای رسیدن به این هدف، باید توسعه دهنده خصوصیات، متدها و رویداده ا ی

را همانند کنتر لهای قرار گرفته روی آن بفهمد. Form کلاس

-1-1-14 ایجاد دستی یک برنامه کاربردی ویندوز

از خط فرمان ایجاد کنی م . این برنامه در C # اجازه دهید یک برنامه ویندوزی ساده را با استفاده از ویرایشگر متن و کامپای ل ر

1 نشان داده شده اس ت . این برنامه یک پنجره و یک دکمه روی خود دارد که زمان کلیک روی دکمه یک پیام ظاهر - مثال 14

می گردد. این ساده ترین تمرین برای نمایش نحوة ایجاد یک فرم، اضاف ه کردن یک کنترل به آن، تنظیم یک ادار ه کننده برای

اداره رویدادی از کنترل است.

1- مثال 14

using System;

using System.Windows.Forms;

using System.Drawing;

class MyWinApp

{

static void Main()

{

// (١) Create form and invoke it

Form mainForm = new SimpleForm();

Application.Run(mainForm);

}

}

// User Form derived from base class Form

1 Scrollable

2 Transparent

فصل چهاردهم ایجاد برنامه های فرم ویندوز

187

class SimpleForm:Form

{

private Button button١;

public SimpleForm()

{

this.Text = "Hand Made Form";

// (٢) Create a button control and set some attributes

button١ = new Button();

button١.Location = new Point(٩۶،١١٢);

button١.Size = new Size(٧٢،٢۴);

button١.Text= "Status";

this.Controls.Add(button١);

// (٣) Create delegate to call routine when click occurs

button١.Click += new EventHandler(button١_Click);

}

void button١_Click(object sender, EventArgs e)

{

MessageBox.Show("Up and Running");

}

}

ذخیره کرده و با دستور زیر در خط فرمان کامپایل کنید . winform.cs این برنامه را در فایل

csc /t:winform.exe /r:System.Windows.Forms.dll winform.cs

1 آمده اس ت . خروجی - آن را اجرا کنی د . صفحه نمایش مورد نظر در شکل 14 winform بعد از کامپایل برنامه، با تایپ کردن

شامل یک فرم پدر و یک فرم فرزند ایجاد شده با کلیک بر روی دکمه اس ت . نکته مهم این است که قبل از بستن فرم فرزند

سبک دار) است که فقط آخرین فرم باز شده م ی تواند ) modal نمی توان به فرم پدر دسترسی پیدا کر د . این مثالی از فرم

بدون سبک ( است که م ی توانیم همزمان به فر م های پدر و فرزند دسترسی داشته modeless( دستیابی شود . حالت دیگر فرم

باشیم.

1- شکل 14

از نظر منطقی، کد به سه بخش تقسیم می شود.

-1 ایجاد فرم

ارث بری می کند و ویژگ ی های سفارشی فرم را تعریف م ی کند . Form است که از SimpleForm فرم پدر یک نمونه از کلاس

احضار می شود. ()Applicatian.Run فرم با ارسال یک نمونه به متد

-2 ایجاد کنترل دکمه

با ایجاد یک نمونه از کنترل و اضافه کردن آن روی فر م ، یک کنترل روی فرم قرار م ی گیرد . هر فرم یک خصوصیت

برمی گرداند و کلکسیونی از اشیاء موجود روی فرم ارائه Control.Collection دارد که یک نوع د اده ی Controls

برای حذف Remove برای اضافه کر د ن یک دکمه به فرم استفاده م ی شود. متد Controls.Add می کند. در این مثال متد

mohsen_mahyar@yahoo.com

188

را بکار Add زمان کشیدن یک کنترل به روی فرم، همان متد IDE ، پویای یک کنترل از فرم موردنظر اس ت . در زمان طراح ی

می برد. اگر در زمان اجرا بخواهید کنتر لهایی حذف یا اضافه کنید، خود مسئول کنترل کدتان هستید.

هستند. آنها بصورت Location و Size کنترل ها تعدادی خصوصیت دارند که بر ظاهر آنها نظارت م ی کنند. دو مورد اساسی

زیر پیاده سازی می شوند.

button١.Size = new Size(٧٢،٢۴); // width, height

button١.Location = new Point(٩۶،١١٢); //x,y

-3 اداره کردن رویداد کلیک دکمه

برای اداره کردن یک رویدا د ، باید متدی جهت پاسخ به رویداد فراهم کنیم و یک نماینده برای احضار آن متد در زمان وقوع

متدی است که رویداد را پردازش م ی کند. نماینده ی منتسب به رویداد -Click1button رویداد، ایجاد کنیم . در این مثال

با دستور زیر ایجاد می شود. Click

button١.Click += new EventHandler(button١_Click);

را با آن ثبت می کند. buttonl-Click ایجاد می کند و متد EventHandler)C) # این دستور یک نمونه از نماینده درونی

یک ویژگی با عنوان انواع د اد هی جزئی اضافه م یکند، که با آن م یتوان یک کلاس را در فای لهای فیزیکی مجزا قرار .NET2

partial داد(بخش های مختلف یک کلاس را در فای لهای مختلف تعریف کر د). برای ایجاد یک کلاس جزئی، کلمه کلیدی

قرار دهی د. توجه کنید که فقط یکی از اعلا نها باید وراثت را مشخص کنن د. پروسة کامپایل class را قبل از کلم هی کلید ی

هم هی این قطع هها را در یک کلاس ترکیب م یکند.

است پس آشنایی با اعضای .NET این تمرین روی این حقیقت تأکید دارد که کار با فر م ها شبیه کار با هر کلاس دیگر در

جهت دسترسی به آنها لازم است. #C کلاس و کاربرد تکنیک های برنامه نویسی استاندارد

Windows.Forms -2-14 کلاس های کنترل در

را نشان دا د . حال به سلسله مراتب Windows.Forms.Form مثال قبلی نحوه مشتق کردن یک فرم سفارشی از کلاس

مشتق شدن از فرم و عملکرد پیشنهادی هرکلاس نگاهی بیاندازید.

2- شکل 14

Control -1-2-14 کلاس

است. چون معمولاً یک فرم Control در سلسله مراتب زیر کلاس Form احتمالا یک امر ذاتی به نظر می رسد که کلاس

کنترل هایی را دربر دار د . اما سلسله مرات ب نشان دهنده ی وراثت است و ظرف را نشان م ی دهد. فرم یک کنترل ظرف است و

می توانند روی آن اعمال شوند. Control اعضای کلی کلاس

فصل چهاردهم ایجاد برنامه های فرم ویندوز

189

بیش از 50 کنترل دارد که برای استفاده روی فرم ویند و ز در دسترس هستن د . تعدادی از System.Windows.Forms.DLL

ارث بری می کنند. همه کنترل ها یک مجموعه مرکز ی 1 از خصوصیات، متدها و رویدادهای ار ث بری Control آنها مستقیماً از

شده را به اشتراک م یگذارند. این اعضا کارهایی همچون زیر را اجازه م یدهد.

تغییر اندازه و موقعیت کنترل، آرایش آن با متن ، رنگ، ویژگ ی های سبک، پاسخ به رویدادهای صفحه کلید و ماوس . این فصل

خصوصیات مشترک مابین همه کنتر ل ها را بررسی م ی کند و در فص ل های بعدی تک تک کنتر ل ها بصورت دقیق بررسی

خواهند شد.

control خصوصیات

ارث بری می کنند، را نشان می دهد. Control 1 بعضی از خصوصیات عمومی که اکثر کنترل ها از کلاس - جدول 14

1- جدول 14

طبقه خصوصیت توصیف

اندازه و

موقعیت

که با عرض و ارتفاع مشخص می شود. Size یک شی Size

مختصات کنترل را در روی فرم تعیین y و x که Point یک شی Location

می کنند.

Height,Width,

Right,Left,Top از کلاس ه ای اندازه و موقعیت ش ی مشتق م ی شوند، که int این مقادیر

Buttom=Top + Height و Right=Left+Width

یک مستطیل که اندازه و موقعیت یک کنترل را تعریف م یکند. Bounds

=Button.Bounds

(New Rectangle (10،10،50،60

ناحیه ای از کنترل که شامل نوار عنوان و لغزند هها نیست. ClientRectangle

لبه هایی از ظرف را معین م ی کند که کنترل به آنها لنگر م ی اندازد. این Anchor

عمل هنگام تغییر اندازه ظرف مفید است.

لبه هایی از ظرف که کنترل به آنها می چسبد. Dock

Backcolor رنگ و ظاهر

Forecolor

رنگ زمینه و پس زمینه کنترل را مشخص م ی کند. رنگ بصورت یک

معین م یشود. Color خصوصیت ایستا از ساختار

عکسی مورد استفاده در زمینه کنترل را مشخص می کند. BackGroundImage

متن انتساب داده شده به کنترل Text متن

ویژگیهای فونت متن را شرح م ی دهد. سبک حروف، اندازه، درشتی 2 و Font

غیره.

1 Core

2 Bold

mohsen_mahyar@yahoo.com

190

کانون

تمرکز 1

این کنترل روی ظرفش را مشخص م یکند. Tab که ترتیب int مقدار TabIndex

Tab مقدار بولین که نشان م ی دهد آیا کنترل م ی تواند کانون کلید TabStop

باشد.

مقدار بولین که مشخص می کند آیا کانون روی کنترل است. Focused

مقدار بولین که مشخص می کند آیا کنترل نمایش داده شود؟ Visible

صفحه کلید

و ماوس

MouseButtons

MousePosition

حالت جاری دکمه های ماوس را برم یگرداند.

که موقعیت جاری اشاره گر ماوس را برم یگرداند. Point یک نوع داده

نشان م یدهد کدام کلید کنترلی فشار داده شده است ModifierKeys

(Shift,Alt,Ctrl)

شکل اشاره گر ماوس را مشخص م ی کند (زمان قرار گرفتن روی کنترل Cursor

Cursors ). مقدار انتساب داده شده یک خصوصیت ایستا از کلاس

است.

Hand .Cross UpArrow Default.

Beam .Arrow WaitCursor.

حالت زمان

اجرا

کنترل ویندوز را نشان می دهد. Handle که int مقدار Handle

مقدار بولین که نشان می دهد آیا کنترل کانون را در اختیار دارد. Focused

-2-2-14 کار با کنتر لها

در زمان کشیدن یک کنترل روی فرم، تغییر اندازه و موقعیت آ ن ، بطور اتوماتیک کد را تولید م ی کند و طراحی VS.Net

بصری را به مقدار خصوصیات متناظر ترجمه م ی کند. با این وجود، بعضی مواقع در حین اجر ای یک ب ر نامه،لازم است کنترل ها

را تغییر د ه ید(پنهان کردن، جابجا کردن، تغییر انداز ه ). در حقیقت اندازه و موقعیت براساس اندازه صفحه نمایش کاربر اس ت ،

نمی تواند این کار را انجام ده د . به همین دلیل ضروری است تا یک IDE که در زمان اجرا م ی تواند تشخیص داده شو د . یک

برنامه نویس نحوة استفاده از این خصوصیات را درک کند.

اندازه و موقعیت

اس ت ، System.Drawing که یک عضوی از فضای نامی Size همانطور که در مثال اخیر دیدیم، اندازه یک کنترل با ش ی

تعیین می گردد.

button١.Size = new Size(٨٠،۴٠); // (width, height)

button٢.Size = button١.Size; //Assign size to second button

به یک کنترل م ی توان آن را تغییر اندازه دا د . این تکه کد نشان م ی دهد، زمانیکه روی Size در زمان اجرا با انتساب یک ش ی

می تواند برای تغییر اندازة دکمه استفاده شود. Click دکمه کلیک کنید، چگونه اداره کننده ی رویداد

private void button١_Click(object sender, System.EventArgs e)

1 Focus

فصل چهاردهم ایجاد برنامه های فرم ویندوز

191

{

MessageBox.Show("Up and Running");

Button button١ = (Button) sender; //Cast object to Button

button١.Size = new Size(٩٠،٢٠); //Dynamically resize

کن ترل استفاده شو د . مجموعه آرگومانها ی آن ، Location می تواند برای انتساب به System.Drawing.Point شی

تعداد پیکس ل ها از سمت چپ ظرف هستند و x در پیکسل ) گوشه بالا - چپ یک کنترل هستن د . مختصات ) y و x مختصات

تعداد پیکسل ها از بالای ظرف هستند. y مختصات

button١.Location = new Point(٢٠،۴٠); // (x,y) coordinates

قرار گیرد ، دیگر ظرف آن GroupBox تشخیص ارتباط این موقعیت با ظرف کنترل مهم اس ت . اگر یک دکمه در داخل یک

جدید می توان موقعیت یک کنترل را تغییر داد. Point در حین اجرا با انتساب یک ش ی .Form است نه GroupBox

در یک دستور است. Bounds روش دیگر تنظیم اندازه و موقعیت استفاده از خصوصیت

button١.Bounds = new Rectangle(٢٠،۴٠, ١٠٠،٨٠);

با مختصات گوشة بالا- چپ و گوشه پایین - راست ایجاد می شود. Rectangle شی

چگونه یک کنترل را لنگر بیاندازیم و بچسبانیم

برای چسباندن یک کنترل به یکی از لب ه های ظرفش استفاده م یشود. بیشتر مواقع مقدار پیش فرض این Dock خصوصیت

و ToolStrip و Buttom به StatusBar و StatusStrip است . البته استثناء وجود دار د . کنترل های None ، خصوصیت

،Top هستند که شامل DockStyle تنظیم م ی شوند. گزینه های مربوطه اعضای نوع دا د ه ی شما رشی شی Up به ToolBar

کنترل را به هر چهار لبه م ی چسباند و زمانی که اندازه ظرف تغییر کند، Fill است . گزینه Fill و Right ،Left ،Buttom

به بالای فرم دستور زیر را بکار برید. TextBox اندازه آن کنترل نیز تغییر م ییابد. برای چسباندن یک

TextBox١.Dock = DockStyle.Top;

3 نحوه تأثیر چسباندن را روی اندازه و موقعیت کنترل هنگام تغییر اندازة فرم نشان می دهد. - شکل 14

3- شکل 14

تغییر اندازه فرم، اندازه کنتر ل های چسبانده شده به راست یا چپ را تحت تأثیر قرار نم ی دهد. با این وجود کنتر ل های

چسبانده شده به بالا و پایین، بطور افقی منبسط یا منقبض م یشوند تا کل فضای موجود را پر کنند.

را دارند که برای تنظیم مقدار فضای مابین لبه ظرف و DockPadding و همه کنتر لهای ظرف دیگر، خصوصیت Form کلاس

کنترل چسبانده شده استفاده م یشود.

اجازه م ی دهد یک کنترل در موقعیت ثابتی (مرتبط با یک ترکیبی از ل ب ه ی بالا، چپ، راست یا پایین Anchor خصوصیت

4 تأثیرات لنگر انداختن را نمایش م یدهد. - ظرف آن) قرار گیرد. شکل 14

6- شکل 14

mohsen_mahyar@yahoo.com

192

زمانی که فرم منبسط یا منقبض م ی شود، فاصل ه ی مابین لب ه های لنگر انداخته شده ی کنترل بدون تغییرم ی مانن د.

یک فاصله ثابت از Panel از نظر افقی و عمودی منبسط م ی شود تا فاصله آن از همه لب ه ها ثابت بمان د . کنترل PictureBox

فقط به بالا لنگر انداخته است و فاصله آن از لب ههای بالا، چپ و راست بدون تغییر Label لبه ی چپ و پایین نگه م ی دارد و

می ماند.

مقداردهی می کند. چندین AnchorStyles را با مقادیر شمارشی Anchor کد تعریف یک موقعیت لنگر کنتر ل ، خصوصیت

ترکیب می شوند. OR( مقدار با استفاده از عملگر ( 1

btnPanel.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left);

و کانون Tab ترتیب

فشرده م ی شود، کانون با همان ترتیب به کنترل ها وارد م ی شود . Tab دنباله ای تعریف م ی کند، تا زمانی که کلید Tab ترتیب

دنباله ی پیش فرض، ترتیبی است که کنترل ها به ظرف اضافه می شوند.

باید دنبا له ی منطقی که کاربران برای ورود اطلاعات انتظار دارن د ، پیش بینی کند و آنها را از طریق پردازش Tab ترتیب

را از اولین فیلد تا فیلدهای بع  دی Tab 5 همچون طرحی را نشان م ی دهد. کاربر می تواند کلید - راهنمایی کند . فرم شکل 14

پایین نگه دارد، تا دکم های که عمل نهایی را احضار م یکند.

5- شکل 14

دارند ، ولی آنها صرفنظر م ی شوند و هرگز Tab دو چیز را در شکل مشاهده کنی د . اول اینکه، اگرچه برچس ب ها یک ترتیب

مرتبط با خود آن دارند نه با فرم. Tab کانون را بدست نم یآورند. دوم اینکه، کنتر لهای یک ظرف یک ترتیب

تعیین می شود. TabIndex کنترل با مقدار خصوصیت Tab ترتیب

TextBox١.TabIndex = ٠; //First item in tab sequence

فصل چهاردهم ایجاد برنامه های فرم ویندوز

193

و کلیک View􀃆TabOrder یا با اجرای Property Manager می توانید مقدار این خصوصیت را مستقیماً با VS.NET در

قرار False را Tabstop قرار نگیرد. مقدار Tab بر روی کادر هر کنترل تنظی م کنید . اگر می خواهید یک کنترل در ترتیب

دهید. با این وجود، با کلیک ماوس می توان کانون را به آن کنترل داد.

را دارد . در حین اجر ا، با TabIndex زمانی که فرم بارگذاری م ی شود، کانون روی کنتر لی قرار م ی گیرد که پایین ترین مقدار

می توان کانون را به یک کنترل خاص انتقال داد. Focus استفاده از متد

if(textBox١.CanFocus)

{ textBox١.Focus(); }

textBox1.Focus ( ) ;}

طی کردن همه کنترل های روی یک فرم

قرار دارند . با شمارش سرتاسر این کلکسیون ، بررسی هر کنترل، Controls همه کنترل های روی یک فرم در کلکسیون

تعیین نام و نوع آن، تغییر خصوصیات مورد نیاز امکا ن پذیر است . یک کاربرد معمول، پا ک کردن مقدار فیلدهای انتخاب شده

5 را بررسی م یکند و نام و نوع آن را نمایش - روی فرم در یک عمل نوساز ی 1 است. این مثال کوتاه، هر کنترل در شکل 14

می دهد.

int ctrlCt = this.Controls.Count; // ٨

foreach (Control ct in this.Controls)

{

object ob = ct.GetType();

MessageBox.Show(ob.ToString()); //Displays type as string

MessageBox.Show(ct.Name);

{

در زمان شمارش اشیاء کنترل، چندین مورد وجود دارد که باید آْگاه باشید:

به صورت TextBox • نوع هر کنترل بصورت یک نام کامل برگردانده م ی شود. برای مثال

بیان می شود. System.Forms.Form.TextBox

، به جای مقدار 10 Controls.Count • فقط اشیاء موجود در ظرف سطح بالا لیست م ی شوند. در این مثال، مقدار

به صورت یک کنترل شمارش می شود و کنترل های فرزند آن مستثنی م یشود. GroupBox مقدار 8 است. چون

کنترل را برای تعیین ظرف بودن کنترل بکار برید. HasChildren • می توانید یک خصوصیت

2 برای لیست کردن همه کنترل های فرزند بصورت بازگشتی بکار می برد. - مثال 14

2- مثال 14

void IterateThroughControls(Control parent)

{

foreach (Control c in parent.Controls)

{

MessageBox.Show(c.ToString());

if(c.HasChildren)

{

IterateThroughControls(c);

}

}

{

5 همه ی کنترل های روی فرم اصلی را بصورت لیست سلسله مراتبی نتیجه م ی دهد. یک کنترل به - اعمال این کد به شکل 14

همراه فرزندان خود لیست می شود.

1 refresh

اسلام احمد زاده - 09177112161 - C# برنامهنویسی

194

Control -3-2-14 رویدادهای

زمانی که یک کلید صفحه کلید را فشار م ی دهید یا ماوس را کلیک م ی کنید، کنترل مرتبط یک رویداد برای نشان دادن عمل

خاصی که رخ داده است رها م ی کند. یک رویداد ثبت شده، روالی که به رویداد پاسخ م ی دهد را اداره م ی کند و آن عملی که

باید انجام گیرد را قانونی می کند.

اولین گام اداره کردن یک رویداد، تعیین نماینده منتسب شده به رویداد اس ت . سپس باید متد اداره کردن رویداد را با آن

2 اطلاعات مورد نیاز برای - ثبت کنید و مطمئن شوید نشانه متد با پارامترهای مشخص شده نماینده تطابق دار د . جدول 14

کار با رویدادهای رها شده ماوس و صفحه کلید را خلاصه م یکند.

2- جدول 14

رویداد پارامترها / نماینده درونی توصیف

,Click

Doubleclick

,MouseEnter

,MouseLeave

,MouseOver

MouseWheel

Event Handler (Object sender,

(EventArgs e

رویدادهای رها شده با کلیک کردن، دابل کلیک کردن

یا حرکت ماوس

MouseDown

Mouse UP

MouseMove

)Mouse Event Hardler

(Objectsender ,MouseEventArgs e

رویدادهای رها شده با ماوس و حرکات دکمه ماو س .

توجه کنید اگر عمل ماوس روی یک کنترل در ظرف

جاری رخ دهد، این رویداد رها م یشود

,Keyup

KeyDoun

KeyEvent Hardler(Object sender,

( KeyEventArgs e

رویدادهای رها شده با پایین یا بالا کردن کلیدهای

صفحه کلید

)KeypressEventHardler Keypress

,Object sender

(KeypressEventArgs e

رویداد رها شده با فشار دادن هر کلیدی

اداره کردن رویدادهای ماوس

و MouseHover همه کنتر ل های فرم ویندوز، رویدادهای ،DoubleClick و Click علاوه بر رویدادهای آشنای

را به ارث م ی برند. دو رویداد آخری زمانی که ماوس به محدود ه ی یک کنترل وارد شده یا MouseLeave و MouseEnter

مفید هستند که برای صفحات وب معمول هستند. Mouseover آن را ترک م یکند رها می شوند. آنها برای ایجاد یک اثر

برای نشان دادن این مطلب، مثالی که زمان حرکت ماوس روی کادر متن، رنگ پیش زمینه آن را تغییر م ی دهد، ملاحظه کنید.

جهت انجام تغییر رنگ پیش زمینه تنظیم م یکند. OnMouseLeave و OnMouseEnter کد زیر نمایند ههایی برای فراخوانی

TextBox userID = new TextBox();

userID.MouseEnter += new EventHandler(OnMouseEnter);

userID.MouseLeave += new EventHandler(OnMouseLeave);

Control را به نوع sender را تطابق م ی دهند و پارامتر EventHandler متدهای اداره کننده رویداد، نشان ه ی نماینده

برای دستیابی به خصوصیات آن قال ببندی می کند.

private void OnMouseEnter(object sender, System.EventArgs e)

{

فصل چهاردهم ایجاد برنامه های فرم ویندوز

195

Control ctrl = (Control) sender;

ctrl.BackColor= Color.Bisque;

}

private void OnMouseLeave(object sender, System.EventArgs e)

{

Control ctrl = (Control) sender;

ctrl.BackColor= Color.White;

}

امکا نپذیر اس ت. این (Control) کردن ادار هکنند ههای رویداد پی شفرض کلاس پای ه override اداره کردن رویدادها با

مکانیزم نماینده، تعیین چندین ادار هکننده رویداد برای یک .NET نامگذاری م یشوند. در OnEventName متدها با الگوی

رویداد را مجاز م یدارد و همچنین پردازش چندین رویداد توسط یک ادار هکنند هی رویداد منفرد را مجاز م یدارد.

آرگومان دوم خود را ،EventArgs به جای آرگومان کلی MouseMove و Mouseup ،MouseDown نماینده های رویدادهای

می گیرند. این نوع داده، اطلاعات حالت اضافی درباره ماوس را ا ز طریق خصوصیات نشان داده MouseEventArgs از نوع

3 در اختیار قرار می دهد. - شده در جدول 14

3- جدول 14

خصوصیت توصیف

مشخص می کند کدام کلید ماوس فشار داده شده اس ت . مقدار خصوصیت با نوع شمارشی Button

تعیین می شود. MouseButtons

تعداد کلیک ها در زمان آخرین رویداد Clicks

تعداد دورها یی که چرخ ماوس م ی چرخد. مقدار مثبت نشا ن دهنده حرکت به جلو و مقدار Delta

منفی نشان دهنده حرکت به عقب است.

مختصات ماوس مرتبط با گوشه چپ -بالای ظرف. این معادل خصوصیت X,y

کنترل است. MousePosition

خصوصیات این جدول عملاً برای برنام ه هایی که باید حرکات ماوس را روی ی ک فرم دنبال کنند، مفید هستن د . مثال معمول

برنامه های گرافیکی هستند که به موقعیت ماوس و دکمه برای کنترل ترسیم روی صفحه تکیه دارن د . برای ارائه این مطلب،

3 یک برنامه ترسیم ساده است که یک خط روی فرم با شروع از محلی که کلید ماوس فشار داده م ی شود تا جایی - مثال 14

که آن رها م ی شود رسم م ی کند. برای اینکه آن برنامه کمی جالب شود، اگر دکمه چپ را بکشید خط سیاه رسم م ی کند و اگر

دکمه راست کشیده شود خط قرمز رسم م یکند.

3- مثال 14

using System;

using System.Windows.Forms;

using System.Drawing;

class MyWinApp

{

static void Main()

{

Form mainForm = new DrawingForm();

Application.Run(mainForm);

}

}

// User Form derived from base class Form

class DrawingForm:Form

{

Point lastPoint = Point.Empty; // Save coordinates

public Pen myPen; //Defines color of line

mohsen_mahyar@yahoo.com

196

public DrawingForm()

{

this.Text = "Drawing Pad";

// reate delegates to call MouseUp and MouseDown

this.MouseDown += new MouseEventHandler(OnMouseDown);

this.MouseUp += new MouseEventHandler(OnMouseUp);

}

private void OnMouseDown(object sender, MouseEventArgs e)

{

myPen = (e.Button==MouseButtons.Right)? Pens.Red:

Pens.Black;

lastPoint.X = e.X;

lastPoint.Y = e.Y;

}

private void OnMouseUp(object sender, MouseEventArgs e)

{

// Create graphics object

Graphics g = this.CreateGraphics();

if (lastPoint != Point.Empty)

g.DrawLine(myPen, lastPoint.X,lastPoint.Y,e.X,e.Y);

lastPoint.X = e.X;

lastPoint.Y = e.Y;

g.Dispose();

}

}

DrawLine از متد Graphics نقش کلاسهای گرافیکی مرتبط باید بدیهی باش د . یک شی ،NET. حتی بدون فهم از گرافیک

و مختصات خط مورد نظر هستن د . زمانی که دکمه Pen برای انجام ترسیم واقعی استفاده م ی کند. پارامترهای این متد، ش ی

را براساس نوع دکمه فشار داده شده تنظیم م ی کند (یک قلم myPen فشرده می شود، برنامه مختصات را ذخیره م ی کند و

قرمز برای دکمه راست و یک قلم سیاه برای دکمه چ پ ). زمانی که دکم ه ی ماوس رها م ی شود، خط از مختصات قبلی به

همه اطلاعات مورد نیاز را برای انجام این کار فراهم می کند. MouseEventArgs موقعیت جاری رسم می شود. شی

اداره کردن رویدادهای صفحه کلید

رویدادهای صفحه کلید با تعریف یک نماینده برای فراخوانی متد ادار ه کننده ی رویداد سفارشی اداره م ی شوند. دو آرگومان به

شی رها کنند هی رویداد را مشخص می کند و آرگومان دوم فیلدهایی sender ادار ه کننده ی رویداد ارسال می شود. آرگومان

اس ت . این KeyPressEventArgs آرگومان دوم از نوع KeyPress که رویداد را توصیف م ی کنند در بردار د . برای رویداد

قرار داده م ی شود تا تعیین کند آن رویداد را true دارد، که با روال ادار ه کننده رویداد Handled نوع داده، یک فیلد

است که کلید فشار داده شده را معین م یکند. KeyChar پردازش کرده است. خصوصیت دیگر

برای محدو د کردن ورودی یک فیلد مفید اس ت . این قطعه کد نشان م یدهد، محدودکردن ورودی یک فیلد به ارقام Keychar

تنظیم م ی شود که موتور فرم را از true به Handled ، چقدر ساده اس ت . زمانی که یک کاراکتر غیرعددی وارد م ی شود

نمایش کاراکتر منع م ی کند. در غیر اینصورت روال ادار ه کننده ی رویداد، هیچ کاری انجام نم ی دهد و کاراکتر نمایش داده

می شود.

private void OnKeyPress(object sender, KeyPressEventArgs e)

{

if (! char.IsDigit(e.KeyChar)) e.Handled = true;

}

Shift و Alt فقط برای کلیدهای کاراکتری قابل چاپ رها م ی شود. آن کلیدهای غیرکاراکتری همچو ن KeyPress رویداد

KeyUp و KeyDown را صرفنظر م ی کند. آن رویداد، همه ضرب ه های کلیدها را تشخیص م ی دهد و برای شروع رویدادهای

دریافت م ی کنند که ضربه کلید KeyEventsArgs ضروری است . اداره کننده های رویدادهای مربوطه، یک پارامتر از نوع

را KeyErentsArgs 4 خصوصیات مهم فراهم شده بوسیله - تکی یا ضربه ترکیب کلیدها را تشخیص م ی دهد. جدول 14

لیست می کند.

فصل چهاردهم ایجاد برنامه های فرم ویندوز

197

4- جدول 14

عضو توصیف

مشخص Shift و Control و Alt مقدار بولین که فشار داده شدن کلیدهای Alt-Control-Shift

می کند.

مقدار بولین که مشخص می کند آیا یک رویداد اداره شده است. Handled

است. Keys کد کلید را برم یگرداند. این کد از نوع شمارشی KeyCode

است با این Keys داده کلید را برای رویداد برم ی گرداند. این هم از نوع شمارشی KeyData

تفاوت که کلیدهای چندگانه را تشخیص م یدهد.

ترکیب کلیدهای کنترلی فشار داده شده را تشخیص م یدهد. Modifiers

(Alt و ctrl و shift)

به چند مورد توجه کنید:

،Alt با اعضای KeyCode میان برهای ساده ای برای مقایسه مقدار ،Shift و Control ،Alt • خصوصیات

هستند. Keys از نوع شمارشی Shift یا Control

یک مقدار برای کلید تکی یا ترکیبی از کلیدهای فشار KeyData . مقدار یک کلید تک را نشان م ی دهد KeyCode •

داده شده را در بردارد.

VS.NET به تشخیص کلیدها محرمانه است، چون اعضای آن همه کلیدها را نشان م ی دهد. اگر ،Keys • نوع شمارشی

در یک حا لت متشابه استفاده شود، سیستم هوشمند همه اعضای Keys را بکار م ی برید، زمانی که نوع شمارشی

2 و غیره نمایش داده می شوند. D 1 و D آن را لیست می کند. برای مثال ارقام با

را بکار بریم تا مطمئن شویم یک کاربر فقط کلیدهای عددی را فشار KeyPress قطعه کد قبلی نشان م ی دهد، چگونه

جلوگیری نم ی کند . با Ctrl+V داده های غیرعددی به کمک کلید ترکیبی (Paste) می دهد. با این وجود از چسباندن

می توان این کلید ترکیبی را تشخیص داد، تا با تنظیم یک پرچم، ادار ه کننده رویداد KeyDown استفاده از رویداد

را راهنمایی کند تا تلاش برای چسباندن را صرفنظر کند. KeyPress

در این مثال دو ادار ه کننده رویداد ثبت م ی شود تا در زمان وارد کردن داد ه ها از طریق صفحه کلید فراخوانی شون د . ابتدا

قرار م ی دهد. اداره کننده ی true را Paste را فشار دهد، مقدار Ctrl+V احضار م ی شود و اگر کاربر کلید ترکیبی KeyDown

این پرچم را برای تعیین اینکه آیا ضرب ههای کلید را بپذیرد بکار م یبرد. KeyPress رویداد

private bool paste;

//Register event handlers for TextBox t.

//They should be registered in this order,

//because the last registered is the

//first executed

t.KeyPress += new KeyPressEventHandler(OnKeyPress);

t.KeyDown += new KeyEventHandler(OnKeyDown);

private void OnKeyDown(object sender, KeyEventArgs e)

{

if (e.Modifiers == Keys.Control && e.KeyCode == Keys.V)

{

paste=true; //Flag indicating paste attempt

string msg = string.Format("Modifier: {٠} \nKeyCode: {١} \nKeyData: {٢}",

e.Modifiers.ToString(),e.KeyCode.ToString(), e.KeyData.ToString());

MessageBox.Show(msg); //Display property values

اسلام احمد زاده - 09177112161 - C# برنامهنویسی

198

}

private void OnKeyPress(object sender, KeyPressEventArgs e)

{

if (paste==true) e.Handled = true;

}

نمایش می دهد. Ctrl+V در حین فشار دادن KeyEventArge این برنامه مقادیر زیر را برای خصوصیات انتخاب شده از

Modifier: Control

KeyCode: V

KeyData: Control, V

Form -3-14 کلاس

که خصوصیاتی فراهم م ی کند تا قادر به )،ScrollableControl را همانند Control همه ی اعضای کلاس Form کلاس

لغزاندن باشد ) ارث بری می کند. بدین علت تعداد زیادی خصوصیات برای کنترل ظاهر فرم، کار با فر م های فرزند، ایجاد

5 لیست انتخابی از - نمایش منوها و تعامل با میزکار از طریق نوارهای حالت و ابزار اضافه م ی کند. جدول 14 ،Modal فر م های

این خصوصیات را نشان می دهد.

5- جدول 14

طبقه خصوصیت توصیف

سبک لبه ی فرم را بدست آورده یا مقدار دهی م ی کند. آن با نوع FormBorderStyle ظاهر

تعریف می شود. FormBorderstyle شمارشی

Fixed٣D None

FixedSingle Sizable

FixedDialog

مقدار بولین که تعیین م ی کند آیا آیکون منو د ر گوشه چپ فرم و ControlBox

در گوشه راست دیده شوند. close دکمه

MaximizeBox

MinimizeBox

مقدار بولین که مشخص می کند آیا دکم ه های کوچ ک کردن و

بزرگ کردن فرم روی فرم نشان داده شوند.

کدری فرم و همه کنتر ل های روی آن را بدست آورده یا مقداردهی Opacity

می کند. مقدار ماکزیمم آن 1 است. در ویندوز 95 و 98 کار نمی کند.

یک رنگ که ناحیه شفاف روی فرم را نشان م ی دهد. هر کنترل یا TransparencyKey

بخشی از فرم که رنگ پی ش زمینه یکسانی با آن دارند نمایش داده

نم ی شوند. کلیلک روی این ناحیه شفاف، رویداد را به فرم زیرین آن

ارسال می کند.

نشان می دهد آیا فرم اندازه خود با اندازة فونت مورد استفاده AutoScale اندازه و موقعیت

تطبیق می دهد.

اندازه فرم به استثناء لبه ها و نوار عنوان ClientSize

که محل قرارگیری فرم روی پنجره میزکار را Point یک نوع داده DesktopLocation

مشخص می کند.

موقعیت اولیه یک فرم را مشخص م ی کند. آن یک مقدار از نوع StartPosition

فصل چهاردهم ایجاد برنامه های فرم ویندوز

199

می گیرد. FormStartPosition شی ء

در مرکز محدود فرم پدر قرار م یگیرد. :CenterParent

در مرکز صفحه نمایش :CenterScreen

را بکار می برد. DesktopLocation مقدار :Manual

ویندوز مقدار آن را تنظیم می کند. : WindowsDefaltLocaton

MinimumSize

MaximumSize

که انداز ه ی حداقل و حداکثر فرم را معین م ی کند . Size یک شی

مقدار ( 0و 0) نشان می دهد هیچ محدودیتی وجود ندارد.

مقدار بولین که مشخص م ی کند آیا عنوان برنامه در نوار وظیفه ShowInTaskBar

است. true ظاهر گردد. مقدار پی شفرض آن

TopLevel

TopMost

یا پنجره TopLevel مشخص می کند آیا فرم به صورت پنجره

پدر ندار د . فرم TopLevel ظاهر گرد د . یک پنجره ی TopMost

نمایش TopMost همواره در بالای همه فر م های غیر TopMost

داده می شود.

مشخص می کند که فرم در شروع کار، چگونه نمایش داده شود. آن WindowState

می گیرد. FormWindowStart مقدار خود را از نوع شمارشی

Normal,Minimized,Maximized

فرم به عنوان مالک فرم معین می گردد. Owner فرم های مالک

که فر م های ملکی 1 بوسیل ه ی یک فرم را Form یک آرایه از نوع OwnedForms

شامل است.

1-3-14 تنظیم ظاهر یک فرم

6 کنترل م ی کنند کدام دکمه و آیکون روی لب ه ی بالای فرم نمایش داده شون د . - چهار خصوصیت نشان داده شده در شکل 14

تعیین ControlBox ای را معین م ی کند که به عنوان آیکون گوشه چپ استفاده م ی شود. مقدار .ico فایل Icon خصوصیت

و MaximizeBox نمایش داد ه شوند یا نمایش داده نشون د . بطور مشابه در مورد close می کند آیا آیکون و دکمه

نیز چنین است. MinimizeBox

6- شکل 14

هدف این خصوصیات چیزی بالاتر از کنترل عملکرد ظاهر فرم اس ت . به عنوان مثال، دکم ه های کوچک و بزر گ کردن را از

برای جلوگیری از بزرگ و کوچک کردن فرم پدر برم یدارند. modal روی فرم های

1 Owned

mohsen_mahyar@yahoo.com

200

کدری 1 فرم

سطح شفافیت فرم را تعیین م ی کند. محدوده ی مقادیر آن از 0 تا 1 است که هر مقدار کمتر از 1 opacity خصوصیت

شفافیت جزئی ایجاد م ی کند تا اجازه دهد عناصر زیر فرم نمایش داده شون د . بیشتر فرم ها با مقدار 1 بهتر کار م ی کنند، اما

باشد که یک فرم اصلی را پنهان م ی کند . یک TopMost تنظیم کدری می تواند یک راه مؤثر برای نمایش فرزند با فر م های

روش معمول تنظیم کدری یک فرم به مقدار 1 در هنگام دریافت کانون و کاهش کدری هنگام از دست دادن کانون اس ت .

اغلب این تکنیک با پنجر ههای جستجو استفاده می شود که روی بالاترین سند در حال جستجو شناور است.

0 تنظیم کنی م . / حال می خواهیم نشان دهیم، چگونه کدری یک فرم را هنگام فعال شدن به 1 و هنگام غیرفعال شدن به 8

بهره م ی گیریم، که زمان از دست دادن یا بدست آوردن کانون رها Activated و DeActivate برای این کار از رویدادهای

می شوند. ابتدا نماینده های فراخوانی روال های اداره کردن رویداد را مقداردهی م یکنیم.

this.Deactivate += new System.EventHandler(Form_Deactivate);

this.Activated += new System.EventHandler(Form_Activate);

کد اداره کننده رویداد متناظر بسیار کوچک است

void Form_Deactivate(object sender, EventArgs e)

{

this.Opacity= .٨;

}

void Form_Activate(object sender, EventArgs e)

{

this.Opacity= ١;

}

شفافیت فرم

وجود دارد که TransparencyKey شفافیت کل فرم بوسیله کدری تحت تأثیر قرار م ی گیرد. خصوصیت دیگری بنام

ناحیه ی انتخاب ش ده از کل فرم را شفاف م ی کند. این خصوصیت یک رنگ پیکسل را تعیین م ی کند که زمان ترسیم فرم

بصورت شفاف درم ی آید. تأثیر آن شبیه ایجاد یک چاله است که هر ناحی ه ی زیر فرم را نمایان م ی کند. در حقیقت اگر روی

یک ناحیه شفاف کلیک کنید، رویداد توسط فرم زیرین تشخیص داده می شود.

FormBorderStyle.None معمولی ترین کاربرد شفافیت به ایجاد فر م های غیر مستطیلی اس ت . زمانی که سبک حاشیه

استفاده شود، نوار عنوان حذف می شود و فرمی با شکل هندسی م ی تواند ایجاد شو د . مثال بعدی نحو ه ی ایجاد یک فرم

صلیب شکل را نشان می دهد.

7- شکل 14

1 Opacity

فصل چهاردهم ایجاد برنامه های فرم ویندوز

201

هم رنگ سازی م . مطمئن شوید TransparencyKey آنچه که نیاز داریم این است که ناحی ه های شفاف فرم را با همان رنگ

که این رنگ در جای دیگر فرم استفاده نخواهد ش د . روش استاندارد تنظیم رنگ پیش زمین ه ی فرم به رنگ

و ترسیم یک تصویر با رنگ متفاوت است. TransparencyKey

آنها BackColor را در هر گوشه از فرم استاندارد قرار داده و خصوصیات Panel 7، کنترل های - برای ایجاد فرم شکل 14

قرار دهید. با استفاده از کد زیر فرم ایجاد شده و نمایش داده م یشود. Color.Red را

CustomForm myForm = new CustomForm();

myForm.TransparencyKey = Color.Red;

myForm.FormBorderStyle= FormBorderStyle.None;

myForm.Show();

این قطعه کد، تاثیر ایجاد ناحی ه های پانل شفاف و حذف نوار عنوان را نشان م ی دهد. بعد از ناپدید شدن نوار عنوان، باید یک

روش برای حرکت دادن فرم فراهم کنیم، نیاز به اداره کنند هی رویداد ماوس احساس م یشود.

نشان داده م ی شود، که کاربر با کشیدن آن م ی تواند فرم را بکشد PictureBox در مرکز فرم یک تصویر چهار جهته در ی ک

را برای پیاد هسازی حرکت فرم نشان می دهد. MouseMove،MousUp ،MouseDown 4 رویداد های - . مثال 14

4- مثال 14

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

public class CustomForm : Form

{

private Point lastPoint = Point.Empty; //Save mousedown

public CustomForm()

{

InitializeComponent(); // set up form

//Associate mouse events with pictureBox

pictureBox١.MouseDown += new MouseEventHandler(OnMouseDown);

pictureBox١.MouseUp += new MouseEventHandler(OnMouseUp);

pictureBox١.MouseMove += new MouseEventHandler(OnMouseMove);

}

private void OnMouseDown(object sender, MouseEventArgs e)

{

lastPoint.X = e.X;

lastPoint.Y = e.Y;

}

private void OnMouseUp(object sender, MouseEventArgs e)

{

lastPoint = Point.Empty;

}

//Move the form in response to the mouse being dragged

private void OnMouseMove(object sender, MouseEventArgs e)

{

if (lastPoint != Point.Empty)

{

//Move form in response to mouse movement

int xInc = e.X - lastPoint.X;

int yInc = e.Y - lastPoint.Y;

this.Location = new Point(this.Left + xInc,

this.Top+yInc);

}

}

// Close Window

private void button١_Click(object sender, System.EventArgs e)

{

this.Close();

mohsen_mahyar@yahoo.com

202

}

}

ذخیره lastPoint کلیک م ی کند، مختصات د ر PictureBox منطق این مثال سرراست اس ت . زمانی که کاربر رو ی

فرم را برای اعمال تفاوت مابین مختصات جدید و Location می شود. زمانی که کاربر ماوس را حرکت م ی دهد، خصوصیت

پاک م ی شود. توجه داشته باشید lastPoint ، موقعیت ذخیره شده قبلی مقداردهی م ی کند. زمانی که ماوس رها م ی شود

که پیاده سازی کامل به کد اداره کردن تغییر انداز هی فرم را نیز نیاز دارد.

تنظیم اندازه و موقعیت فرم

تعیین م ی شود. همانطور ک ه جدول StartPosition موقعیت اولیه فرم بصورت مستقیم یا غیرمستقیم بوسیله خصوصیا ت

است . این مقادیر برای قرار گرفتن فرم FormStartPosition 6-14 تشریح کرده، مقادیر آن خصوصیات از نوع شمارشی

در مرکز صفح ه ی نمایش، مرکز فرم پدر، در موقعیت پی ش فرض پنجره ها یا یک موقعیت انتخاب شده دلخواه استفاده

انعطاف پذیری بالایی دارد ،چون اجازه می دهد برنامه موقعیت را تنظیم کند. Manual می شوند. مقدار

6- جدول 14

عمل رویدادهای رها شده توصیف

متد VS ایجاد شی فرم سازنده ی فرم فراخوانی م ی شود. در

برای مقداردهی اولیه فرم InitializeComponent

فراخوانی می شود

نمایش فرم

Form.Load

Form.Activated

Activated و به دنبال آن رویداد Load ابتدا روید اد

فراخوانی می شود.

زمانی که کاربر فرم را انتخاب می کند رخ می دهد. Form.Activated فعال شدن فرم

زمانی که فرم کانون را از دست م ی دهد غیر فعال Form.DeActivated غیرفعال شدن فرم

می شود.

Form.DeActivated بستن فرم

Form.Closing

Form.Closed

یا کلیک روی دکمه بستن، فرم Form.Close با اجرای

بسته می شود.

قرار داده می شود. این مثال فرم را در موقعیت ( 0و 200 ) گوشه ی چپ- بالا Form.Load موقعیت اولیه در اداره کننده رویدا د

بارگذاری می کند.

private void opaque_Load(object sender, System.EventArgs e)

{

this.DesktopLocation = new Point(٢٠٠،٠);

}

موقعیت اولیه ی فرم را م یتوان در فرمی که شی فرم را ایجاد کرده و نمایش م یدهد، تنظیم کرد.

opaque opForm = new opaque();

opForm.Opacity = ١;

opForm.TopMost = true; //Always display form on top

opForm.StartPosition = FormStartPosition.Manual;

opForm.DesktopLocation = new Point(١٠،١٠);

opForm.Show();

مقداردهی گرد د . معمولا خصوصیت دومی توصیه ClientSize و Size اندازه ی فرم م ی تواند با استفاده از خصوصیا ت

مقداردهی می شود. Size می شود، چون ناحیه ی تعاملی فرم را معین می کند. این خصوصیت با یک نمونه از شی

فصل چهاردهم ایجاد برنامه های فرم ویندوز

203

this.ClientSize = new System.Drawing.Size(٢٠٨, ١٣٣);

اغلب مطلوب است موقعیت و انداز ه ی یک فرم را متناسب با انداز ه ی صفح ه ی نمایش مشخص کنی م . اندازه ی صفح ه ی نمایش

در دسترس اس ت . این خصوصیت یک مستطیل بر Screen.PrimeryScreen.WorkingArea از طریق خصوصی ت

می گرداند، که انداز ه ی صفحه ی نمایش را بدون نوارهای وظیفه، نوارهای ابزار لنگر انداخته و پنجر ه های لنگر انداخته نشان

می دهد. مثال زیر اندازه ی صفحه نمایش را برای مقداردهی ارتفاع و عرض فرم را بکار م یبرد.

int w = Screen.PrimaryScreen.WorkingArea.Width;

int h = Screen.PrimaryScreen.WorkingArea.Height;

this.ClientSize = new Size(w/۴,h/۴);

MinimumSize بعد از این که فرم فعال شد، ممکن است بخواهید نحو ه ی تغییر انداز ه ی آن را کنترل کنی د . خصوصیات

توجه بیشتری لازم دارند. در مثال زیر انداز هی حداقل و حداکثر یک فرم تنظیم م یگردد. MaximumSize و

//w and h are the screen's width and height

this.MaximumSize = new Size(w/٢,h/٢);

this.MinimumSize = new Size(٢٠٠, ١۵٠);

مقداردهی عرض و ارتفاع با صفر، هرنوع محدودیتی را حذف م یکند.

-2-3-14 نمایش فرم ها

بعد از این که فرم اصلی اجرا شد و بالا آمد، آن م ی تواند نمونه هایی از فرم جدید را ایجاد کرده و به دو روش نمایش ده د : با

Form.ShowDialog . به ارث برده اس ت Control که ازکلاس Form.Show یا مت د Form.ShowDialog استفاده از متد

نشان م ی دهد. این نوع فرم بعد از فعال شدن تا زمانی که بسته نشود، کنترل را به Modal فرم را به صورت یک کادر دیا لوگ

فرم های دیگر رها نمی کند. کادرهای دیالوگ در فص لهای بعدی بررسی می شوند.

را نشان م ی دهد. بدین معنی که هیچ رابط ه ای با فرم ایجاد کننده ندارد و کاربر Modeless یک فرم Form.Show متد

درانتخاب فرم جدید یا قدیمی آزاد اس ت . اگر فرم ایجاد کننده، فرم اصلی نباشد، بستن آن هیچ تاثیری روی فرم جدید

ندارد، در غیر این صورت با بستن فرم اصلی، همه فر مهای برنام هی کاربردی بسته م یشوند.

modeless چرخه ی زندگی یک فرم

فرم تحت تسل ط یک تعداد معین از فعالی ت ها در عمر خود اس ت : آن ایجاد می شود، نمایش داده م ی شود، کانون را بدست

آورده و از دست م ی دهد و در نهایت بسته م ی شود. بیشتر این فعالی ت ها با یک یا چند رویداد همراه می شود تا برنامه را قادر

6 این عمل ها و رویدادها را خلاصه م یکند. - سازد، عمل های انتساب داده شده به این رویدادها را انجام دهند. جدول 14

ایجاد و نمایش فرم

زمانی که یک فرم، فرم دیگری را اجرا م ی کند، آن کدهای موردنظر هر دو طرف را م ی نویسد. باید فرم ایجاد شده برای انجام

مقداردهی اولیه و اضاف ه کردن کنتر ل ها راه اندازی شود . علاوه بر این، باید نماینده ها برای فراخوانی روتی ن های اداره کردن

را بکار م ی برید، هر کد مقداردهی اولی ه ی کاربر باید بعد از VS.Net رویدادها تنظیم گردند . اگر

قرار گیرد . InitializeComponent فراخوانی

ایجاد م ی کند، ایجاد و نمایش شی اس ت . کار دیگر این است که مطمئن شویم فقط Form واضح ترین کار کلاسی که یک شی

یک نمونه از آن کلاس ایجاد م ی شود، چون ممکن نیست بخواهید به ازای هر کلیک روی یک دکمه شی جدیدی ایجاد گردد .

است که در حین بستن فرم ایجاد شده رخ م ی دهد. اگر فرم بسته Close یک روش مدیریت این عمل، بهر ه گیری از رویداد

نشده باشد، نمونه جدید ایجاد نمی شود.کد زیر این عمل را نشان م یدهد.

mohsen_mahyar@yahoo.com

204

تنظیم م ی شود . در ) opform) برای آگاه کردن یک متد در زمان بسته شدن فرم جدی د EventHandler یک نماینده ی

زمان فشار دادن یک دکمه، یک پرچم کنترل م ی کند برای ایجاد یا نمایش فرم چه اتفاقی م ی افتد. اگر نمونه ای از ف رم وجود

برای دادن کانون به فرم جدید استفاده م یشود. FormActivate نداشته باشد ، آن ایجاد شده و نمایش داده م یشود. متد

//Next statement is at beginning of form's code

public opaque opForm;

bool closed = true; //Flag to indicate if opForm exists

//Create new form or give focus to existing one

private void button١_Click(object sender, System.EventArgs e)

{

if (closed)

{

closed = false;

opForm = new opaque();

//Call OnOpClose when new form closes

opForm.Closed += new EventHandler(OnOpClose);

opForm.Show(); //Display new form object

} else {

opForm.Activate(); //Give focus to form

}

}

//Event handler called when child form is closed

private void OnOpClose(object sender, System.EventArgs e)

{

closed = true; //Flag indicating form is closed

}

-3-3-14 فعال سازی و غیرفعال سازی فرم

به روی آن می رود فعال Alt+Tab یک فرم در اولین بار نمایش یا زمانی که کاربر روی آن کلیک م ی کند یا از طریق کلید

فر م را رها م ی کند. برعکس، زمانی که فرم کانون را از دست م ی دهد ( از طریق بستن یا خارج Activated می شود و رویداد

متن روی ،DeActivate رخ م ی دهد. در قطعه کد بعدی، اداره کنند ه ی رویداد DeActivate شدن از انتخاب )، رویداد

دکمه را مجددا به کار Activated تغییر داده وآن را از کار م ی اندازد و کنترل کنند ه ی رویداد resume دکمه را به

می اندازد.

this.Deactivate += new System.EventHandler(Form_Deactivate);

this.Activated += new System.EventHandler(Form_Activate);

//

void Form_Deactivate(object sender, EventArgs e)

{

button١.Enabled = false;

button١.Text = "Resume";

}

void Form_Activate(object sender, EventArgs e)

{

button١.Enabled = true;

}

بستن فرم

رخ می دهد و آخرین فرصت را برای انجام یک سری وظایف پا کسازی یا Closing زمانی که یک فرم بسته می شود، رویداد

را برای احضار متدهای کنترل CancelEventHandler جلوگیری از بست ه شدن فرم فراهم م ی سازد. این رویداد نمایند ه

را در بر Cancel تعریف م ی کند که خصوصیت CancelEventArgs کننده ی رویداد به کار م ی برد. این نم اینده یک پارامتر

قرار دهید. در این مثال کاربر قبل از بستن فرم یک پیام اعلان م یدارد . true دارد. برای لغوکردن بسته شدن فرم، آن را

this.Closing += new CancelEventHandler(Form_Closing);

void Form_Closing(object sender, CancelEventArgs e)

{

فصل چهاردهم ایجاد برنامه های فرم ویندوز

205

if(MessageBox.Show("Are you sure you want to Exit?", "",MessageBoxButtons.YesNo)

== DialogResult.No)

{

//Cancel the closing of the form

e.Cancel = true;

}

}

-4-3-14 فعل و انفعال فرم ها – یک برنامه کاربردی نمونه

زمانی که چندین شی فرم ایجاد م ی شوند، باید یک روش برای دسترسی به حالت و محتوای کنتر ل های روی فرم دیگر وجود

داشته باشد . آن اساسا به تنظیم معر ف های دسترسی برای نمایش دادن فیلدها و خصوصیات روی هر فرم بستگی دار د . برای

که TextBox 8). فرم اصلی دوکنترل دار د : یک - بسازید .( شکل 14 modeless مثال، یک برنام ه ی کاربردی شامل دو فرم

که هنگام کلیک روی آن فرم جستجو باز م ی شود . فرم جستجو یک ، Search مستنداتی را نگه م ی دارد و یک دکم ه

دارد که متن مورد جستجو در سند فرم اصلی را م ی گیرد. بطور پیش فرض، عبارت مورد جستجو، متن ر وشن شده TextBox

در سند فرم اصلی است. آن متن می تواند مستقیما توسط کاربر وارد شود.

8- شکل 14

را فشار دهید، برنامه رخدادهای بعدی رشت ه ی مورد جستجو را در سند اصلی جستجو م ی کند . اگر Next زمانی که دکم ه ی

یک رخداد پیدا شود، آن روشن م ی شود. برای جالب تر شدن، روی فرم گ ز ینه های برای جستجوی رو به جلو و رو به عقب و

حساس به حروف نیز وجود دارد.

هدف اصلی توسع ه ی این برنامه، نحوه در دسترس قرار دادن اطلاعات کنتر ل های روی یک فرم برای فر م های دیگر اس ت . فرم

را برای فرم جستجو در اختیار قرار دهد تا آن ب ت واند یک رخداد رشته را روشن کن د . documentText اصلی باید محتوی

را در اختیار فرم اصلی قرار دهد تا هر متن روشن شده را قبل از انتقال کنترل به فرم txtSearch فرم جستجو باید محتوی

جستجو در آن قرار دهد.

به اشتراک م ی گذارد که زمان بارگذاری فرم به myText را از طریق یک فیلد بنام documentText محتوای ، DocForm

فرم جستجو را قادر می سازد public static به صورت myText انتساب داده می شود. تنظیم documentText مقدار

دسترسی داشته باشد. DoForm.myText به خصوصیات کادر متنی از طریق

public static TextBox myText; //Declare public variable

private void docForm_Load(object sender, System.EventArgs e)

{

myText = documentText;

}

را از طریق یک خصوصیت رشت های فقط نوشتنی به اشیاء دیگر نمایان می کند. txtSearch محتویات SearchForm

mohsen_mahyar@yahoo.com

206

public String SearchPhrase

{

set { txtSearch.Text = value;} //Write Only

}

ایجاد م ی کند، می تواند این خصوصیت را مقداردهی م ی کند. حال SearchForm همانند ه ر شیئی که یک نمونه از DocForm

به جزئیات باقیمانده در دو فرم توجه کنید.

کد فرم اصلی

را ایجاد م ی کند یا SearchForm کلیک می شود. برنامه کاربردی یک نمونه جدید از DocForm زمانی که دکم ه ی روی فرم

کنترل را به نمونه موجود رد م ی کند. در هر دو حالت، ابتدا کادر متنی را بررسی م ی کند و هر متن روشن شده

5) تکنیک های شرح - رد م ی کند. (مثال 14 SearchPhrase یا به خصوصیت SearchForm را به شی (SelectedText)

را از بسته شدن فرم DocForm داده شده در مثا ل های اخیر را برای ایجاد شی و تنظیم یک نماینده ا س تفاده م یکند تا شی

جستجو خبر دهد.

5- مثال 14

private void btnSearch_Click(object sender, System.EventArgs e)

{

//Create instance of search form if it does not exist

if (closed)

{

closed= false;

searchForm = new SearchForm(); //Create instance

searchForm.TopMost = true;

searchForm.Closed += new EventHandler(onSearchClosed);

searchForm.StartPosition = FormStartPosition.Manual;

searchForm.DesktopLocation = new Point(this.Right-٢٠٠,this.Top-٢٠);

searchForm.SearchPhrase = documentText.SelectedText;

searchForm.Show();

} else

{

searchForm.SearchPhrase = documentText.SelectedText;

searchForm.Activate();

}

}

private void onSearchClosed(object sender, System.EventArgs e)

{

closed= true;

}

کد فرم جستجو

را نشان می دهد. جستجوی وقوع بعدی رشته مورد جستجو FindNext 6 کد اجرا شده در زمان کلیک روی دکمه - مثال 14

به پایین پیمایش کن د . منطق برنامه IndexOf به بالا یا بوسیله متد LastIndexOf می تواند سند را با استفاده از متد

می تواند حساسیت حروف را نادیده گیرد یا در نظر گیرد.

6- مثال 14

private void btnFind_Click(object sender, System.EventArgs e)

{

int ib; //Index to indicate position of match

string myBuff = DocForm.myText.Text; //Text box contents

string searchText= this.txtSearch.Text; //Search string

int ln = searchText.Length; //Length of search string

if (ln>٠)

{

//Get current location of selected text

int selStart = DocForm.myText.SelectionStart;

فصل چهاردهم ایجاد برنامه های فرم ویندوز

207

if (selStart >= DocForm.myText.Text.Length)

{

ib = ٠;

} else

{

ib = selStart + ln;

}

if (!this.chkCase.Checked) //Case-insensitive search

{

searchText = searchText.ToUpper();

myBuff = myBuff.ToUpper();

}

if (this.radDown.Checked)ib =myBuff.IndexOf(searchText,ib);

if (this.radUp.Checked && ib>ln-١)ib =myBuff.LastIndexOf(searchText,ib-٢,ib-١);

if (ib >= ٠) //Highlight text on main form

{

DocForm.myText.SelectionStart = ib;

DocForm.myText.SelectionLength = txtSearch.Text.Length;

}

}

}

-5-3-14 فرم های مالک و ملک

را نشان م ی دهد، بطور پی ش فرض رابطه صریحی ما بین خود و فرم جدی د modeless زمانی که یک فرم نمون ه ای از یک فرم

ایجاد نمی کند، فرم ها بطور مستقل عمل م ی کنند. آنها می توانند بدون تأثیر روی فر م های دیگر بسته یا کوچک شون د . فرم

سازنده، هیچ روشی برای تمایز مابین این فر مها ندارد.

اغلب هر فرمی یک وابستگی روی فرم دیگر دار د . در مثال قبلی پنجره جستجوی شناور فقط به عنوان ی ک همراه برای

این NET. سندی که آن جستجو م ی کند، وجود دار د . رابطه آن با فرم ایجا د کننده اش رابطه مال ک - ملک 1 بیان م ی شود . در

دارد که م ی تواند نمونه ای از فرم مالک آن قرار Owner عمل می تواند بالاتر از یک رابطه منطقی باش د . فرم خصوصیتی بنام

داده شود . بعد از برقر اری این رابطه، رفتار فر م های مالک و ملک پیوند داده م ی شوند. برای مثال فرم ملک همواره در بالای

را در مثال قبلی حذف م یکند. TopMost به عنوان یک فرم SearchForm فرم مالک نمایان است. این عمل نیاز به تنظیم

یک فرم جدید ایجاد شده با فرم ایجاد کننده آن برقرار م یگردد. Owner یک رابطه مالک- ملک با تنظیم خصوصیت

opaque opForm = new opaque();

opForm.Owner = this; //Current form now owns new form

opForm.Show();

این رابطه تعامل کاربر با فرم را به سه روش تحت تأثیر قرار م ی دهد. حتی اگر مالک فعال باشد، فرم ملک همواره بالای فر م

مالک است . بستن فرم مالک، فرم ملک را م ی بندد و کوچ ک کردن فرم مالک، همه فر م های ملک را کوچک م ی کند و فقط یک

آیکون روی نوار وظیفه می ماند.

دارد که همه فر م های ملک ایجاد شده توسط آن را در OwnedForms مزیت دیگر اینکه یک فرم مالک، کلکسیونی بنام

2 را برای یک مالک نشان م ی دهد و سپس قبل از نمایش opForm و opForm برمی گیرد. مثال ز یر نحوه ایجاد دو فرم ملک

آنها، کلکسیونی را برای تنظیم عنوان هر فرم طی م یکند.

opaque opForm = new opaque();

opForm.Owner = this; //Set current form to owner form

opaque opForm٢ = new opaque();

opForm٢.Owner = this; //Set current form to owner form

for (int ndx=٠; ndx<this.OwnedForms.Length; ndx++)

{

myForms.Text = "Owner: Form١ - Form"+ndx.ToString();

1 Owner-owned

mohsen_mahyar@yahoo.com

208

myForms.Show();

}

بایستی صریحاً Owner ویژگی های یک فرم ملک را ارائه م ی کنند، خصوصیت Modal توجه داشته باشید، اگرچه فر م های

یک رابطه برقرار کند.

MDI فرم های

با یک پنجره برنامه کاربردی و چند پنجره سند توصیف م ی گردد. از نظر ساختار، آن به عنوان یک ظرف MDI یک برنامه

یک س یستم منو با MDI واحد برای نگ ه داشتن چندین سند استفاده م ی شود. برای مدیریت کلکسیون سندها، برنامه

گزینه های باز کردن، ذخیره کردن، بستن یک سند و سویچ مابین سندها، مرتب کردن سندها با چیدمان مختلف در بردارد.

قرار true فرم IsMdiContainer نیاز نیست، فقط لازم است خصوصیت MDI هیچ کلاس خاصی برای ایجاد یک برنامه

به فرم اصلی معین می شوند. MdiParent داده شود. فرم های فرزند با تنظیم خصوصیت

در بردار د : ظرف پدر ، فر م های فرزند و یک منو برای مدیریت MDI 9 سه عنصر نشان م ی دهد که یک فرم - شکل 14 MDI فرم

ایجاد، انتخاب و مرتب کردن فر مهای فرزند.

9- شکل 14

از طریق دستور زیر در سازند هی آن ایجاد می شود. MDI فرم ظرف

this.IsMdiContainer = true;

ایجاد می شوند. کد File-open یا File- New همچون File از نظر سنتی، فر مهای فرزند با انتخاب یک گزینه از منوی

آن را مقداردهی م یکند. MdiParent زیر یک نمونه از فرم فرزند ایجاد می کند و خصوصیت

invForm myForm = new invForm();

myForm.MdiParent = this;

mdiCt += mdiCt; //Count number of forms created

myForm.Text= "Invoice" + mdiCt.ToString();

myForm.Show();

هر فرم الحاق می کند. Text یک متغیر تعداد فر مهای ایجاد شده را می شمارد و برای شناسایی منحصر فرد آن به خصوصیت

MDI ایجاد یک منو و فرم

حداقل یک ،MDI بدون بررسی منوهای مورد نیاز و مدیریت پنجر ه های ظرف ناتمام اس ت . منوی فرم پدر MDI بحث فرم های

برای لیس ت کردن همه فر م های فرزند و انتخاب یک فرم Windows برای ایجاد یا بازیابی فر م ها و یک بخش File بخش

فرزند دارد.

فصل چهاردهم ایجاد برنامه های فرم ویندوز

209

به عنوان یک ظرف برای کل ساختار منو عمل م ی کند و کلاس MainMenu منوی اصلی از دو کلاس ایجاد م ی شود: کلاس

را MenuItems که اجزا منو را در منو نشان م ی دهد. 0هر دوی این کلا س ها، یک خصوصیت کلکسیون بنام MenuItem

نمایش می دهند که برای ایجاد سلسه مراتب منو بوسیله اضافه کردن اجزا منو استفاده م ی شود. بعد از اینکه اجزای منو

مشخص شدند، مرحله بعدی ربط دادن آنها به روا ل های مناسب، ادار ه کردن رویداد با استفاده از روشی شبیه نماینده اس ت .

را بررسی VS.Net 10 را دنبال کنی د . بعدا ایجاد منو در - مثال مربوط به ایجاد کردن منوی نمایش داده شده در شکل 14

سریعتر و ساد ه تر است، ولی انعطا ف پذیری لازم در ایجاد منوها در مقایسه VS.Net خواهیم کرد . ایجاد منوها با استفاده از

با زمان اجرا ندارد.

10- شکل 14

مرحله اول اعلان شی منوی اصلی و اجزا منو بصورت متغیرهای کلاس است.

private MainMenu mainMenu١;

private MenuItem menuItem١; //File

private MenuItem menuItem٢; //Edit

private MenuItem menuItem٣; //Window

private MenuItem menuItem۴; //File - New

منوی اصلی و اجزا منو در داخل سازند هی کلاس ایجاد می شوند .

this.mainMenu١ = new System.Windows.Forms.MainMenu();

this.menuItem١ = new System.Windows.Forms.MenuItem("File");

this.menuItem٢ = new System.Windows.Forms.MenuItem("Edit");

this.menuItem٣ = new System.Windows.Forms.MenuItem("Window");

this.menuItem۴ = new System.Windows.Forms.MenuItem("New");

سپس سلسه مراتب منو با اضاف ه کردن اجزا منو به شی منوی اصلی برای ایجاد نوار منو بنا م ی شوند. اجزا نوار منو، اجزا اضافه

هستند که منوی بازشو 1 را ایجاد می کنند . MenuItems شده به کلکسیون

//Add menu items to main menu object

this.mainMenu١.MenuItems.AddRange(new

System.Windows.Forms.MenuItem[] {

this.menuItem١,

this.menuItem٢,

this.menuItem٣});

//Add menu item below File

this.menuItem١.MenuItems.Add(this.menuItem۴);

//Add menu items to Window menu item

this.menuItem٣.MdiList = true; //Causes child forms to display

this.menuItem٣.MenuItems.AddRange(newSystem.Windows.Forms.MenuItem[]

{this.menuItem۵,this.menuItem۶, this.menuItem٧, this.menuItem٨});

//Set menu on form

this.Menu = this.mainMenu١;

نکات اصلی مورد توجه در این کد عبارتند از:

اضافه م یکنند. MenuItems یک یا چندین منو را به کلکسیون AddRange و Add • متدهای

1 popup menu

mohsen_mahyar@yahoo.com

210

باعث م ی شود یک لیست از فر م ها ی فرزند در زیر آن منو به عنوان یک زیر MdiList به خصوصیت true • انتساب

10 لیست می شو ند .) - 2 در شکل 14 Invoice و Invoice منو نمایش داده شوند.( 1

مقداردهی کنید. MainMenu ی فرم را با شی Menu • برای قرار دادن یک منو روی یک فرم، خصوصیت

گام نهایی، تنظیم کد اداره کردن رویدادها است که منطقی را برای پشتیبانی عملیات منوها فراهم م ی کند . این کد یک

تعریف م ی کند. این کد هر زمان که File-New نماینده و یک متد برای پشتیبان ی یک رویداد رها شده بوسیل ه ی کلیک روی

ایجاد می کند. invForm روی این منو کلیک شود یک نمونه از

//Following is defined in constructor

MenuItem۴.Click += new System.EventHandler(menuItem۴_Click);

private void menuItem۴_Click(object sender, System.EventArgs e)

{

invForm myForm = new invForm();

myForm.MdiParent = this;

mdiCt += mdiCt; //Count number of forms created

myForm.Text= "Invoice" + mdiCt.ToString();

myForm.Show();

}

را مجدداً مرتب کنی د . متد MDI روی نوار منو، زیر منویی دارد که ب ه شما اجازه م ی دهد فرم های فرزند ظرف Window گزینه ی

یک فرم ساده از این عمل را پیاده سازی م ی کند. بعد از تنظیم نمایند ه ها به روش معمول، روا ل های اداره کردن LayoutMdi

رویداد را ایجاد کنید.

private void menuItem۶_Click(object sender, System.EventArgs e)

{

this.LayoutMdi(MdiLayout.ArrangeIcons);

}

private void menuItem۶_Click(object sender, System.EventArgs e)

{

this.LayoutMdi(MdiLayout.Cascade);

}

private void menuItem٧_Click(object sender, System.EventArgs e)

{

this.LayoutMdi(MdiLayout.TileHorizontal);

}

private void menuItem٨_Click(object sender, System.EventArgs e)

{

this.LayoutMdi(MdiLayout.TileVertical);

}

مجدداً فرم های فرزند را مرتب م یکنند. LayoutMdi به متد MdiLayout متدها با رد کردن مقدار شمارشی مناسب

VS.NET با استفاده از MDI ایجاد یک منوی

دابل کلیک کنی د . دو چیز اتفاق م ی افتد: یک آیکون در قسمت قطع ه ها ظاهر ToolBox از پنجره MainMenu روی آیکون

می گردد و ی ک الگوی منوی لنگر انداخته به بالای فرم ظاهر م یگردد. عناوین منو را به سلولهای ظاهر شده تایپ کنید(شکل

11-14 ). ردیف افقی بالای سلو ل ها، نوار منو را نمایش م ی دهد. با حرکت عمودی، م ی توانید منوهای باز شو در زیر منوی سطح

VS.NET. برای منو ایجاد شود Click بالا را ایجاد کنی د . بعد از تای پ کردن نام منو، روی سلول دابل کلیک کنید تا یک رویداد

نماینده و بدنه ی متد را بطور اتوماتیک ایجاد م یکند.

11- شکل 14

فصل چهاردهم ایجاد برنامه های فرم ویندوز

211

را برای نمایش خصوصیات سلول فعال بکار برید، تا بتوانید اسامی پی ش فرض انتساب داده شده به Properties پنجره

منوها را تغییر دهید.

-4-14 کار با منوها

بخش قبلی، یک مقدم ه ی قوی در مورد منوها فراهم ساخ ت . این بخش یک لیست از خصوصیات موثر بر ظاهر منو و نحوه

را شرح می دهد. ContexMenu استفاده از کلاس

MenuItem -1 خصوصیات -4-14

با فلسفه سودمندگرایی طراحی شده اس ت . منو برای قشنگی نیست، بلکه برای انجام کار اس ت . حال چند NET. سیستم منوی

تا از خصوصیات مفید آنرا می آوریم.

دکمه ی منو را کدر کرده و آن را غیر قبل دسترس م یسازد . ، true مقداردهی آن با : Enabled

یک علامت در کنار متن منو قرار می دهد. :Checked

باشد . true باید Checked یک دکمه رادیویی کنار متن منو قرار می دهد. مقدار :RadioCheck

باعث می شود منو در یک ستون جدید قرار گیرد. true مقدار دهی آن با : Break یا BreakBar

تعریف م ی کند. این اعضا باعث م ی شوند که زمان فشار Shortcut یک کلید میا ن بر از اعضای نوع شمارشی :Shortcut

دادن این کلیدهای ترکیبی ، م نوی مورد نظر انتخاب شو د . با قرار دادن علامت & قبل از یک حرف در متن منو، آن حرف زیر

با آن حرف را به کار برید. Alt خط دار شده و برای فعال کردن آن منو کافی است ترکیب کلید

-2 منوهای زمینه -4-14

وجود دارد که از کلاس ContextMenu که بحث شد ه اند، یک کلاس بنام MenuItem وMainMenu علاوه بر کلا س های

به تک تک کنتر ل های تخصیص داده م ی شود و اغلب زمان فشار دادن کلیک ContexMenu ارث بری می کند. کلاس Menu

باز می شود. popup راست روی یک کنترل، یک منوی

است . تنها تفاوت این است که از نظر بصری نوار MainMenu همانند ContexMenu دستورات ساخت یک منو بر اساس

منوی سطح بالا وجود ندارد و منو در نزدیک کنترلی که احضار کرده ایم ظاهر می شود.

اسلام احمد زاده - 09177112161 - C# برنامهنویسی

212

یک منو م ی تواند به چندین کنترل مرتبط شود یا هر کنترل م ی تواند منوی مختص خود را داشته باش د . برای مثال، ممکن

و منوی دیگر برای همه دکم ه ها داشته باشی م . برای فهم بیشتر، یک TextBox است یک منوی زمینه برای همه کنتر ل های

(12- را رنگی می کند، ایجاد کنید.( شکل 14 TextBox منو که پشت زمینه ی کنترل

12- شکل 14

-3 ساختن یک منوی زمینه 1 -4-14

را روی ContextMenu استفاده م ی کنید، کن ترل VS.NET است . اگر از MainMenu ایجاد یک منوی زمینه، شبیه ایجاد یک

یک فرم کشیده و بطور بصری زیر منوها را اضافه کنی د . اگر بصورت دستی ک د نویسی م ی کنید، یک نمونه از کلاس

منوها را به آن اضافه کنی د . کد زیر نمونه ای از کد کاربر MenuItems.Add ایجاد کرده و با استفاده از متد ContextMenu

برای ایجاد منو است. توجه کنید که فقط یک متد، همه رویدادهای کلیک روی هر منو را اداره می کند.

private ContextMenu contextMenu١; //Context menu

private TextBox txtSearch; //Text box that will use menu

// Following is in constructor

contextMenu١ = new ContextMenu();

// Add menu items and event handler using Add method

contextMenu١.MenuItems.Add("Azure Background",new

System.EventHandler(this.menuItem_Click));

contextMenu١.MenuItems.Add("White Background",new

System.EventHandler(this.menuItem_Click));

contextMenu١.MenuItems.Add("Beige Background",new

System.EventHandler(this.menuItem_Click));

یک کنترل به آن کنترل نسبت داده م یشود. ContexMenu منوی کامل شده، بوسیله ی تنظیم خصوصیت

this.txtSearch.ContextMenu = this.contextMenu١;

باعث م ی شود، منو ظاهر گردد و با کلیک بر روی یکی از زیر منوها روال اداره کردن رویداد txtSearch کلیک راست روی

فراخوانی می شود:

private void menuItem_Click(object sender, System.EventArgs e)

{

//Sender identifies specific menu item selected

MenuItem conMi = (MenuItem) sender;

string txt = conMi.Text;

//SourceControl is control associated with this event

if(txt == "Azure Background")

this.contextMenu١.SourceControl.BackColor = Color.Azure;

if(txt == "White Background")

this.contextMenu١.SourceControl.BackColor = Color.White;

if(txt == "Beige Background")

this.contextMenu١.SourceControl.BackColor = Color.Beige;

}

1 context menu

فصل چهاردهم ایجاد برنامه های فرم ویندوز

213

که منوی انتخاب شده را معرفی م ی کند و خصوصیت sender دو چیز مهم م و رد توجه در این مثال، آرگومان

که منوی زمینه کنترل تخصیص یافته به این رویداد را معرفی م ی کند. توانایی معرفی کنترل و زیر منو، SourceControl

یک متد را قادر می سازد تا رویدادها را از هر کنترل روی فرم یا هر زیر منو در منوی زمینه اداره کن د.

-5-14 اضافه کردن کمک به یک فرم

اکثریت کاربران نرم افزار مستندات را نم ی خوانند. کاربران انتظار دارند برنامه مبنی بر در ک 1 باشد و مستندسازی حساس به

روی نوار منو، یک برن ا مه آرایش شده، باید یک دستیار Help متن را در هر جا که نیاز است فراهم کن د . علاوه بر گزین ه ی

چندین راه برای پیکربندی یک سیستم کمکی مجتمع پیشنهاد می کند. NET. . برای کنترل های روی فرم فراهم سازد

که زمان انتقال ماوس روی یک کنترل ظاهر م ی شود . اینها بصورت یک خصوصیت بوسیله ToolTip - کاربرد آسان

مشخص می شوند. ToolTip کنترل

یک بسط دهنده است که خصوصیاتی را به کنتر ل های موجود اضافه م ی کند . این خصوصیات HelpProvider - کنترل

ویندوز ارجاع کنند. CHM کنترل را قادر می سازند به فایل های

HelpRequested - یک اداره کننده ی سفارشی رویداد م یتواند برای پیاد هسازی کدی استفاده شود که بطور صریح رویداد

را اداره می کند. Help 1 یا با استفاده از دکمه F رها شده با فشار دادن کلید .Control

ها ToolTip-1-5-14

را از کادر ابزار انتخاب کنید و آنرا به فر م تان اضافه کنی د . اثر آن اضافه کردن ToolTip را بکار م ی برید، کنترل VS.NET اگر

روی هر کنترل است. در زمان قرار گرفتن ماوس روی هر کنترل ( string (ToolTip on toolTipl یک خصوصیت

مقدار آن نمایش داده م یشود.

در یک برنامه، حاشی ه نویسی را بطور اتوماتیک برای اشیا روی صفحه نمایش یا نقش ه ها ToolTip جالب تر از همه، کاربرد

فراهم می کند که بطور پویا در جواب به درخواس ت های کار بر ایجاد م ی شود. آنها نقاط جالب را بصورت برچس ب ها یا کادرهای

13 را ملاحظه کنی د . یک صورت فلکی و برچس ب هایی برای - تصویری در بردارن د . به عنوان یک مثال، تصویر شکل 14

ی که س  تاره را شرح ToolTip مهمترین ستاره ها نشان م ی دهد. زمانی که یک کاربر مکا ن نما را روی برچسب م ی برد، متن

می دهد، نمایش داده می شود.

13 را ایجاد م ی کند . خصوصیت - 7 یک بخش از کد را نشان م ی دهد که فرم نمایش داده شده در شکل 14 - مثال 14

تصویری که صورت فلکی را نشان م ی دهد قرار داده م ی شود. متناسب با موقعیت سه ستاره (که فقط ،BackGroundImage

هر برچسب، با توصیف ستاره Tag یک ستاره نشان د اده می شود)، برچسب ها روی آن قرار داده م ی شود. خصوصیت

بدست می آورد. SetToolTip این اطلاعات برچسب را با استفاده از متد ToolTip مقداردهی می شود و یک

13- شکل 14

1 intuitive

mohsen_mahyar@yahoo.com

214

7- مثال 14

public class StarMap:Form

{

public StarMap()

{

this.Text = "Star Search";

this.Width=۴٠٠;

this.Height=٢٢٠;

// Place image of constellation on form

this.BackgroundImage= new Bitmap(@"c:\dracoblack.gif");

// Add name of star on Label

Label star١ = new Label();

Star١.Location = new Point(٢٨۵،١١۵);

Star١.Size = new Size(۶٠،١۶);

star١.Text = "Thuban";

star١.Tag = " Alpha Draconis\n> Magnitude: ٣٫۶٧\n>"+ " ٣١٠ Light Years";

star١.Font = new Font(star.Font, star.Font.Style |FontStyle.Bold);

this.Controls.Add(star١);

ToolTip toolTip١ = new ToolTip();

toolTip١.AutoPopDelay= ١۵٠٠; // Tool tip displays

// for ١٫۵ secs.

// Tool tip text comes from Tag property of Label

toolTip١.SetToolTip(star١, star١.Tag.ToString());

// Add labels for other stars Etamin and Gianfar here ...

}

}

آن را اجرا RemoveAll کنترل را گرفته و متد ToolTip یک کنترل، باید ی ک نمونه از ToolTip توجه: برای تغییر مقدار

بکار ببرید. ToolTip را برای مقداردهی مجدد رشته SetToolTip کنید و سپس متد

Help 1 و دکمه F -2-5-14 پاسخ به

1 را با F پشتیبانی داخلی .NET . 1 به عنوان یک روش بالفعل برای احضار کمک اعتنا م ی کنند F کاربران زیادی به کلید

1 توسط کاربر فراهم م ی کند. همچنین هنگامی که کاربر F هنگام فشار دادن Control.HelpRequested رهاکردن رویداد

روی یک کنترل کلیک م ی کند رها Help در بالای فرم کلیک کرده و سپس با استفاده از مکا ن نمای Help روی دکمه

14 را ببینید. - می سازد. شکل 14

با تنظیم خصوصیات زیر نمایش داده می شود. Help دکمه ی

قرار دهید. false را MaximizeBox و MinimizeBox -

قرار دهید. true را HelpButton -

فصل چهاردهم ایجاد برنامه های فرم ویندوز

215

14- شکل 14

یک روش توصیه شده، ایجاد یک روال اداره کننده رویداد است و هر کنترلی آن را احضار م ی کند. به عنوان مثال، کد زیر

را آگاه ShowHelp متد HelpRequested نماینده هایی را برای دو کادر متنی تعریف م ی کند که زمان وقوع رویداد

تخصیص یافته به هر کنترل یا نام کنترل را جهت تعیین کمک مربوط به آن کنترل بکار Tag می سازند. این متد، خصوصیت

می برد.

this.date.HelpRequested += new HelpEventHandler(ShowHelp);

this.ssn.HelpRequested += new HelpEventHandler(ShowHelp);

this.ssn.Tag = "Enter as: nnn-nn-nnnn";

this.date.Tag = "Enter as: mm/dd/yyyy";

private void ShowHelp(object sender, HelpEventArgs e)

{

Control reqControl = (Control)sender;

// Technique ١: Use tag associated with control

MessageBox.Show(reqControl.Tag.ToString());

// Technique ٢: Link to specific text within a CHM file

string anchor = "#"+reqControl.Name;

// ShowHelp invokes a compiled Help file

Help.ShowHelp(reqControl,@"c:\ctest.chm",HelpNavigator.Topic,"customers.htm"

+anchor);

e.Handled = true; // Always set this

}

که کنترل کانو ن دار را در زمان وقوع رویداد تعیین م ی کند و sender : اداره کننده ی رویداد، دو آرگومان دریافت م ی کند

می تواند برای نشان دادن Handled را دارد . خصوصیت MousePos و Handled فقط دو خصوصیت HelpEventArgs

است که موقعیت ماوس را روی فرم مشخص Point یک نوع داد ه ی MousePos . رویدادی که اداره شده است استفاده شو د

اطلاعات کمکی را فراهم م یس ازد. ،Help می کند. این متد با تشخیص کنترل فعال و استفاده از این دانش جهت انتخاب متن

نمایش م ی دهد. دومین و جالبترین تکنیک Help یک کنترل را به عنوان پیام Tag در این مثال، اولین تکنیک، خصوصیت

بکار م ی برد که نام کنترل را استفاده م ی کند. بویژه در داخل HTML را برای نمایش بخشی از یک فایل Help.ShowHelp متد

a > را جستجو می کند. سپس آن صفحه را برای یک برچسب نا مدار همچون Customers.htm صفحه ،Ctest.chm فایل

را در آن موقعیت نمایش می دهد. HTML ، جستجو می کند. اگر پیدا شود <Name=sss

کامپایل شده یا Help را برای نمایش فای ل های OverLoad است . آن چندین Help مفیدترین متد کلاس ShowHelp متد

دارد. HTML Help در یک فرمت HTML فایل های

// URL may be .chm file or html file

public static void ShowHelp(Control parent, string url);

// HelpNavigator defines the type of .chm file to be displayed

public static void ShowHelp(Control parent, string url,HelpNavigator navigator);

// Displays contents of Help file for a specified keyword

public static void ShowHelp(Control parent, string url,string keyword);

// param is used with HelpNavigator.Topic to refine selection

public static void ShowHelp(Control parent, string url,HelpNavigator navigator,

object param);

اسلام احمد زاده - 09177112161 - C# برنامهنویسی

216

نمایش داده شو د . اعضای آن CHM مشخص می کند، کدام بخش از یک فایل HelpNavigator نوع شمارشی

کامپایل شده، Help هستند . اگر با این مفاهیم آشنا نیستند، فای ل های Topic و Index ،Find،TableofContents

را با یک جدول اختیاری از محتویات و اندی س های کلمه ک ل یدی بست ه بندی م ی کنند . نرم افزار HTML چندین فایل

ساده ترین روش برای یادگیری نحوه استفاده و ایجاد این فایل ها است . Microsoft HTML Help Workshop

HelpProvider -3-5-14 کنترل

اس ت. آن HelpRequested استفاده م ی شود. ارزش اصلی آن حذف نیاز به اداره کردن صریح رویداد VS.NET این کنترل با

ShowHelp یک بسط دهنده است که چندین خصوصیت به هر کنترل اضافه م ی کند. این خصوصیات با پارامترهای مت د

از کادر ابزار، آنرا به فرم اضافه کنی د . سپس HelpProvider متناسب هستند که آنرا فراخوانی م ی کنند. با انتخاب

قراردهید که متد به آن ارجاع خواهد کر د . 4 خصوصیت بسط افته CHM یا HTML آنرا نام فایل HelpNameSpace خصوصیت

به هر کنترل روی فرم اضافه می ند.

قرار دهید. true آن را Help برای فعال ردن ویژگی :ShowHelp -1

را می گیرد. HelpNavigator مقدار شمارشی :HelpNavigator -2

مربوط می شود. ShowHelp در متد params یا keyword به پارامتر :HelpKeyWord -3

برای کلیک روی یک کنترل استفاده می شود، متن این پیام نمایش داده م یشود . Help زمانی که دکمه :HelpString -4

قرار داده شود، اما بقیه خصوصیات آن true است، فعال نمی شود. اگر آن false آن ShowHelp برای کنترلی که Help

فقط تنظیم مقدار Help نمایش داده م ی شود. پیکربندی عمومی HelpNameSpace تنظیم نشوند، فایل ا ر جاع داده شده در

را باز می کند. HTML یک صفحه F یک پیام خاص کوتاه را نشان می دهد و 1 Help است که دکمه HelpString

-6-14 وراثت فرم ها

می تواند تنظ یمات، خصوصیات وچارچوب کنترل یک فرم موجود را به GUI همانند وراثت یک کلاس از کلاس پایه، یک فرم

ارث برد . بدین معنی که می توانید فرم هایی را با ویژگ یهای استاندارد جهت بکار رفتن به عنوان الگوهایی برای فرمهای

مشتق شده ایجاد کنی د . قبل از نگاه کردن به جزئیات وراثت فر م ها، ابتدا نحوه ذخیره یک مجموعه از فرم ه ا ی پایه را در یک

کتابخانه کد و سازما ندهی آنها بوسیله فضای نامی را بررسی م یکنیم.

-1 ایجاد و استفاده یک کتابخانه از فرم ها -6-14

به داخل یک فایل مشترک CS دارد . یک کتابخانه از چندین فرم، بوسیله کامپای ل کردن هر فایل CS هر فرم یک فایل فیزیکی

ایجاد می شود.بعد از این کار، فر مها می توانند بوسیله هر زبان مطیع دستیابی شوند. dll

واحد بکار می بریم. dll به عنوان مثال: کامپایلر را از خط فرمان برای کامپای لکردن دو فرم به داخل یک فایل

csc /t:library product.cs customer.cs /out:ADCFormLib.dll

Products یک فرم پایه باید یک فضای نامی برای فرم مشتق شده فراهم کند تا آن را ارجاع کن د . کد زیر یک فضای اسم ی

برای مثال ما تعریف می کند.

namespace Products

{

public class ProductForm : System.Windows.Forms.Form

{

فصل چهاردهم ایجاد برنامه های فرم ویندوز

217

برای وراثت از این فرم، یک کلاس گرامر استاندارد وراثت را بکار م ی برد و کلاس پ ایه را بوسیله فضای نامی آن و نام کلاس

معین می کند.

// User Form derived from base class Form

class NewProductForm: Products.ProductForm

{

VS.NET بدهد تا بتواند کلاس پایه را بیاب د . اگر ADCFormlib در مرحله نهایی، کامپایلر باید یک ارجاع به اسمبلی خارجی

را برای تعیین اسمبلی استفاده کنید و در خط فرمان پرچم Add Reference گزینه Project را بکار می برید از منوی

استفاده می شود. reference

csc /t:winexe /r:ADCFormLib.dll myApp.cs

-2 کاربرد فرم ار ثبری شده -6-14

اگر فرم مشتق شده هیچ کد اضافی فراهم نکند، در زمان اجرا یک ف رم مشابه فرم اصلی تولید م ی کند. البته، فرم مشتق شده

برای اضافه کردن کنتر ل ها و کد پشتیبان آزاد اس ت . تنها محدودیت این است که به یک منوی موجود نم ی توان چیزی اضافه

کرد. با این وجود یک منوی کامل می تواند به فرم اضافه شود یا جایگزین منوی فرم اصلی شود.

به private خصوصیات ک نترل های ارث بری شده م ی توانند تغییر یابند، اما معرف دسترسی پی ش فرض آنها باید از

تغییر یابد و فرم اصلی مجدداً کامپایل شو د . فرم مشتق شده برای ایجاد تغییرات آزاد اس ت . آن ممکن است protected

قرار دهد تا نمایش داده نشوند. false کنترل ها را Visible موقعیت کنترل ها را تغییر دهد، حتی خصوصیت

کردن رویدادها Override-3 -6-36

فرض کنید فرم پایه یک دکمه دارد که به رویداد کلیک با فراخوانی کد اداره کننده رویداد جهت بستن فرم پاسخ م ی دهد. با

این وجود، در فرم مشتق شده، م ی خواهید کنترل بازبینی داد ه ها را قبل از بستن فرم اضافه کنی د . کار طبیعی اضافه کردن

دکمه در فرم مشتق شده اس ت . با این وجود، این Click یک نماینده و متد اداره کننده رویداد برای پاسخ دادن به رویدا د

نمی کند و هر دو روال اداره کردن رویداد فراخوانی م یشوند. Override عمل ،اداره کننده رویداد اصلی در فرم پایه را

تغییر ساختار اداره کننده اصلی رویداد برای فراخوانی یک متد مجازی را ه حل مناسبی است که در فرم مشتق شده م ی تواند

شود. این مثالی از کد کلاس پایه است. Override

private void btn١_Clicked(object sender, System.EventArgs e)

{

ButtonClicks(); // Have virtual method do actual work

}

protected virtual void ButtonClicks()

{

this.Close();

}

می کند و کد خود را برای ادار هکردن رویداد دارد. Override فرم مشتق شده، متد مجازی را

protected override void ButtonClicks()

{

// Code to perform any data validation

this.Close();

}

mohsen_mahyar@yahoo.com

218

VS.NET -4 ایجاد فر مهای ارث بری شده با -6-14

یک پروژه شامل فرم پایه خود را باز کرده و آن را کامپایل کنی د . ، VS.NET برای ایجاد یک فرم ار ث بری شده با استفاده از

را انتخاب کنید. یک نام جدید به آن داده و آن را باز کنید . سپ س Project - Add Inherited Form سپس منوی

را برای Browse . ظاهر می گردد که فرم های پایه مطلوب را لیست م ی کند Inheritance Picker یک کادر محاور های

نمایش فرم هایی که در کتابخانه های خارجی هستند بکار برید.

-7-14 خلاصه

برخلاف مهاجرت به سمت برنامه های کاربردی تحت اینترنت، هنوز نیاز ضروری به برنام هنویسی ویندوز داریم. 􀂃

فرم های ویندوز ویژگ ی ها و عملکردهای برتر از فر م های وب فراهم م ی کنند. اکثریت برنامه های دنیای واقعی روی 􀂃

یک مجموعه ی گرانبها از کلا سها برای پشتیبانی برنامه نویسی فرم ه ا . NET FCL. شبکه های محلی اجرا می شوند

فراهم می کند.

در با لا ی سلسله مراتب، خصوصیات، متدها و رویدادهایی را فراهم می کند تا اجازه دهد کنتر ل ها Control کلاس 􀂃

روی فر مها، موقعیت یابی و دستکاری شوند.

رویدادهای صفحه کلید و ماوس یک برنامه را برای تشخیص هر کلیدی یا کلیک دکم ههای ماوس قادر می سازند. 􀂃

را به ارث می برد و خصوصی ت هایی به آن برای تعیین ظاهر، موقعیت و Control همه اعضای کلاس Form کلاس 􀂃

رابطه با فر مهای دیگر اضافه می کند.

باشد، یعنی تا زمانی که باز است کانون را از دست نم ی دهد یا modal یک فرم ایجاد شده با فرم دیگر، م ی تواند 􀂃

باشد که کانون می تواند به هر فرمی جابجا شود. modeless می تواند

یک فرم به عنوان یک ظرف برای نگ ه داشتن فرم های فرزند به خدمت گرفته م ی شود . ظرف ،MDI در یک برنام ه ی 􀂃

یک منو برای انتخاب کردن یا مرتب کردن مجدد فر مهای فرزند فراهم می کند.

رها م ی سازد. این می تواند با متد HelpRequested یک رویداد .NET ، 1 را فشار م ی دهد F زمانی که کاربر کلید 􀂃

کامپایل شده را پشتیبانی می کند تا یک توسعه دهنده را برای (HTML (.chm ترکیب شود که فایل های Help

فراهم کردن اطلاعات کمکی روی فرم قادر سازد.

 

 

mohsen_mahyar@yahoo.com

 

   + MOHSEN GHASEMI - ٧:٠٤ ‎ق.ظ ; ۱۳۸٩/٤/۱٧