Trang chủ

Tự học winform c# qua ví dụ – menu-contextmenu – treeview-listview

Tự học winform c# qua ví dụ - menu-contextmenu

Tự học winform c# qua ví dụ - menu-contextmenu

 

 

  1. 1.   Menu

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:

 

 

1

 

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.

 

 

  1. a.   Cách tạo Menu

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).

 

2

 

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:

 

 

3

 

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

 

 

 

4

 

 

 

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:

 

 

5

 

 

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:

 

 

6

 

 

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:

  1. Set property Checked của MenuItem thành True để hiển thị một checkmark hay một hình tròn nhỏ (Radio button).
  2. Set property RadioCheck của MenuItem thành True để khi nào nó hiển thị thì có dạng Radio button, thay vì một checkmark.

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:

 

 

 

7

 

 

 

info24h.vn

Xem thêm:

Gửi bình luận

Xem thêm

Thời trang

Xem thêm

Giảm cân

Mua bán inox, inox 304, inox 201
Xem thêm

Kiến thức y học

Xem thêm

Thông tin giáo dục

Link hữu ích
shop bán váy đầm công chúa đẹp tại TP.HCM
shop bán Thời trang trẻ em cao cấp giao hàng toàn cầu
mua mùn cưa
váy đầm trẻ em | váy đầm công chúa | Sở giáo dục Lâm Đồng 
 |  Thu mua phe lieu
shop bán đầm bé gái đẹp tại TP.HCM

Tuyển chuyên viên thiết kế và may đầm công chúa giỏi :