Làm cách nào để thêm dấu phân tách vào WinForms ContextMenu?


103

Trong tầm kiểm soát của tôi, tôi có:

ContextMenu = new ContextMenu();
ContextMenu.MenuItems.Add(new MenuItem("&Add Item", onAddSpeaker));
ContextMenu.MenuItems.Add(new MenuItem("&Edit Item", onEditSpeaker));
ContextMenu.MenuItems.Add(new MenuItem("&Delete Item", onDeleteSpeaker));
ContextMenu.MenuItems.Add( ??? );
ContextMenu.MenuItems.Add(new MenuItem("Cancel"));

Làm thế nào để thêm một dòng phân tách vào ContextMenu này?


Công dụng của dấu '&' trước tên là gì?
Gerben Limburg,

3
@GerbenLimburg: '&' cho phép bạn thiết kế phím tắt (nó được gọi là " mnemonic ") sẽ có sẵn cho người dùng (kết hợp với Alt).
Otiel

Câu trả lời:


225

Tôi tin rằng đó chỉ là một dấu gạch ngang:

ContextMenu.MenuItems.Add("-");

Đây là một trong nhiều mục được ghi chép kém trong Windows. Tôi cần phải làm điều này vài tháng trước. Tôi nhớ rằng tôi có thể làm điều đó trong Win32, nhưng không thể nhớ cú pháp. Tôi đã kết thúc việc kéo lên một số tệp VC ++ 6 cũ để tìm nó. Nhân tiện, tôi vẫn thỉnh thoảng tham khảo "The Petzold Book" cho một số điều. Wow, tôi cảm thấy già ...
Brad Bruce

24
Chắc chắn đây là dễ đọc hơn ContextMenu.Items.Add(new ToolStripSeparator()); Xem câu trả lời của Gabriel
MarkJ

9
@MarkJ, ContextMenu không còn thuộc tính Mục nữa. ToolStripSeperator () cũng không phải là một đối số hợp lệ cho ContextMenu.Items.Add ().
Cypher

3
Lưu ý rằng bạn có thể thực hiện việc này một cách trực quan bằng cách nhập dấu gạch ngang vào trường nhập "Nhập vào đây" của trình thiết kế menu trong trình thiết kế Visual Studio Windows Forms. Dấu phân tách sẽ xuất hiện ngay lập tức trong trình thiết kế.
Buggieboy

48

Điều này cũng hoạt động như dấu gạch ngang, và tôi nghi ngờ Winforms sẽ dịch dấu gạch ngang thành ToolStripSeparator. Tôi nghĩ rằng giải pháp này rõ ràng hơn cho bất kỳ ai phải duy trì mã.

yourContextMenu.Items.Add(new ToolStripSeparator());

5
Lớp ContextMenu .Net 2 winforms không có thuộc tính Mục.
AndrewS

6
Điều này chỉ có thể thực hiện được với ContextMenuStrip chứ không phải với ContextMenu.
Gerben Limburg

1
Và bạn có thể làm yourContextMenu.Items.Insert(3, new ToolStripSeparator());, nhưng bạn không thể có Insertdấu gạch ngang "-".
Otiel

1
Perfect Thanks a lot
Garuda Prasad K


7

Nếu bạn đang sử dụng Trình thiết kế, hãy đặt một dấu gạch ngang "-" dưới dạng văn bản giống như cách bạn đặt tên cho các mục menu của mình. Sau khi nhấn enter, dấu phân tách sẽ được tạo.



1

Các dải phân cách ngang rất tuyệt, nhưng nếu bạn muốn một dải phân cách dọc thì sao?

Chà, đừng lo - bạn có thể có một cái!

Đặt thuộc BarBreaktính thành truethuộc tính MenuItemphải là thuộc tính đầu tiên sau trình phân tách:

var item = new MenuItem(text: "Settings", onClick: SomeFunction) { BarBreak = true };

nhập mô tả hình ảnh ở đây

Để thêm các mục vào một MenuItemsbộ sưu tập: yourContextMenu.MenuItems.Add(item).


0

Có lẽ trong các phiên bản Visual Studio sau này, họ đã làm điều này đơn giản hơn. Tôi đang sử dụng VS 2012. Bạn có thể thêm dấu phân tách thông qua trình thiết kế biểu mẫu. 1) Chọn / Tạo MenuStrip. 2) Trên "Gõ đây", chuột phải. 3) Chọn "Chèn". 4) Chọn "Dấu phân cách". 5) Kéo dấu phân cách mới vào văn bản bạn muốn nó ở trên. Làm xong.


0

ContextMenumột hàm tạo nhận một mảng MenuItemđối tượng. Không cần phải nói, bạn không thể thêm một chuỗi vào mảng đó. Tuy nhiên, bạn có thể có được một trình tách riêng bằng cách thêm new MenuItem("-"):

    var contextMenu = new ContextMenu(new[]
    {
        timerMenuItem,
        keypressMenuItem,
        new MenuItem("-"), // Seperator
        new MenuItem(text: "Exit", onClick: (sender, args) => Application.Exit())
    });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.