2012-03-22 39 views
26

Tôi đã tìm kiếm một lúc cho một menu nhấp chuột phải đơn giản cho một mục duy nhất. Ví dụ: nếu tôi nhấp chuột phải vào một bức ảnh, tôi muốn một trình đơn nhỏ xuất hiện với các nhãn của riêng tôi: Thêm, Xóa, v.v. Nếu có ai có thể giúp tôi trở nên tuyệt vời nhất.Thêm menu nhấp chuột phải vào một mục

Cảm ơn bạn đã tìm kiếm.

Đây là mã hoàn thành:

ContextMenu cm = new ContextMenu();    
    cm.MenuItems.Add("Item 1", new EventHandler(Removepicture_Click));    
    cm.MenuItems.Add("Item 2", new EventHandler(Addpicture_Click));    
    pictureBox1.ContextMenu = cm; 

Trả lời

54

Thêm một ContextMenu mẫu của bạn và sau đó gán nó vào thuộc tính của kiểm soát dưới ContextMenuStrip. Hi vọng điêu nay co ich :).

Hope this helps:

ContextMenu cm = new ContextMenu(); 
cm.MenuItems.Add("Item 1"); 
cm.MenuItems.Add("Item 2"); 

pictureBox1.ContextMenu = cm; 
+0

Hoàn hảo cảm ơn bạn! Đã sẵn sàng để nhảy ... – Marshal

+0

Bạn được chào đón;). –

+2

Câu hỏi nhanh sau đó có thể đi qua như là ngu ngốc. Làm thế nào sau đó tôi sẽ thêm chức năng cho các mục đó? – Marshal

17

Đây là một câu trả lời toàn diện cho câu hỏi này. Tôi đã làm điều này bởi vì trang này là cao trên các kết quả tìm kiếm của Google và câu trả lời không đi vào đủ chi tiết. Bài đăng này giả định rằng bạn có thẩm quyền khi sử dụng các biểu mẫu Visual Studio C#. Điều này dựa trên VS2012.

  1. Bắt đầu bằng cách kéo một ContextMenuStrip vào biểu mẫu. Nó sẽ chỉ cần đặt nó vào góc trên bên trái, nơi bạn có thể thêm các mục trình đơn của bạn và đổi tên nó như bạn thấy phù hợp.

  2. Bạn sẽ phải xem mã và tự mình nhập sự kiện vào biểu mẫu. Tạo một con chuột xuống sự kiện cho các mục trong câu hỏi và sau đó gán một sự kiện click chuột phải cho nó như vậy (tôi gọi là ContextMenuStrip "rightClickMenuStrip"):

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
    switch (e.Button) 
        { 
         case MouseButtons.Right: 
         { 
          rightClickMenuStrip.Show(this, new Point(e.X, e.Y));//places the menu at the pointer position 
         } 
         break; 
        } 
    } 
    
  3. Gán xử lý sự kiện bằng tay để các form.designer (bạn có thể cần phải thêm một "sử dụng" cho System.Windows.Forms; bạn chỉ có thể giải quyết nó):

    this.pictureBox1.MouseDown += new MouseEventHandler(this.pictureBox1_MouseDown); 
    
  4. Tất cả những gì là cần thiết vào thời điểm này là chỉ cần nhấp từng hạng mục menu và làm tăng gấp đôi các hoạt động mong muốn cho mỗi sự kiện nhấp chuột giống như cách bạn thực hiện cho bất kỳ nút nào khác.

Đây là mã cơ bản cho hoạt động này. Bạn rõ ràng có thể sửa đổi nó để phù hợp với thực hành mã hóa của bạn.

+0

câu trả lời tuyệt vời! Bạn cũng có thể sử dụng câu lệnh if Nếu (e.Button == MouseButtons.Right) –

+2

Trừ khi có điều gì đó thay đổi kể từ khi câu trả lời này được đăng, bạn không cần phải chỉ định sự kiện 'MouseDown' theo cách thủ công trong mã. Tất cả những gì bạn phải làm là thiết lập thuộc tính 'ContextMenuStrip' thành đúng' ContextMenuStrip' cho điều khiển mà bạn muốn kết hợp nó với. Điều này cắt bỏ các bước 2 và 3 (mặc dù thêm một bước nhỏ hơn nhiều 2) vào giải pháp của bạn. –

10

Nếu bạn đang sử dụng Visual Studio, có một giải pháp GUI cũng như:

  1. Từ Toolbox thêm một ContextMenuStrip
  2. Chọn menu ngữ cảnh và thêm các mục kích chuột phải
  3. Đối với mỗi mục đặt các sự kiện nhấp vào các chức năng tương ứng
  4. Chọn biểu mẫu/nút/hình ảnh/v.v ... (bất kỳ mục nào) mà trình đơn nhấp chuột phải sẽ được kết nối
  5. Đặt thuộc tính ContextMenuStrip vào menu bạn đã tạo.
0

Chỉ gặp rắc rối với điều này, rất hữu ích khi kjnow e.X/e.Điểm Y liên quan đến điều khiển, vì vậy nếu (như tôi) bạn đang thêm một menu ngữ cảnh vào một listview hoặc một cái gì đó tương tự, bạn sẽ muốn điều chỉnh nó với nguồn gốc của biểu mẫu. Trong ví dụ dưới đây tôi đã thêm 20 vào x/y để menu xuất hiện một chút ở bên phải và bên dưới con trỏ.

cmDelete.Show(this, new Point(e.X + ((Control)sender).Left+20, e.Y + ((Control)sender).Top+20)); 
Các vấn đề liên quan