اضافه کردن منو به فرم با استفاده از کنترل MenuStrip

نوار منو در اکثر برنامه به چشم می خورد. این نوار شامل دستورات مختلفی است که کاربر از آنها استفاده می کند و در ویژوال استودیو با استفاده از کنترل MenuStrip می توان آن را به برنامه اضافه کرد. در شکل زیر یک کنترل MenuStrip را از جعبه ابزار بر روی فرم کشیده ایم :
adding-menu-bar-01
MenuStrip همانند کنترل Timer جزو کنترلهای غیر بصری بوده و در قسمت components tray قرار می گیرد. در زیر برخی از خواص پر کاربرد MenuStrip ذکر شده است :

خاصیت توضیح
Dock مشخص می کند که کنترل منو به کدام گوشه فرم بچسبد.مقدار پیشفرض آن top است
GripStyle به شما اجازه می دهد که مکان منو را تغییر دهید.
Items کلکسیونی از منوی های اصلی را در بر می گیرد.
Stretch تعیین می کند که کنترل منو در سرتاسر در برگیرنده خود کشیده شود.

 

اضافه کردن منو های استاندارد

ویژوال استودیو برای اضافه کردن آیتم های استاندارد به MenuStrip روشی را پیشنهاد می دهد. برای انجام این کار، مانند شکل زیر بر روی فلش کلیک کرده تا صفحه ای ظاهر شود :
adding-menu-bar-02
از صفحه باز شده بروی گزینه Insert Standard Items کلیک کنید :
adding-menu-bar-03
با انجام این کار ویژوال استودیو به صورت خودکار گزینه ها و آیکونها مربوط به آنها را مانند شکل زیر به منو اضافه می کند :
adding-menu-bar-04

 

اضافه کردن منو های دلخواه

ممکن است در بعضی از شرایط به منوهای خاص نیاز نداشته باشید . شما می توانید با استفاده از ابزارهای ویژوال استودیو منو ی دلخواهی را ایجاد کنید.
ابتدا یک کنترل MenuStrip را به فرم اضافه کرده و با کلیلک بر روی قسمتی که با فلش نشان داده شده است یک منو اضافه و عنوان آنرا تایپ کنید.
adding-menu-bar-05
به این نکته توجه نمایید که در هنگام تایپ عنوان منو جعبه دیگری در کنار آن ظاهر می شود و شما می توانید منو های دیگری را اضافه نمایید به عنوان مثال منوهایی مانند File ، Edit ، Help در کنترل MenuStrip ایجاد کنید.
adding-menu-bar-06
برای اضافه کردن زیر منو بر روی یکی از منو ها کلیک کرده تا جعبه ای برای اضافه کردن زیرمنو به آن ظاهر شود .
adding-menu-bar-07
برای ایجاد یک جدا کننده یک کاراکتر خط تیره ( – ) را تایپ کنید.
adding-menu-bar-08
همچنین شما می توانید برای هر زیر منو مانند شکل زیر ، زیرمنوهای دیگری را تعریف نمایید
adding-menu-bar-09
هر کدام از منوهایی که اضافه می کنید از نوع ToolStripMenuItem هستند. همچنین نوع جدا کننده ToolStripSeparator هست از ToolStripSeparator فقط برای تقسیم بندی منو های مرتبط با هم استفاده می شود. هر ToolStripMenuItem به خاصیت Items کنترل MenuStrip و هر زیر منو به خاصیت DropDownItems از ToolStripMenuItem اضافه می شود. ویژوال استودیو به طور خودکار بر اساس متنی که برای هر یک از ToolStripMenuItem انتخاب کرده اید نامی به آنها اختصاص می کند. در زیر برخی از خواص ToolStripMenuItem را مشاهده می کنید.

خاصیت توضیح
Checked تعیین می کند که آیا آیتم تیک خورده است یا نه
CheckOnClick تعیین می کند که ایتم قابلیت تیک خوردن داشته باشد یا نه
CheckState تعیین می کند که به طور پیشفرض آیتم تیک داشته باشد یا نه
DropDownItems زیر منوهای آیتم در این خاصیت قرار می گیرند
Enabled آیتم را فعال یا غیر فعال می کند.
Image عکسی را به آیتم اختصاص می دهد.
ShortcutKeys کلید میانبر آیتم را تعیین می کند.
ShowShortcutKeys تعیین می کند که کلید میانبر در کنار آیتم نشان داده شود یا نه
Text عنوان آیتم را تعیین می کند
ToolTipText وقتی که موس را بر روی آیتم قرار می دهید ، متنی که برای این خاصیت تعیین کرده اید نمایش داده می شود.

 

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

خاصیت CheckOnClick به هر منو این قابلیت را می دهد که قابل تیک خوردن باشد یا نه. به عنوان مثال ، شما می توانید منویی به شکل زیر ایجاد کنید. برای اینکار باید خاصیت CheckOnClick زیر منوهای آن را برابر true قرار دهید. با کلیک بر روی هر آیتم یک علامت تیک در سمت چپ آن نمایش داده می شود.
adding-menu-bar-10
با استفاده از خاصیت های Checked و CheckState می توانید تعیین کنید که یک آیتم تیک داشته باشد یا خیر.

 

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

ساده ترین را برای انجام این کار اضافه کرده کاراکتر & در ابتدای نام آیتم است.
adding-menu-bar-11
حرف بعد از کاراکتر & به عنوان کلید میانبر در نظر گرفته می شود. به عنوان مثال در منوی , &Save حرف S و در E&xit حرف x کلید میانبر است. در قسمت طراحی کلید های میانبر به صورت زیر خط دار نمایش داده می شوند در زمان اجرا علامت زیر خط با فشار دادن کلید Alt نمایان می شود. براس استفاده از این نوع کلید های میانبر باید کلید Alt را ابتدا فشار دهید.
برای فعال کردن یک منو شما باید کلید های ترکیبی (کلید میانبر + Alt ) را فشار دهید.به عنوان مثال برای استفاده از منوی File از کلید های ترکیبی Alt + F استفاده کنید. برای ایجاد کلید های میانبر پیچیده تر باید از خاصیت ShortcutKeys استفاده نمایید. یک آیتم را انتخاب و در پنجره Properties خصوصیت ShortcutKeys را پیدا کنید.
بر روی فلش کوچکی که در کنار این خصوصیت قرار دارد کلیک کرده تا پنجره ای به شکل زیر نمایان شود.
adding-menu-bar-12
هنگامی که یک کلید ترکیبی را انتخاب می کنید ، عنوان آن در صورتی در کنار منو ( در سمت راست) نمایش داده می شود که خاصیت ShowShortcutKeys را برابر true قرار دهید.
adding-menu-bar-13

 

اضافه کردن آیکن به منو ها

شما می توانید برای هر منو آیتم یک تصویر کوچک که در سمت چپ آن نمایش داده می شود را انتخاب کنید.
adding-menu-bar-14
برای اینکار از خاصیت Image استفاده می شود. بر روی دکمه کوچک کنار خاصیت Image در پنجره Properties کلیک کنید. منبعی که عکس در آن قرار دارد را انتخاب و سپس مسیر آنرا مشخص نمایید. اگر سایز عکس بیش از اندازه باشد ، به صورت خودکار بر اساس مقدار خاصیت ImageScaling اندازه آن تغییر می کند.

 

اضافه کردن عمکلرد به منو ها

هنگامی که بر روی یک منو آیتم کلیک می کنید رویداد Click آن اتفاق می افتد. برای اضافه کردن قابلیتی مشخص به منو ایتم باید کد های خود را در این رویداد قرار دهیم. برای اضافه کردن کنترل کننده رویداد کلیک به هر منو ایتم ، در محیط طراحی بر روی منو آیتم مورد نظر دوبار کلیک کرده تا ویژوال استودیو به صورت خودکار آن را ایجاد کند. برای منو آیتم هایی که مقدار خاصیت CheckOnClick آن برابر true است ، می توانید از رویداد های CheckedChange و CheckStateChange آنها را استفاده کنید.مانند شکل زیر یک فرم دیگر ساخته و یک کنترل منو به آن اضافه کنید. بر روی آیتم Exit دوبار کلیک کنید تا ویژوال استودیو کنترل کننده رویداد پیشفرض که همان کلیک است را تولید کند.سپس کد های زیر را در آن قرار دهید.

private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
   Application.Exit();
}

متد استاتیک Exit از کلاس Application به سادگی برنامه را می بندد.

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

  1. بهارک پاسخ دادن

    عالی بود. ممنون

  2. م کریمی پاسخ دادن

    باسلام و تشکر از مطالب خوبتون
    یک سوال داشتم از خدمتتون، اینکه اگر تعداد منو هامون زیاد بودن و خواستیم که نوار منواستریپمون چند خطی بشه چکار باید بکنیم که ادامه منوها به خط بعد انتقال پیدا کنند؟
    باتشکر فراوان

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

      سلام…ممنون…خاصیت layoutstyle رو بذارین رو flow

      • م کریمی پاسخ دادن

        خیلی لطف کردید خیلی هم زود جواب دادید بسیار ممنون.

  3. چنارانی پاسخ دادن

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

  4. maria پاسخ دادن

    عالی بود.اگر بخواهیم کلید undoرا بگذاریم جه کدی بنویسیم؟

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

    بسیار ممنون از توضیحات کاربردیتون .

  6. احمد پارسا پاسخ دادن

    سلام
    من یه سوال داشتم
    من بخوام توی برنامه ام که با زبان سی شارپ ، برای بعضی دکمه هام بجای اینکه کاربر روی دکمه کلیک کنه روی f1 یا … بزنه فرم ظاهر شه به چه طریقه ؛نمونه کد یا آموزشی دارین بدین!تو نت سرچ زدم چیزی دستگیرم نشد.
    با تشکر :))

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

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

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

        خیلی ممنوون اقای ابراهیمی

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

          خواهش می کنم… به صورت ویدئو در بخش ویدئوهای آموزشی اضافه شد.

        • احمد پارسا

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

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

    سلام آقای پارسا، اینم خدمت شما
    http://www.w3-farsi.com/movie/

  8. Mahsa پاسخ دادن

    سلام آقای ابراهیمی باتشکر از سایت خوبتون واقعا سایت خوبی دارین. ببخشید من دوتا سوال دارم.
    ۱- این جدول ها رو چطوری توی سایتتون قرار میدین؟ یعنی توی ورد طراحیشون میکنید و کپی میکنید اینجا یا براشون کدhtml مینویسید؟
    ۲- این مطالب رو از سایت ها خارجی ترجمه میکنید؟
    باتشکر

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

      سلام دوست عزیز، ممنون بابت لطفتون
      ۱- تو ورد می نویسم ولی از قبل چون کد css شو نوشتم موقع کپی به این شکل در میان
      ۲- ۷۰ درصد مطالب ترجمه و بقیه هم تجربه شخصیه

      • Mahsa پاسخ دادن

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

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

          سلام، خواهش می کنم
          حقیقتش اینه که بنده فقط زبان رو در حد دبیرستان بلدم ولی قوی. یعنی نه مکالمه بلدم و نه اینکه قبلا تو کار ترجمه بودم. اینکه می فرمایید : “جمله بندی مطالب انگلیسی نسبت ب ترجمه کلمات خیلی سخت تره” کاملا درسته. مثلا بنده خودم اوایل یه پاراگراف حدود ۱ تا دو ساعت زمان واسم زمان میبرد که به بهترین حالت ممکن ترجمه بشه. ولی بعد ها این زمان به یه ربع کاهش پیدا کرد. کلاس زبان که لازم نیست ولی اگه بخواین یه کار پایه ای انجام بدین بهتره که برید کلاس. ولی حرف اول و آخر رو ((پشتکار و علاقه)) در هر کاری میزنه. می تونم بپرسم شما کلا رشتتون چیه؟ و میخواین چکار کنید؟ البته اگه فضولی نباشه. شاید بتونم بهتر راهنماییتون کنم.

  9. Mahsa پاسخ دادن

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

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

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