کنترل ها

کنترل‌ها اجزای بصری هستند که به وسیله‌ی آنها محیط‌های گرافیکی (GUI) ساخته می‌شود. هرچیزی که شما در یک محیط گرافیکی می‌بینید یک کنترل است. کنترل‌ها در دسته‌های مختلفی در قسمت نوار ابزار قرار دارند که در شکل زیر آنها را مشاهده می کنید:

خواص کنترل‌ها

در قسمت زیر بعضی از خاصیت های مفید کلاس Control را مشاهده می‌کنید.

خاصیت توضیح
Background رنگ پس زمینه‌ی کنترل را مشخص می‌کند.
BorderBrush رنگ پس زمینه‌ و خطوط اطراف کنترل را مشخص می‌کند.
BorderThickness ضخامت خطوط اطراف کنترل را مشخص می‌کند.
ContextMenu به شما اجازه می‌دهد که یک توضیح را به کنترل خود در مورد آن اضافه کنید.
Cursor شکل نشانگر ماوس وقتی که ماوس بر روی کنترل قرار می‌گیرد را مشخص می‌کند.
Focusable فوکوس گرفتن یا نگرفتن یک کنترل را مشخص می‌کند.
FontFamily نوع فونت کنترل را مشخص می‌کند.
FontSize اندازه فونت کنترل را مشخص می‌کند.
FontStyle سبک فونت را مشخص می‌کند. برای مثال Italic ،Oblique و … .
FontWeight وزن یا ضخامت فونت را مشخص می‌کند.
Foreground رنگ زمینه فونت را مشخص می‌کند.
HandlesScrolling مشخص می‌کند که آیا کنترل مورد نظر از اسکرول پشتیبانی می‌کند یا خیر.
Height ارتفاع عنصر مورد نظر را مشخص می‌کند.
HorizontalAlignment به شما اجازه می‌دهد تا مکان قرار گیری عناصر را در جهت افقی مشخص کنید. مقادیری که می‌تواند بگیر عبارتند از : Center ،Right ،Left و Stretch
HorizontalContentAlignment به شما اجازه می‌دهد تا مکان قرار گیری محتوای یک کنترل را در جهت افقی مشخص کنید.
IsEnabled مشخص می‌کند که آیا کنترل فعال است یا خیر.
IsFocused مشخص می‌کند که آیا بر روی کنترل فوکوس شده است یا خیر.
IsLoaded مشخص می‌کند که آیا کنترل برای نمایش در صفحه بارگذاری شده است یا خیر.
IsMouseOver مشخص می‌کند که آیا کرسر ماوس بر روی کنترل قرار گرفته است یا خیر.
IsTabStop مشخص می‌کند که آیا این امکان وجود دارد که با استفاده از کلید Tab بر روی کنترل مورد نظر فوکوس کنیم یا خیر.
IsVisible مشخص می‌کند که آیا کنترل قابل نمایش است یا خیر.
Language به شما اجازه می‌دهد تا تنظیمات زبان را برای کنترل مشخص کنید. برای مثال می‌توانید مشخص کنید که برنامه ممیز را به شکلی نمایش دهد. چون ممیز را می‌توانیم با استفاده از کاراکتر “.” یا “/” نمایش دهیم.
LayoutTransform به شما اجازه می‌دهد تا یک انتقال گرافیکی را برای اعمال به کنترل خود تعیین کنید. برای مثال با استفاده از این خاصیت می‌توانید یک دکمه را به اندازه 45 درجه بچرخانید.
Margin به شما اجازه می‌دهد تا یک حاشیه را اطراف عنصر مورد نظر خود ایجاد کنید.
MaxHeight به شما اجازه می‌دهد تا حداکثر ارتفاع ممکن برای عنصر مورد نظر خود را تعیین کنید.
MaxWidth به شما اجازه می‌دهد تا حداکثر عرض ممکن برای عنصر مورد نظر خود را تعیین کنید.
MinHeight به شما اجازه می‌دهد تا حداقل ارتفاع ممکن برای عنصر مورد نظر خود را تعیین کنید.
MinWidth به شما اجازه می‌دهد تا حداقل عرض ممکن برای عنصر مورد نظر خود را تعیین کنید.
Name به شما اجازه می‌دهد تا یک نام را برای کنترل خود در نظر بگیرید تا با استفاده از آن نام بتوانید در کدهای سی شارپ به آن کنترل دسترسی داشته باشید.
Opacity به شما اجازه می‌دهد تا میزان شفافیت یک کنترل را مشخص کنید.
Padding به شما اجازه می‌دهد تا یک حاشیه را داخل فضای کنترل ایجاد کنید.
Parent به شما اجازه می‌دهد تا والد منطقی، عنصر فعلی را مشخص کنید.
TabIndex به ما اجازه می‌دهد تا ترتیب عناصر را زمانی که کاربر کلید TAB را فشار می‌دهد مشخص کنید.
ToolTip به شما اجازه می‌دهد تا یک ToolTip را برای کنترل خود ایجاد کنید. به این ترتیب زمانی که کرسر ماوس برای چند لحظه بر روی کنترل مورد نظر شما قرار بگیرد، محتوایی که در ToolTip مشخص کردید نمایش داده می‌شود. این محتوا می‌تواند برای مثال یک متن ساده یا یک تصویر باشد.
VerticalAlignment به شما اجازه می‌دهد تا مکان قرار گیری عناصر را در جهت عمودی مشخص کنید. مقادیری که می‌تواند بگیر عبارتند از : Center ،Right ،Left و Stretch
VerticalContentAlignment به شما اجازه می‌دهد تا مکان قرار گیری محتوای یک کنترل را در جهت عمودی مشخص کنید.
Visibility وضعیت نمایش یک کنترل را مشخص می‌کند.
Width به شما اجازه می‌دهد تا عرض یک کنترل را مشخص کنید.

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

تغییر رنگ پس زمینه کنترل

ما از خاصیت Background کنترل برای تغییر رنگ زمینه‌ی آن استفاده می‌کنیم. خاصیت Brush را در پنجره‌ی Properties پیدا کنید و بر روی فلش کوچک کنار آن کلیک کنید. شما یک پنجره با 5 سربرگ مشاهده می‌کنید. هر سربرگ کار خاصی انجام می‌دهد.

سربرگ 1 یا No Brush رنگ و عکس پس زمینه کنترل را حذف می‌کند.
سربرگ 2 یا Solid color brush یک طیف رنگی در اخیار شما قرار می‌دهد و شما می‌توانید یک رنگ برای پس زمینه کنترل انتخاب کنید.
سربرگ 3 یا Gradient brush یک پس زمینه به صورت طیف رنگی ایجاد می‌کند.
سربرگ 4 یا Tile brush یک عکس به پس زمینه کنترل اختصاص می‌دهد.
سربرگ 5 یا Tile brush شامل رنگ‌هایی است که برای استفاده در صفحات وب مناسب هستند.

اضافه کردن یک عکس به زمینه‌ی کنترل

شما می‌توانید عکس زمینه‌ی یک کنترل را به وسیله‌ی خاصیت Tile brush تغییر دهید. به عنوان مثال ما می‌خواهیم عکس زمینه‌ی یک فرم را تغییر دهیم. برای اینکار ابتدا فرم را انتخاب کرده و سپس به پنجره‌ی Properties رفته و خاصیت Tile brush را انتخاب می‌کنیم. در این قسمت کادری وجود دارد که به ما اجازه می‌دهد آدرس تصویر خود را مشخص کنیم:

پس از وارد کردن آدرس عکس، یک پیشنمایش از آن به صورت زیر نمایش داده می‌شود:

حالت قرار گیری و سایز تصویر ممکن است چیزی نباشد که شما انتظار داشته‌اید. می‌توان از خاصیت‌های TileMode و Stretch به صورت زیر استفاده کرد:

خاصیت Name

از خاصیت Name برای نامگذاری کنترل‌ها استفاده می‌شود :

نامی که به کنترل اختصاص می‌دهیم در کد نویسی به درد ما می‌خورد. فرض کنید که یک دکمه قرار است عملیات ذخیره اطلاعات در دیتابیس را انجام دهد. برای این منظور خاصیت Name آن را به buttonSave تغییر می‌دهیم تا در محیط کدنویسی آن را راحت‌تر شناسایی کنیم :

حال اگر بر روی آن دوبار کلیک کنید، مشاهده می‌کنید که نام دکمه همان نامی است که در خاصیت Name به آن اختصاص داده‌ایم :

و اگر در محیط کدنویسی به دنبال آن بگردیم، پیدا کردن این کنترل بسیار راحت است :

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

تغییر قلم متن یک کنترل

ما می‌توانیم نوع قلم، رنگ، سایز، و حالت قلم یک کنترل را به وسیله‌ی خواص Brush و Text تغییر دهیم. برای مثال ما یک دکمه را ایجاد می‌کنیم.

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

منوی باز شونده FontFamily که نوع قلم را تعریف می‌کند. منوی باز شونده FontSize اندازه‌ی قلم را مشخص می‌کند. از آیکون‌های پایینی برای ضخیم و کج کردن متن کنترل به کار استفاده می‌شود. در حالیکه دکمه در حالت انتخاب است، خاصیت Btush را پیدا کنید. یکی از زیر مجموعه‌های این خاصیت، خاصیت Forground است که از آن برای تغییر رنگ متن دکمه می‌توان استفاده نمود:

فعال کردن و غیر فعال کردن یک کنترل

می‌توان از خاصیت IsEnabled برای فعال کردن یا غیر فعال کردن یک کنترل استفاده کنیم. برای غیر فعال کردن یک کنترل کافیست تیک کنار این خاصیت را بر داریم که در اینصورت مقدار خاصیت برابر False شده و کنترل غیر فعال می شود:

وقتی یک کنترل را غیر فعال می‌شود، ظاهر آن تغییر می‌کند. برای مثال، وقتی ما یک دکمه را غیر فعال می‌کنیم (خاصیت IsEnabled آنرا برابر False قرار می‌دهیم)، رنگ و ظاهر آن تغییر می‌کند:

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

رویدادهای کنترل

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

رویداد توضیح
ContextMenuClosing زمانی اتفاق می افتد که کنترل Context Menu نمایش داده شده بر روی کنترل مورد نظر ما بسته شود.
ContextMenuOpening زمانی اتفاق می افتد که کنترل Context Menu نمایش داده شده بر روی کنترل مورد نظر ما باز شود.
DataContextChanged زمانی اتفاق می افتد که DataContext کنترل ما تغییر کند.
DragEnter زمانی اتفاق می افتد که یک شیء به داخل محیط کنترل ما کشیده شود.
DragLeave زمانی اتفاق می افتد که یک شیء از محیط کنترل ما به بیرون کشیده شود.
DragOver زمانی اتفاق می افتد که یک شیء در محیط کنترل ما کشیده شود.
Drop زمانی اتفاق می افتد که یک شیء داخل محیط کنترل ما رها شود.
FocusableChanged زمانی اتفاق می افتد که مقدار خاصیت Focusable تغییر کند.
GotFocus زمانی اتفاق می افتد که بر روی عنصر ما فوکوس شود.
Initialized زمانی اتفاق می افتد که FrameworkElement مقداردهی اولیه شود. همچنین زمانی که این رویداد اتفاق می افتد، به صورت همزمان مقدار خاصیت IsInitialized هم از false به true تغییر می‌کند.
IsEnabledChanged زمانی اتفاق می افتد که مقدار خاصیت IsEnabled تغییر کند.
IsVisibleChanged زمانی اتفاق می افتد که مقدار خاصیت IsVisible تغییر کند.
KeyDown زمانی اتفاق می افتد که یکی از کلیدهای کیبورد در حالی که بر روی کنترل مورد نظر ما فوکوس شده است، فشرده شود.
KeyUp زمانی اتفاق می افتد که یکی از کلیدهای کیبورد در حالی که بر روی کنترل مورد نظر ما فوکوس شده است، رها شود.
Loaded زمانی اتفاق می افتد که کنترل مورد نظر ما نمایش داده شده باشد.
LostFocus زمانی اتفاق می افتد که فوکوس از روی عنصر مورد نظر ما برداشته شود.
MouseDoubleClick زمانی اتفاق می افتد که یکی از دکمه‌های ماوس دوبار یا بیشتر کلیک شود.
MouseDown زمانی اتفاق می افتد که یکی از دکمه‌های ماوس در حالی که کرسر بر روی کنترل مورد نظر ما قرار دارد، فشرده شود.
MouseEnter زمانی اتفاق می افتد که کرسر ماوس وارد محیط کنترل مورد نظر ما شود.
MouseLeave زمانی اتفاق می افتد که کرسر ماوس از محیط کنترل مورد نظر ما خارج شود.
MouseLeftButtonDown زمانی اتفاق می افتد که دکمه چپ ماوس در حالی که کرسر بر روی کنترل مورد نظر ما قرار دارد، فشرده شود.
MouseLeftButtonUp زمانی اتفاق می افتد که دکمه چپ ماوس در حالی که کرسر بر روی کنترل مورد نظر ما قرار دارد، رها شود.
MouseMove زمانی اتفاق می افتد که کرسر ماوس درحالی که بر روی کنترل مورد نظر ما قرار دارد حرکت کند.
MouseRightButtonDown زمانی اتفاق می افتد که دکمه راست ماوس در حالی که کرسر بر روی کنترل مورد نظر ما قرار دارد، فشرده شود.
MouseRightButtonUp زمانی اتفاق می افتد که دکمه راست ماوس در حالی که کرسر بر روی کنترل مورد نظر ما قرار دارد، رها شود.
MouseUp زمانی اتفاق می افتد که یکی از دکمه‌های ماوس در حالی که کرسر بر روی کنترل مورد نظر ما قرار دارد، رها شود.
MouseWheel زمانی اتفاق می افتد که غلطک ماوس در حالی که کرسر بر روی کنترل مورد نظر ما قرار دارد حرکت داده شود.
QueryContinueDrag زمانی اتفاق می افتد که تغییری در وضعیت دکمه ماوس یا کیبورد در حین عملیات کشیدن و رها کردن، رخ دهد.
QueryCursor این رویداد زمانی اتفاق می افتد که مکان کرسر ماوس تغییر کند.
SizeChanged زمانی اتفاق می افتد که مقدار خاصیت ActualWidth یا ActualHeight تغییر کند.
SourceUpdated زمانی اتفاق می افتد که مقدار یک خاصیت منبع در اتصال داده‌ها تغییر کند.
TargetUpdated زمانی اتفاق می افتد که مقدار یک خاصیت مقصد در اتصال داده‌ها تغییر کند.
TextInput زمانی اتفاق می افتد یک کاراکتر تایپ شود. این کاراکتر می‌تواند نتیجه فشردن چندین کلید کیبورد باشد. برای مثال زمانی که کلید ALT را نگه دارید و عدد 789 را (در NumPad) تایپ کنید کاراکتر § را برای شما نمایش می‌دهد. در اینجا چهار رویداد KeyDown و یک رویداد TextInput اتفاق می افتد. به عبارت دیگر رویداد KeyDown هر زمان که یک کلید فشرده شود اتفاق می افتد ولی TextInput فقط زمانی اتفاق می افتد که فشردن کلیدها به اتمام رسیده باشد
ToolTipClosing قبل از بسته شدن ToolTip نمایش داده شده بر روی کنترل مورد نظر ما اتفاق می افتد.
ToolTipOpening زمانی که ToolTip بر روی کنترل نمایش داده می‌شود اتفاق می افتد.
TouchDown زمانی که صفحه نمایش را در حالی که انگشتمان بر روی کنترل مورد نظر است لمس کنیم، این رویداد اتفاق می افتد.
TouchEnter زمانی که انگشتمان را بر روی صفحه نمایش از بیرون به داخل محیط کنترل مورد نظر حرکت دهیم این رویداد اتفاق می افتد.
TouchLeave زمانی که انگشتمان را بر روی صفحه نمایش از داخل به بیرون محیط کنترل مورد نظر حرکت دهیم این رویداد اتفاق می افتد.
TouchMove زمانی که انگشتمان را بر روی صفحه نمایش در محیط کنترل مورد نظرحرکت دهیم این رویداد اتفاق می افتد.
TouchUp زمانی که انگشتمان را در حالی که بر روی کنترل مورد نظر است برداریم، این رویداد اتفاق می افتد.
Unloaded زمانی اتفاق می افتد که یک عنصر را از درخت عناصر بارگذاری شده حذف کنیم.

در مورد بیشتر رویدادهای بالا در بخش‌های آینده صحبت خواهیم کرد..