VB.NET cho ta một giao diện rất thân thiện và rất tự nhiên trong thiết kế Menu.
Menu được thêm vào form dưới dạng một control. Tuy Menu control nằm trong một mâm components phía dưới, nhưng trong lúc thiết kế, Menu hiện ra trong form y như lúc Runtime và bạn chỉ cần điền vào các menuitems cần thiết. Có hai loại menus: Main Menu (Menu dùng thông thường) và Context Menu (dùng cho Pop-Up).
Bạn hãy kéo biểu tượng menu control trên hộp công cụ và thả vào form, bạn sẽ thấy kết quả như hình dưới:
Trong window form số control mới mà ta chỉ có thể dùng chúng khi chúng đi chung với các control khác trên cùng một form. Chúng được gọi là Provider Controls và có đặc tính là khiến cho các properties mới hiện ra trong các control khác.
Provider Controls không hiển thị trên form lúc ta chạy chương trình. Do đó chúng nằm trong 1 khay riêng là component tray lúc ta thiết kế (hình trên) và Menu là control có đặc điểm này.
Main Menu là Menu căn bản mà bạn thấy nó dính vào cạnh trên của một form. Để dễ giải thích, ta sẽ dùng một thí dụ tạo ra một Editor thật đơn giản bằng VB.NET. Bạn hãy khởi động một Windows Application mới và thêm một Textbox vào trong form chính. Set property MultiLine của Textbox thành True để nó có thể hiển thị nhiều hàng, đồng thời Stretch (kéo dãn ra) cái Textbox cho lớn ra làm nơi ta có thể đánh vào một bài text (nhớ set thuộc tính anchor của textbox để khi bạn zoom lớn form ra thì nó tự động lớn theo).
Kế đó, thêm một Main Menu vào form. Cái menu Designer sẽ kích động và bạn chỉ cần đánh vào chi tiết các menuItems và dùng cửa sổ Properties để set các parameters.
Khi nào bạn click chuột vào control Main Menu trong mâm components là bạn có thể edit các MenuItems. Muốn làm việc với MenuItem nào thì select MenuItem đó. Những chỗ có chữ Type Here là đề nghị cho bạn đánh thêm vào một MenuItem (Type Here nằm phía dưới) , một MenuCommand mới (Type Here nằm bên phải một MenuCommand) hay một MenuSubItem (Type Here nằm bên phải một MenuItem).
Muốn insert một lằn ngang giữa MenuItem Dán và MenuItem Xoá hết, bạn select MenuItem Clear All rồi right click và chọn Insert Separator trong Pop-Up Menu.
Để chỉ định tên cho từng menu item, bạn làm như sau:
Bạn chọn menu và click chuột vào 1 trong những menu item, 1 menu popup sẽ xổ xuống và bạn chọn mục Edit Name như hình bên dưới:
và tên mặc định của các menuitem sẽ hiện thị ra trong dấu ngoặc vuông, bạn click chuột vào hay bấm F2 để sửa lại các tên cho phù hợp.
Dưới đây là bảng các thuộc tính của menu và textbox:
Đối Tượng |
Thuộc Tính |
Giá Trị |
Form |
Name Text |
frmMenuDemo Menu Application Demo |
mainMenu |
Name | default (mainMenu1) |
Menu |
Name Text |
mnuHeThong Hệ Thống |
MenuItem |
Name Text |
mnuItemThoat Thoát |
Menu |
Name Text |
mnuHieuChinh Hiệu Chỉnh |
MenuItem |
Name Text |
mnuItemSaoChep Sao Chép |
MenuItem |
Name Text |
mnuItemDan Dán |
MenuItem |
Name Text |
mnuItemXoa Xoá hết |
TextBox |
Name | txtDemoText |
Muốn chỉ định Shortcut cho một MenuItem, bạn select MenuItem ấy rồi vào cửa sổ Properties để chọn trị số cho property Shortcut. Tương tự như vậy cho property Checked để làm một checkmark hiện ra bên trái (phía trước) Text của MenuItem.
Thêm vào các dòng code sau đây cho chương trình. Khi doubleClick lên các MenuItem, cửa sổ mã nguồn sẽ mở ra cho bạn đánh code vào:
private void mnuItemSaoChep_Click(object sender, System.EventArgs e)
{
txtDemoText.Copy();
}
private void mnuItemDan_Click(object sender, System.EventArgs e)
{
txtDemoText.Paste();
}
private void mnuItemXoa_Click(object sender, System.EventArgs e)
{
txtDemoText.Text = “”;
}
private void mnuItemThoat_Click(object sender, System.EventArgs e)
{
this.Close();
}
Giải thích:
Các phương thức Copy(), Paste() là những phương thức có trong thư viện của .Net nên bạn chỉ cần mang ra sử dụng mà thôi.
txtDemoText.Copy() sẽ copy đoạn text mà ta chọn (bôi đen và đưa vào Clipboard (vùng nhớ đệm của hệ thống)).
txtDemoText.Paste() tsẽ dán dữ liệu có trong ClipBoardPaste() và đưa nó vào đối tượng textbox.
Ở đây tôi xin nhắc lại là đối tượng this là đối tượng (hay từ khoá) chỉ form hiện hành đang chứa các source code này.
Sau đây là kết quả chạy chương trình:
Context Menu:
Ta dùng Context Menu để Pop-Up một Menu xứng hợp với tình huống đương thời của program khi user right click một control trên form. Trong VB6, Context Menu cũng là một MenuCommand thông thường nhưng ta thiết kế cho nó invisible, để chỉ khi nào ta muốn Pop-Up nó thì nó mới hiển thị.
Trong VB.NET, Context Menu là một control riêng, nhưng ta edit nó cũng giống như Main Menu. Khi đã thêm một control ContextMenu vào form rồi, mỗi lần ta select nó trong mâm components thì Context Menu hiện ra ở cạnh trên của form giống như Main Menu. Lúc Runtime, khi user right click một control có Context Menu thì ContextMenu sẽ hiển thị ở vị trí đó.
Bạn hãy doubleClick control ContextMenu trong hộp đồ nghề để thêm một Context Menu vào trong form. Kế đó set up các MenuItem như sau:
và để thay đổi tên của các context menu item, bạn cũng làm giống y như đối với main menu item.
Dưới đây là bảng các thuộc tính của Context menu:
Đối Tượng |
Thuộc Tính |
Giá Trị |
contextMenu |
Name | default (contextMenu1) |
MenuContextItem |
Name Text |
mnucxtTrangDen Nền Trắng – Chữ Đen |
MenuContextItem |
Name Text |
mnucxtXanhTrang Nền Xanh – Chữ Trắng |
Để hiển thị cái Radio button bên trái một MenuItem, bạn phải làm hai chuyện:
Nhớ là ta dùng checkmark khi muốn cho user chọn nhiều thứ cùng một lúc, và dùng Radio button khi muốn cho user chỉ chọn một nhiệm ý mà thôi, tức là mutually exclusive. Tuy nhiên, khác với khi edit một nhóm Radio buttons trong một container trên form, VB.NET không cản trở ta cho hai Radio buttons trong một menu cùng hiện ra. Do đó, bạn phải tự quản lý vấn đề mutually exclusive trong code của mình.
Và dưới đây là code của chương trình:
private void mnuctxXanhTrang_Click(object sender, System.EventArgs e)
{
txtDemoText.BackColor = Color.Blue;
txtDemoText.ForeColor = Color.White;
mnuctxTrangDen.Checked = false;
mnuctxXanhTrang.Checked = true;
}
private void mnuctxTrangDen_Click(object sender, System.EventArgs e)
{
txtDemoText.BackColor = Color.White;
txtDemoText.ForeColor = Color.Black;
mnuctxTrangDen.Checked = true;
mnuctxXanhTrang.Checked = false;
}
Giải thích:
Các đoạn code ở phần này đề là những đoạn code mà ta đã từng làm ở các bài tập trước nên tôi không nói thêm ở đây.
mnuctxTrangDen.Checked = false;
mnuctxXanhTrang.Checked = true;
Hai đoạn code trên là dùng để chỉ là Context menu mà ta tạo có 1 dấu tròn ở đầu dòng hay không. Checked = True là có và ngược lại là không.
Để chỉ định ContextMenu1 Pop-up khi user right click Textbox1, bạn chỉ cần set property ContextMenu của Textbox1 thành ContextMenu1 (chọn nó trong cái dropdown list của comboxbox của property ContextMenu trong cửa sổ Properties).
Khi bạn chạy chương trình và right click Textbox1, ContextMenu1 sẽ hiển thị như dưới đây:
info24h.vn