کنترل ها

کنترل‌ها اجزای بصری هستند که به وسیله‌ی آنها محیط‌های گرافیکی (GUI) ساخته می‌شود. هرچیزی که شما در یک محیط گرافیکی می‌بینید یک کنترل است، حتی محیط فرم نیز یک کنترل است. کنترل‌ها در دسته‌های مختلفی در قسمت نوار ابزار قرار دارند. بیشتر کنترل‌ها از کلاس پایه System.Windows.Forms.Control ارث بری می‌کنند که دارای خواص، متدها و رویدادهای متفاوتی برای آن‌ها می‌باشد.

 

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

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

خاصیت توضیح
Anchor این گزینه مشخص می‌کند که کنترل‌ها وقتی که سایز فرم تغییر می‌کند چگونه محل و سایزشان تغییر کند.
AutoSize وقتی که مقدار آن برابر با True باشد، سایز کنترل به صورت اتوماتیک براساس محتوای آن تغییر می‌کند.
BackColor رنگ قسمت زمینه‌ی کنترل را مشخص می‌کند.
BackgroundImage به شما اجازه می‌دهد که یک عکس به زمینه‌ی کنترل خود اضافه کنید.
BackgroundImageLayout حالت عکس زمینه‌ی کنترل را مشخص می‌کند.
ContextMenuStrip به شما اجازه می‌دهد که یک توضیح را به کنترل خود در مورد آن اضافه کنید.
Controls مجموعه‌ای از کنترل‌های مرتبط با کنترل مربوطه را نشان می‌دهد.
Dock کنترل را به یکی از لبه‌های پنجره می‌چسباند.
Enabled این قسمت مشخص می‌کند که کنترل فعال است یا نه. اگر مقدار آن False باشد کنترل غیرفعال می‌شود.
ForeColor رنگ پیش زمینه‌ی کنترل و همچنین رنگ قلم کنترل را مشخص می‌کند.
Height طول کنترل را بر مبنای پیکسل مشخص می‌کند.
Location محل کنترل بر اساس در بر دارنده‌ی آن را مشخص می‌کند.
Locked مشخص می‌کند که کنترل در حالت Design می‌تواند جابجا شود و یا تغییر سایز دهد یا نه.
MaximumSize حداکثر اندازه‌ای که کنترل می‌تواند داشته باشد را مشخص می‌کند.
Margin فاصله‌ی بین لبه‌های کنترل مربوطه و لبه‌ی کنترل دیگر را مشخص می‌کند.
MinimumSize کمترین سایز کنترل را مشخص می‌کند.
Name نام کنترل را مشخص می‌کند. این نام برای اشاره به کنترل در زمان کد نویسی استفاده می‌شود.
Parent والد کنترل را مشخص می‌کند.
Right فاصله‌ی بین ضلع راست کنترل و ضلع چپ در بردارنده ی آن را مشخص می‌کند.
Size سایز کنترل را مشخص می‌کند. این بخش شامل طول و عرض کنترل است.
TabIndex با اختصاص یک عدد یه این خاصیت مشخص می‌کنیم که با چند بار زدن دکمه Tab، کنترل فوکوس بگیرد.
TabStop مشخص می‌کند که یک کنترل می‌تواند توسط دکمه‌ی Tab مورد دستیابی قرار گیرد یا خیر.
Text متنی که در داخل کنترل قرار می‌گیرد.
TextAlign نحوه‌ی قرار گیری متن در داخل کنترل را مشخص می‌کند.
Top فاصله‌ی بین ضلع بالایی کنترل و ضلع بالایی در بر دارنده‌ی آن را مشخص می‌کند.
Visible نمایان بودن و نمایان نبودن کنترل را مشخص می‌کند.
Width عرض کنترل براساس پیکسل را مشخص می‌کند.

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

 

تغییر رنگ زمینه‌ی کنترل

ما از مشخصه‌ی BackColor کنترل برای تغییر رنگ زمینه‌ی آن استفاده می‌کنیم. مشخصه‌ی BackColor را در پنجره‌ی Properties پیدا کنید و بر روی نوار کرکره‌ای کنار آن کلیک کنید. شما یک پنجره با سه سربرگ مشاهده می‌کنید. هر سربرگ حاوی رنگ‌های مختلفی است.
controls-01
سربرگ System شامل رنگ‌هایی است که سیستم عامل به طور پیش فرض برای رنگ آمیزی کنترل‌ها از آنها استفاده می‌کند.
سربرگ Web شامل رنگ‌هایی است که برای استفاده در صفحات وب مناسب هستند.
سربرگ Custom شامل رنگهای بسیار زیادی است. در این سر برگ شما می‌توانید مقادیر RGB آن را در نوارها مربوطه وارد کنید.

 

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

شما می‌توانید عکس زمینه‌ی یک کنترل را به وسیله‌ی مشخصه‌ی BackgroundImage تغییر دهید. به عنوان مثال ما می‌خواهیم عکس زمینه‌ی یک فرم را تغییر دهیم. برای اینکار ابتدا فرم را انتخاب کرده و سپس به پنجره‌ی Properties رفته و مشخصه‌ی BackgroundImage را انتخاب می‌کنیم.
controls-02
در این قسمت پنجره‌ای به ما نمایش داده می‌شود که به ما اجازه می‌دهد آدرس تصویر خود را مشخص کنیم. برای اینکار ابتدا قسمت Local resource را انتخاب کرده و سپس بر روی دکمه‌ی Import کلیک می‌کنیم.
controls-03
پس از اینکه عکس را انتخاب کردید دکمه Ok را برای تأیید بزنید. حالا تصویر مورد نظر ما بر روی فرم نمایش داده می‌شود. حالت قرار گیری و سایز تصویر ممکن است چیزی نباشد که شما انتظار داشته‌اید. برای تغییر آن یک مشخصه به نام BackgroundImageLayout وجود دارد. این مشخصه مقادیری از نوع شمارشی System.Windows.Forms.ImageLayout را می‌پذیرد. این مقادیر به شرح زیر هستند:

مقدار توضیح
None عکس بر اساس قسمت بالای چپ خود در محل قرار می‌گیرد و هیچ تغییر سایزی در آن صورت نمی‌گیرد.
Tile اگر عکس از محیط کنترل کوچکتر باشد، عکس به طور متناوب بر روی کنترل تکرار می‌شود.
Center عکس در وسط کنترل قرار می‌گیرد.
Stretch عکس در حد اندازه کنترل کوچک می‌شود و کل کنترل را در بر می‌گیرد.
Zoom عکس در حد کنترل تغییر سایز می‌دهد بدون اینکه نسبت طول و عرض آن تغییر کند.

در بیشتر مواقع Stretch به خوبی عمل می‌کند. در فرم پایین عکس پس زمینه‌ی فرم در حالت Stretch قرار دارد.
controls-04

 

خاصیت Text

خاصیت Text یک متن را در داخل کنترل تعریف می‌کند. متن خاصیت Text، در کنترل‌های گوناگون نمایش مختلفی دارد. به عنوان مثال، متن خاصیت Text کنترل فرم در عنوان (Caption bar) آن قرار می‌گیرد. متن خاصیت Text یک دکمه، در داخل آن دکمه نمایش داده می‌شود. متن خاصیت Text یک تکست باکس، در داخل آن تکست باکس نمایش داده می‌شود:
text-property-in-c#-01
text-property-in-c#-02

 

خاصیت TextAlign

ما می‌توانیم از خاصیت TextAlign برای تغییر مکان متن در داخل کنترل استفاده کنیم. اگر شما بر روی مشخصه‌ی TextAlign کلیک کنید یک نوار کرکره‌ای را در پنجره Properties مشاهده می‌کنید، که به آسانی به شما اجازه می‌دهد که نحوه‌ی قرار گیری متن خود را در داخل کنترل تنظیم کنید.
controls-10
برای درک بهتر عملکرد این خاصیت یک دکمه بر روی فرم قرار داده و اندازه آن را کمی بزرگ کنید. حال بر روی قسمت‌های مختلف خاصیت TextAlign کلیک کرده و تأثیر آن را بر نوشته داخل کنترل دکمه مشاهده کنید :
control-15

 

خاصیت Name

از خاصیت Name برای نامگذاری کنترل‌ها استفاده می‌شود :
name-property-in-c#-01
نامی که به کنترل اختصاص می‌دهیم در کد نویسی به درد ما می‌خورد. فرض کنید که یک دکمه قرار است عملیات ذخیره اطلاعات در دیتابیس را انجام دهد. برای این منظور خاصیت Name آن را به buttonSave تغییر می‌دهیم تا در محیط کدنویسی آن را راحت‌تر شناسایی کنیم :
name-property-in-c-05

حال اگر بر روی آن دوبار کلیک کنید، مشاهده می‌کنید که نام دکمه همان نامی است که در خاصیت Name به آن اختصاص داده‌ایم :
name-property-in-c-06
و اگر در محیط کدنویسی به دنبال آن بگردیم، پیدا کردن این کنترل بسیار راحت است :
name-property-in-c-07
شاید در مورد یک یا چند مورد کنترل، نامگذاری زیاد کارا نباشد ولی وقتی که تعداد کنترل‌ها زیاد می‌شود بهتر است که همه آنها را نامگذاری کنید تا در موقع کدنویسی گیج نشوید.

 

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

ما می‌توانیم نوع قلم، رنگ، سایز، و حالت قلم یک کنترل را به وسیله‌ی خواص Fore Color و Font تغییر دهیم. برای مثال ما یک دکمه را ایجاد می‌کنیم.
controls-05
برای تغییر نوع قلم این کنترل ابتدا می‌بایست خاصیت Font را در پنجره‌ی Properties پیدا کنیم. سپس در سمت چپ این خاصیت یک علامت فلش را مشاهده می‌کنیم. بر روی آن کلیک کرده تا تمامی زیر مجموعه‌های آنرا مشاهده کنیم.
controls-06
قسمت Name که نوع قلم را تعریف می‌کند قسمت Size اندازه‌ی قلم را مشخص می‌کند قسمت Bold برای ضخیم کردن متن و قسمت‌های Italic و Strikeout برای کشیدن خط زیر متن کنترل به کار می‌روند. همچنین، شما می‌توانید از دکمه‌ای سمت راست خاصیت Font برای باز کردن پنجره‌ی فونت استفاده کنید.
controls-07
در اینجا شما می‌توانید نوع قلم، حالت و سایز آنرا به طور دقیق انتخاب کنید. همچنین در این پنجره شما می‌توانید یک پیش نمایش از نوع قلم خود را مشاهده کنید. به وسیله‌ی اینها شما می‌توانید قلم کنترل خود را سفارشی کنید.
controls-08

 

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

می‌توان از خاصیت Enabled برای فعال کردن یا غیر فعال کردن یک کنترل استفاده کنیم. از مقدار False برای غیر فعال کردن و نیز از مقدار True برای فعال کردن یک کنترل استفاده می‌شود. وقتی یک کنترل را غیر فعال می‌شود، ظاهر آن تغییر می‌کند. برای مثال، وقتی ما یک دکمه را غیر فعال می‌کنیم (خاصیت Enabled آنرا برابر False قرار می‌دهیم)، رنگ و ظاهر آن تغییر می‌کند. به این نکته توجه کنید که این تغییرات در هنگام اجرای برنامه قابل مشاهده هستند، نه در محیط طراحی.
controls-09
وقتی که یک کنترل غیر فعال است، هیچ فوکوس و رویدادی را قبول نمی‌کند. برای مثال، اگر یک دکمه غیر فعال باشد، شما نمی‌توانید بر روی آن کلیک کنید.

 

مخفی کردن یک کنترل

شما می‌توانید یک کنترل را به وسیله‌ی مقدار دادن False به خاصیت Visible آن به طور موقت مخفی کنید.
خاصیت Visible یک خاصیت بولی است که دو حالت دارد:
1- کنترل قابل مشاهده است 2- کنترل قابل مشاهده نیست
مقدار False آن، کنترل را مخفی می‌کند و مقدار True کنترل را نمایش می‌دهد.
نکته: اثر این خاصیت فقط در هنگام اجرای برنامه قابل مشاهده است و در حالت طراح قابل مشاهده نیست !
شما حتی وقتی که مقدار این خاصیت را برابر False قرار بدهید می‌توانید آنرا در حالت طراحی انتخاب کنید. در درسهای آینده به طور مفصل در مورد خواص و ویژگی‌های کنترل‌ها به بحث می‌پردازیم.

 

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

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

رویداد توضیح
BackColorChanged وقتی که رنگ پس زمینه تغییر می‌کند این رویداد اتفاق می افتد.
BackgroundImageChanged وقتی که یک تصویر پس زمینه اضافه می‌شود یا تغییر می‌کند این رویداد رخ می‌دهد.
Click این رویداد وقتی رخ می‌دهد که بر روی کنترل با دکمه‌ی سمت چپ ماوس کلیک شود.
DoubleClick زمانی که شما بر روی یک کنترل دابل کلیک می‌کنید رخ می‌دهد. به این نکته توجه داشته باشید که این رویداد می‌تواند به وسیله‌ی دستوراتی که کاربر نوشته نیز رخ دهد مثل ترکیب دو کلید (کلید میانبر )
DragDrop زمانی که عملیات Drag & Drop بر روی کنترل انجام می‌شود این رویداد رخ می‌دهد.
EnabledChanged زمانی که یک کنترل حالت Enable و یا Disable را را به خود می‌گیرد (به یکی از این دو حالت تغییر می‌کند) این رویداد رخ می‌دهد.
Enter زمانی که مکان نما به کنترل وارد شود. (بر روی آن قرار گیرد)
FontChanged زمانی که خاصیت font کنترل تغییر می‌کند این رویداد رخ می‌دهد.
ForeColorChanged زمانی رخ می‌دهد که رنگ متن کنترل تغییر پیدا کند.
GotFocus زمانی رخ می‌دهد که Focus روی کنترل قرار گیرد.
KeyDown این رویداد زمانی رخ می‌دهد که focus بر روی کنترل باشد و کلیدی از صفحه کلید فشرده شود.
KeyPress این رویداد زمانی رخ می‌دهد که focus بر روی کنترل باشد و کلیدی از روی صفحه کلید فشرده و رها شود. این رویداد قبل از رویداد Keydown رخ می‌دهد.
KeyUp این رویداد زمانی رخ می‌دهد که focus بر روی کنترل باشد و کلیدی که از روی صفحه کلید فشرده شده، رها شود. این رویداد بعد از دو رویداد قبلی رخ می‌دهد.
Leave این رویداد وقتی که مکان نما کنترل را ترک کند رخ می‌دهد.
LostFocus وقتی که کنترل Focus خود را از دست بدهد این رویداد رخ می‌دهد.
MouseClick یک حالت پیشرفته‌تر از رویداد کلیک است. کلیک کردن می‌تواند شامل فشردن کلیدهای صفحه‌ی کلید نیز باشد. ولی اگر شما نیاز به اطلاعاتی نظیر: تعداد کلیک بر روی کنترل، چرخیدن دکمه چرخنده‌ی ماوس و … باشید باید از این رویداد استفاده کنید
MouseDoubleClick یک حالت پیشرفته‌تر از رویداد DoubleClick است .
MouseDown این رویداد زمانی رخ می‌دهد که دکمه‌ای از ماوس در داخل کنترل پایین نگه داشته شود.
MouseEnter زمانی که مکان نما به یک کنترل وارد می‌شود این رویداد رخ می‌دهد.
MouseHover این رویداد زمانی رخ می‌دهد که مکان نما روی یک کنترل منتظر بماند. (حالت مکان نما به Wait یا همان ساعت شنی تغییر یابد.)
MouseLeave این رویداد زمانی رخ می‌دهد که مکان نما کنترل را ترک کند.
MouseMove این رویداد زمانی رخ می‌دهد که مکان نما وقتی در داخل محدوده‌ی کنترل است حرکت کند.
MouseUp این رویداد زمانی رخ می‌دهد که دکمه‌ای از ماوس را که قبلاً فشرده‌ایم، در داخل کنترل رها کنیم.
MouseWheel این رویداد زمانی رخ می‌دهد که بر روی کنترل Focus باشد و دکمه چرخنده ماوس حرکت کند.
Move این رویداد زمانی رخ می‌دهد که کنترل حرکت کند.
Paint این رویداد زمانی رخ می‌دهد که کنترلی رسم شود.
ParentChanged این رویداد زمانی رخ می‌دهد که خاصیت Parent کنترل تغییر کند.
Resize این ویداد زمانی رخ می‌دهد که کنترل تغییر سایز دهد.
TextChanged وقتی که خاصیت Text کنترل تغییر پیدا کند این رویداد رخ می‌دهد.
Validated وقتی رخ می‌دهد که اعتبار سنجی کنترل پایان یابد.
Validating وقتی رخ می‌دهد که کنترل اعتبار سنجی می‌شود.
VisibleChanged وقتی که خاصیت نمایش کنترل تغییر پیدا کند.

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

 

متدهای کنترل

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

متدها توضیح
CreateControl() یک کنترل را ایجاد می‌کند و به کنترل جاری اضافه می‌کند.
FindForm() فرمی را که کنترل بر روی آن قرار دارد را بازیابی می‌کند.
Focus() Focus را بر روی کنترل جاری قرار می‌دهد.
Hide() کنترل را مخفی می‌کند.
Refresh() نوسازی کنترل را انجام می‌دهد.
Select() کنترل را فعال (انتخاب) می‌کند.
Show() کنترل مخفی شده را نمایش می‌دهد.
Update() محتویات کنترل را به روز می‌کند.

همچنین کلاس کنترل به شما متدهایی را عرضه می‌کند که به شما اجازه می‌دهند به صورت دستی رویدادهای کنترل را راه اندازی کنید. برخی از متدها با کلمه‌ی On و سپس نام یک رویداد شروع می‌شوند. برای مثال، رویداد OnClick وقتی که رویداد Click فراخوانی می‌شود اتفاق می افتد.

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

  1. محمد پاسخ دادن

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

  2. dani پاسخ دادن

    سلام چرا من نمی تونم خاصیت location یک دکمه رو در زمان اجرا تغییر بدم؟

    • یونس ابراهیمی پاسخ دادن

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

    • Bi Niece پاسخ دادن

      point p=new point(10,10):khate aval
      label1.location=p;khate dovom

  3. حيدري پاسخ دادن

    سلام
    من می خواهم با زدن کلید اینتر از دیتاگریدویو خارج و روی textbox1 فکوس انجام شود ولی اشاره گر روی رکورد بعدی در دیتا گریدویو قرار می گیرد برای اینکه بعد از اینتر روی رکورد بعدی قرارنگیرد لطفا” مرا راهنمائئ فرمائید با تشکر

    • یونس ابراهیمی پاسخ دادن

      سلام،

      private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
      {
          if (e.KeyData == Keys.Enter)
          {
              e.SuppressKeyPress = true;
              textBox1.Focus();
          }
      }
      

      یا

      protected override bool ProcessKeyPreview(ref Message m)
      {
          if (m.Msg == 0x0100 && (int)m.WParam == 13)
          {
              this.ProcessTabKey(true);
          }
          return base.ProcessKeyPreview(ref m);
      }
      
      private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
      {
          if (e.KeyData == Keys.Enter)
          {
              e.SuppressKeyPress = true;
          }
      }
      
  4. آریا پاسخ دادن

    سلام وقتی در فرم RightoLeft=True قرار می دهیم عکس زمینه ایی که برای فرم قرار داده ایم نشان داده نمی شود.چیکار کنیم تصور زمینه فرم نشان داده شود با توجه به اینکه RightTo Lefrt هم true باشد

    • یونس ابراهیمی پاسخ دادن

      سلام، بنده فرم رو righttoleft کردم عکس پس زمینه هم نمایش داده می شود و مشکلی ندارد

  5. آریا پاسخ دادن

    RightToLeft=yes, RightToLeftLayout=True عکس زمینه فرم دیده نمی شود(در سی شارپ)ممنون می شوم اگه راهنمایی کنید

    • یونس ابراهیمی پاسخ دادن

      حق با شماست
      عکستون رو تو پوشه Resourcse بذارین و کد زیر رو پایین سازنده فرم بنویسین

      protected override void OnPaintBackground(PaintEventArgs e)
      {
          e.Graphics.DrawImage(Properties.Resources.Koala,
              new Rectangle(Point.Empty, this.ClientSize));
      }

      در کد بالا من عکس یک کوآلا (Koala) رو تو پوشه resource گذاشتم

  6. آریا پاسخ دادن

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

  7. محسن پاسخ دادن

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

    • یونس ابراهیمی پاسخ دادن

      سلام، ممنون، تو رویداد لود فرم اینطور بنویسین

      this.ActiveControl = textBox3;

      به جای textBox3 نام تکس باکس خودتون رو بنویسین

      • محسن پاسخ دادن

        ممنون هم بابت جواب دادنتون هم سریع جواب دادنتون 🙂

        • یونس ابراهیمی

          خواهش می کنم

  8. محسن پاسخ دادن

    سلام،اگه بخوام یه شرط بذارم که در صورت درست بودنش یه عکس لود بشه توی سی شارپ شدنیه؟

    • یونس ابراهیمی پاسخ دادن

      سلام، ممنون میشم سوالتونو تو بخش پرسش و پاسخ مطرح بفرمایید

      • محسن پاسخ دادن

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

  9. محسن پاسخ دادن

    عذر میخوام این لینک فعالسازی به میلیم هنوز ارسال نشده ، ممنون میشم یه چکی بکنید

  10. ReyNard پاسخ دادن

    سلام ممنون از سایت خوب و بی نظیرتون میخوام فرم ۱ در وسط صفحه باز شه و تکون هم نخوره ولی حتما در وسط صفحه باز شه

    • یونس ابراهیمی پاسخ دادن

      سلام، مرسی

      this.StartPosition = FormStartPosition.CenterScreen;

      منظورتون از تکون نخوره چیه ؟

  11. مهسا پاسخ دادن

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

    • یونس ابراهیمی پاسخ دادن

      سلام، ممنون میشم سوالتونو تو بخش پرسش و پاسخ سایت مطرح بفرمایید