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

کنترل ها

کنترل ها اجزای بصری هستند که به وسیله ی آنها محیط های گرافیکی (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 یک دکمه رو در زمان اجرا تغییر بدم؟

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

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

  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. محسن پاسخ دادن

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