MenuStrip là một điều khiển cho phép lập
trình viên xây dựng hệ thống Menu trên Form. Menu có thể xây dựng ở dạng một cấp hoặc nhiều cấp.

Hình 2.64.
Điều khiển MenuStrip
MenuStrip cho phép xây dựng Menu với các điều
khiển:
·
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: MenuItem, ComboBox, TextBox, Seperator
|
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: Unchecked, Checked, Indeterminate.
*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
|
Trong ví dụ này sẽ viết một chương trình trong đó có sử dụng
MenuStrip và kết hợp thêm Timer để hiển thị ngày giờ hiện hành. Cụ thể sẽ tạo giao diện cho Form như dưới đây và thực hiện một số chức năng tương ứng.

Hình 2.65.
Ví dụ sử dụng MenuStrip
Chương trình có các chức năng:
·
Menu chức năng: có chức năng mục Thoát dạng MenuItem. Khi người dùng nhấn
chuột trái vào menu Thoát hoặc nhấn tổ hợp phím Ctrl + T sẽ thoát
chương trình.

Hình 2.66.
Menu dạng MenuItem
·
Menu hiển thị: có dạng ComboBox chứa hai mục chọn, hiển thị thời gian hiện hành và hiển thị ngày
tháng năm hiện hành.

Hình 2.67.
Menu dạng ComboBox
Việc đầu
tiên ta cần tạo giao diện cho Form, bao gồm:
·
2 Label để hiển thị ngày giờ hiện hành.
·
2 Timer để lấy ngày giờ hiện hành.
·
1 MenuStrip với 2 Item là "chứcNăngToolStripMenuItem" và
"hiểnThịToolStripMenuItem". Để thêm
hai Item này ta vào thuộc
tính Items trên MenuStrip rồi thêm 1 Item có dạng mục và 1
Item có dạng ComboBox.

Hình 2.68.
Quản lý MenuItem
Sau khi đã tạo giao diện
cho Form và thêm một số điều khiển cần thiết, bây giờ ta
sẽ đi xử lý sự kiện.
Bước 1: Xử lý sự kiện Tick cho hai Timer để lấy ngày giờ hiện hành. Chú ý rằng trong Timer thuộc tính Enabled mặc định ở trạng thái False, vì vậy nó sẽ không
hiển thị ngay khi chạy chương trình. Khi chúng ta chọn hiển thị ở Menu thì khi đó mới 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);
}
|
Bước 2: Xử lý sự kiện cho Menu với chức
năng là khi người dùng chọn hiển thị ngày hoặc giờ thì ngày giờ hiện hành sẽ được hiển thị trên Label. Và khi người dùng chọn Thoát hoặc nhấn tổ hợp Ctrl + T thì sẽ đóng
chương trình.
Khi tạo Menu ta đã tạo hai Item là "chứcNăngToolStripMenuItem" và "hiểnThịToolStripMenuItem" bây giờ
chỉ cần viết sự kiện cho nó. Ở Item "hiểnThịToolStripMenuItem" sẽ viết trên sự kiện SelectedIndexChanged.
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 "chứcNăngToolStripMenuItem" ta sẽ
viết trên sự kiện Click,
bằng cách nhấn đúp chuột vào chức 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ả:

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)
{
}
}
}
|
MenuStrip là một điều khiển rất quan trong trong việc tạo các ứng dụng vì đa số các ứng dùng đều sử dụng menu nên cần luyện tập thật nhiều.