MENUSTRIP

1.     MenuStrip

MenuStrip là mt điu khin cho phép lp trình viên xây dng h thng Menu trên Form. Menu có th xây dng dng mt cp hoc nhiu cp.

winforms bai11 03 PNG

Hình 2.64. Điều khiển MenuStrip

MenuStrip cho phép xây dng Menu vi các điu khin:

·       ToolStripSeparator.

·       ToolStripMenuItem (Menu con).

·       ToolStripComboBox (ComboBox).

·       ToolStripTextBox (TextBox).

Bảng 2.33. Một số thuộc tính thường dùng của MenuStrip

Thuộc tính

Mô tả

TextDirection

Chọn hình thức trình bày Menu

Hình thức Horizontal

Hình thức Vertical 90

Hình thức Vertical 270

Items

Thêm các menu con. Kiểu menu có thể chọn một trong 4 dạng: MenuItemComboBoxTextBoxSeperator

RightToLeft

Mang giá trị Yes hoặc No. Nếu là Yes thì sẽ trình bày menu từ phải qua trái. Nếu là No thì trình bày menu từ trái qua phải

Checked

Mang giá trị True hoặc False. Nếu là giá trị True thì hiển thị biểu tượng CheckBox bên cạnh chuỗi Text. Nếu là False thì không hiện biểu tượng CheckBox

CheckOnClick

Mang giá trị True hoặc False

Nếu là True: Biểu tượng CheckBox sẽ xuất hiện bên cạnh chuỗi Text của menu con khi người dùng nhấp chuột chọn.

Nếu là False: Thao tác nhấp chuột của người dùng sẽ không bị ảnh hưởng gì.

CheckState

Cho biết trang thái của CheckBox trên menu con. Có 3 trạng thái: UncheckedCheckedIndeterminate.

*Lưu ý: Trạng thái Indeterminate chỉ có hiệu lực khi thuộc tính Checked là true.

DisplayStyle

Hình thứ trình bày của menu con có 4 kiểu hiển thị.

None: Không hiển thị gì trên menu con

Text: Cho phép hiển thị chuỗi mô tả

Image: Cho phép hiển thị hình hoặc biểu tượng cạnh bên Text

ImageAndText: Cho phép hiển thị hình (biểu tượng) và chuỗi mô tả

Image

Hình ảnh xuất hiện bên cạnh chuỗi Text

ImageScaling

Kiểu trình bày của hình trong thuộc tính Image. Có thể thiết lập một trong hai giá trị

None: Hiển thị bình thường

SizeToFit: Hiển thị đúng kích cỡ của hình hoặc biểu tượng

ShortcutKeyDisplayString

Chuỗi trình bày ứng với phím tắt mô tả cho menu đó

ShortcutKeys

Tổ hợp phím tắt ứng với menu

ShowShortcutKeys

Mang giá trị True hoặc False.

Nếu là True: Cho phép hiển thị giá trị trong thuộc tính ShortcutKeyDisplayString.

Nếu là False: Giá trị trong thuộc tính ShortcutKeyDisplayString sẽ không hiển thị.

Text

Chuỗi ký tự hiển thị trên menu

ToolTipText

Chuỗi ký tự hiển thị khi rê chuột vào menu

Bảng 2.34. Các sự kiện thường dùng của MenuItem

Sự kiện

Mô tả

CheckedChange

Phát sinh khi trạng thái (CheckState) của CheckBox thay đổi

Click

Phát sinh khi người dùng nhấp chuột vào menu

2.     Ví dụ sử dụng điều khiển MenuStrip

Trong ví d này s viết mt chương trình trong đó có s dng MenuStrip và kết hp thêm Timer đ hin th ngày gi hin hành. C th s to giao din cho Form như dưi đây và thc hin mt s chc năng tương ng.

winforms bai11 02 PNG

Hình 2.65. Ví dụ sử dụng MenuStrip

Chương trình có các chc năng:

·       Menu chc năng: có chc năng mThoát dng MenuItem. Khi ngưi dùng nhn chut trái vào menu Thoát hoc nhn t hp phím Ctrl + T s thoát chương trình.

winforms bai11 04 png

Hình 2.66. Menu dạng MenuItem

·       Menu hin th: có dng ComboBox cha hai mc chn, hin th thi gian hin hành và hin th ngày tháng năm hin hành.

winforms bai11 05 png

Hình 2.67. Menu dạng ComboBox

Vic đu tiên ta cn to giao din cho Form, bao gm:

·       2 Label đ hin th ngày gi hin hành.

·       2 Timer đ ly ngày gi hin hành.

·       1 MenuStrip vi 2 Item là "chcNăngToolStripMenuItem" và "hinThToolStripMenuItem". Đ thêm hai Item này ta vào thuc tính Items trên MenuStrip ri thêm 1 Item có dng mc và 1 Item có dng ComboBox.

winforms bai11 06 png

Hình 2.68. Quản lý MenuItem

Sau khi đã to giao din cho Form và thêm mt s điu khin cn thiết, bây gi ta s đi x lý s kin.

c 1: X lý s kin Tick cho hai Timer đ ly ngày gi hin hành. Chú ý rng trong Timer thuc tính Enabled mc đnh trng thái False, vì vy nó s không hin th ngay khi chy chương trình. Khi chúng ta chn hin th Menu thì khi đó mi Start Timer lên.

private void timerTime_Tick(object sender, EventArgs e)

    {

        DateTime dt = DateTime.Now.Add(new TimeSpan());

        lblTime.Text = String.Format("{0:hh:mm:ss tt}", dt);

    }

private void timerDate_Tick(object sender, EventArgs e)

    {

        DateTime dt = DateTime.Now.Add(new TimeSpan());

        lblDate.Text = String.Format("{0:dd/MM/yyyy}", dt);

    }

c 2: X lý s kin cho Menu vi chc năng là khi ngưi dùng chn hin th ngày hoc gi thì ngày gi hin hành s đưc hin th trên Label. Và khi ngưi dùng chThoát hoc nhn t hCtrl + T thì s đóng chương trình.

Khi to Menu ta đã to hai Item là "chcNăngToolStripMenuItem" và "hinThToolStripMenuItem" bây gi ch cn viết s kin cho nó. Item "hinThToolStripMenuItem" s viết trên s kiSelectedIndexChanged.

private void hiểnThịToolStripMenuItem_SelectedIndexChanged(object sender, EventArgs e)

   {

       if(hiểnThịToolStripMenuItem.SelectedItem == "Hiển thị thời gian")

       {

           timerTime.Start();

       }

       else if(hiểnThịToolStripMenuItem.SelectedItem == "Hiển thị ngày tháng")

       {

           timerDate.Start();

       }

   }

Còn Item "chcNăngToolStripMenuItem" ta s viết trên s kiClick, bng cách nhn đúp chut vào chc năng Thoát.

private void thoátToolStripMenuItem_Click(object sender, EventArgs e)

   {

       DialogResult dt = MessageBox.Show("Bạn muốn đóng chương trình", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

       if(dt == DialogResult.Yes)

       {

           Application.Exit();

       }

   }

Kết qu:

winforms bai11 07 PNG

Hình 2.69. Kết quả sử dụng MenuStrip

Full Code:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace Cau1

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void timerTime_Tick(object sender, EventArgs e)

        {

            DateTime dt = DateTime.Now.Add(new TimeSpan());

            lblTime.Text = String.Format("{0:hh:mm:ss tt}", dt);

        }

        private void timerDate_Tick(object sender, EventArgs e)

        {

            DateTime dt = DateTime.Now.Add(new TimeSpan());

            lblDate.Text = String.Format("{0:dd/MM/yyyy}", dt);

        }

        private void hiểnThịToolStripMenuItem_SelectedIndexChanged(object sender, EventArgs e)

        {

            if(hiểnThịToolStripMenuItem.SelectedItem == "Hiển thị thời gian")

            {

                timerTime.Start();

            }

            else if(hiểnThịToolStripMenuItem.SelectedItem == "Hiển thị ngày tháng")

            {

                timerDate.Start();

            }

        }

        private void thoátToolStripMenuItem_Click(object sender, EventArgs e)

        {

            DialogResult dt = MessageBox.Show("Bạn muốn đóng chương trình", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if(dt == DialogResult.Yes)

            {

                Application.Exit();

            }

        }

        private void Form1_Load(object sender, EventArgs e)

        {

        }

    }

}

3.     Bài tập

MenuStrip là mt điu khin rt quan trong trong vic to các ng dng vì đa s các ng dùng đu s dng menu nên cn luyn tp tht nhiu.