2012-01-12 25 views
5

Tôi muốn tạo một menu ngữ cảnh có nhiều cột. Về cơ bản nó sẽ như sau:Tôi có thể tạo menu ngữ cảnh nhiều cột trong .NET Windows Forms không?

First item | [common option] | All Options > 
Second item | [common option] | All Options > 
Third item | [common option] | All Options > 
Fourth item | [common option] | All Options > 

Vì vậy, về cơ bản có một loạt các mục (được tạo khi chạy), mỗi mục có thể được khởi chạy; hoặc với một tùy chọn thường được sử dụng; hoặc bạn có thể có một menu con với tất cả các tùy chọn có thể.

Tôi làm cách nào để thực hiện việc này? Tôi đang cố gắng lạm dụng cả hai ContextMenuStripContextMenu, nhưng dường như họ không có bất kỳ tùy chọn nào như vậy. Dường như tôi vẫn nhớ lại đã thấy các menu nhiều cột ở một nơi nào đó ...

Tôi thích giải pháp Windows Forms hơn, vì tôi không có bất kỳ trải nghiệm WPF nào. Oh, và trình đơn ngữ cảnh này sẽ mở ra khi nhấp vào một biểu tượng trong Khu vực thông báo (còn gọi là systray).

Trả lời

5

Tôi không biết về ContextMenuStrip, là trình đơn được xây dựng hoàn toàn bằng mã .NET, nhưng bạn chắc chắn có thể làm điều này với ContextMenu, đây là trình bao bọc trên các menu hệ thống gốc.

Điều quan trọng là thiết lập các MFT_MENUBREAK hoặc MFT_MENUBARBREAK cờ cho các mục trình đơn cá nhân (s), được tiếp xúc như là thuộc tính trong MenuItem class wrapper: MenuItem.BreakMenuItem.BarBreak, tương ứng.

Trước đây chỉ đặt mục menu vào cột mới, trong khi vị trí thứ hai đặt mục đó vào cột mới và tách cột bằng một đường thẳng đứng được khắc.

Từ ví dụ MSDN:

public void CreateMyMenus() 
{ 
    // Create three top-level menu items. 
    MenuItem menuItem1 = new MenuItem("&File"); 
    MenuItem menuItem2 = new MenuItem("&New"); 
    MenuItem menuItem3 = new MenuItem("&Open"); 

    // Set the BarBreak property to display horizontally. 
    menuItem2.BarBreak = true; 
    menuItem3.BarBreak = true; 

    // Add menuItem2 and menuItem3 to the menuItem1's list of menu items. 
    menuItem1.MenuItems.Add(menuItem2); 
    menuItem1.MenuItems.Add(menuItem3); 
} 
0

Menu trong WinForms chỉ có thể được xây dựng như cây: bạn có thể có một menu phụ dưới mỗi mục. Vì vậy, bạn có thể đặt tùy chọn chung làm mục đầu tiên của menu phụ.

Nó không thể trông khác biệt trừ khi bạn thiết kế kiểm soát của riêng bạn (và sau đó WPF là phù hợp hơn nhiều cho nhiệm vụ này, nhưng WPF mất rất nhiều thời gian để tìm hiểu).

+0

Vâng, đó là tốt, nhưng tôi không thể sắp xếp các cấp độ đầu tiên của cây của tôi để nó được đặt ra trong 3 cột? 3 mục không cần phải liên quan đến nhau (ngoại trừ vị trí). –

+0

Không, bạn không thể. –

+2

Chắc chắn bạn có thể. Các trình đơn Win32 bản địa hỗ trợ điều này tốt. Bây giờ, cho dù đó là thiết kế giao diện người dùng tốt vẫn còn gây tranh cãi, nhưng bạn chắc chắn không phải sử dụng WPF. Đó là một câu trả lời mà tôi thường thấy ở đây. Có * rất nhiều lý do chính đáng để mọi người * không * muốn sử dụng WPF. –

Các vấn đề liên quan