-----
2.18
ContextMenu
Tham khảo clip về ContextMenu
Context menu (trình đơn theo ngữ cảnh) là trình đơn hiện ra
khi người dùng bấm chuột phải vào một đối tượng trên màn hình giao diện.
Trong cửa sổ thiết kết của Visual Studio, để tạo ra một
context menu sử dụng control có tên là ContextMenuStrip.
Để hiển thị context menu, cần sử dụng phương thức show(), hoặc
gắn vào một control, khi người dùng bấm chuột phải vào control, menu sẽ được hiển
thị.
Ví dụ 1, để gắn context menu có tên là contextMenuStrip1 vào
một textbox, trong cửa sổ Properties của textbox, chọn thuộc tính ContextMenuStrip,
thiết lập giá trị là contextMenuStrip1.
Ví dụ 2, để tạo và hiển thị context menu khi người dùng bấm chuột
phải vào textbox, mà không sử dụng cách gắn thuộc tính như ở Ví dụ 1, thì làm
như sau,
public partial class Form1 : Form
{
ContextMenuStrip
contextMenu2;
public Form1()
{
InitializeComponent();
contextMenu2 =
new ContextMenuStrip();
contextMenu2.Items.Add("Copy");
contextMenu2.Items.Add("Paste");
}
private void
textBox2_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button ==
MouseButtons.Right)
{
contextMenu2.Show(this.textBox2, new Point(0,0),
ToolStripDropDownDirection.AboveRight);
}
}
}
Để không hiển thị một cái context menu mặc định gồm rất nhiều
các mục chọn khác, cần thiết lập thuộc tính ShortcutsEnabled của textBox2 là False.
Tuy nhiên, cách khai báo các mục trong context menu theo kiểu,
contextMenu2.Items.Add("Copy");
contextMenu2.Items.Add("Paste");
sẽ không viết hàm xử lý cho sự kiện “người dùng bấm chuột
vào mục Copy hoặc Paste” được. Mà phải viết như sau:
contextMenu2 = new ContextMenuStrip();
var itemCopy = new
ToolStripButton() { Text = "Copy" };
var itemPaste =
new ToolStripButton() { Text = "Paste" };
itemCopy.Click
+= itemCopy_Click;
itemPaste.Click
+= itemPaste_Click;
contextMenu2.Items.Add(itemCopy);
contextMenu2.Items.Add(itemPaste);
void itemCopy_Click(object sender, EventArgs e)
{
MessageBox.Show("Copying");
}
void
itemPaste_Click(object sender, EventArgs e)
{
MessageBox.Show("Pasting");
}
Lab 15.
Tạo context menu cho chương trình File Explorer
Quan sát các chức năng View, Copy và Paste của chương trình
File Explorer. Làm ba chức năng này cho chương trình giả lập File Explorer (tối
thiểu phải làm được hết các chức năng cho View). Gồm các công việc sau:
– Phân tích và mô tả yêu cầu (viết vào tập tin ghi chép môn
học)
– Viết tài liệu quá trình thực hiện (viết vào tập tin ghi
chép môn học)
– Lập trình, chạy thử
– Viết tài liệu hướng dẫn sử dụng (viết vào tập tin ghi chép
môn học)
[Gợi ý, xem đoạn mã này rồi tìm cách nhúng vào trong dự án
File Explorer]
public partial class Form1 : Form
{
ContextMenuStrip
contextMenu2;
public Form1()
{
InitializeComponent();
contextMenu2 = new
ContextMenuStrip();
ToolStripMenuItem
itemView = new ToolStripMenuItem() { Text = "View" };
ToolStripMenuItem
itemLargeIcons = new ToolStripMenuItem() { Text = "LargeIcons" };
itemView.DropDownItems.Add(itemLargeIcons);
itemLargeIcons.Click += itemLargeIcons_Click;
contextMenu2.Items.Add(itemView);
}
void
itemLargeIcons_Click(object sender, EventArgs e)
{
MessageBox.Show("LargeIcon");
}
private void
textBox2_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button ==
MouseButtons.Right)
{
contextMenu2.Show(this.textBox2, new Point(0, 0), ToolStripDropDownDirection.AboveRight);
}
}
}
Có thể thiết lập vị trí hiển thị context menu ngay tại vị
trí của con trỏ chuột:
private void lvExplorer_MouseDown(object sender, MouseEventArgs
e)
{
if (e.Button ==
MouseButtons.Right)
{
contextMenu2.Show(MousePosition);
}
}
[Màn hình kết quả]
<///// hết buổi 11
2.19 NotifyIcon
Đọc thêm về NotifyIcon ở đây: https://nvnhan2910.blogspot.com/2014/06/windowform-su-dung-notifyicon-cach.html
NotifyIcon được sử dụng để ẩn chương trình đang chạy xuống
dưới khay hệ thống (system tray), dưới dạng một biểu tượng, người dùng có thể
tương tác với chương trình thông qua biểu tượng này.
Hai yêu cầu cần nắm được:
– Gửi được dữ liệu từ form xuống icon (trong system tray)
– Gửi ngược dữ liệu từ icon (trong system tray) lên form
Lab 16.
Xử lý NotifyIcon cho chương trình File Explorer
[Mô tả yêu cầu]
– Thêm mục “Ẩn chương trình” trên thanh menu (mục này nằm
bên phải mục View)
– Khi người dùng bấm vào mục “Ẩn chương trình” thì ẩn cửa sổ
chương trình File Explorer trên màn hình máy tính, đồng thời hiển thị một icon ở
System tray và hiển thị một câu thông báo với nội dung “Chương trình File
Explorer đang chạy ngầm”
– Khi người dùng bấm chuột trái vào icon của File Explorer ở
System tray thì hiển thị cửa sổ chương trình File Explorer trên màn hình máy
tính
– Khi người dùng bấm chuột phải vào icon của File Explorer ở
System tray thì hiển thị context menu, trong context menu gồm các chế độ view
khác nhau (LargeIcon, SmallIcon, Details, Tile, List). Nếu người dùng chọn một
chế độ xem bất kì thì thay đổi chế độ xem của File Explorer.
[Đoạn mã tham khảo]
private void anChuongTrinhToolStripMenuItem_Click(object sender, EventArgs
e)
{
notifyIcon1.Visible = true;
this.Hide();
notifyIcon1.ShowBalloonTip(5000, "Thông báo", "Chương
trình File Explorer đang chạy ngầm", ToolTipIcon.Info);
}
private void
notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
notifyIcon1.Visible = false;
WindowState
= FormWindowState.Normal;
this.Show();
}
if (e.Button ==
MouseButtons.Right)
{
contextMenu2.Show(MousePosition);
}