จะเพิ่มตัวคั่นให้กับ WinForms ContextMenu ได้อย่างไร


104

ภายในการควบคุมของฉันฉันมี:

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"));

จะเพิ่มเส้นคั่นใน ContextMenu นี้ได้อย่างไร?


การใช้เครื่องหมาย '&' ข้างหน้าชื่อคืออะไร?
Gerben Limburg

3
@GerbenLimburg: '&' ช่วยให้คุณออกแบบคีย์ลัด (เรียกว่า " ช่วยในการจำ ") ที่จะพร้อมใช้งานสำหรับผู้ใช้ (รวมกับ Alt)
Otiel

คำตอบ:


227

ฉันเชื่อว่ามันเป็นแค่เส้นประ:

ContextMenu.MenuItems.Add("-");

นี่เป็นหนึ่งในรายการที่มีเอกสารไม่ดีจำนวนมากใน Windows ฉันต้องทำสิ่งนี้เมื่อสองสามเดือนก่อน ฉันจำได้ว่าฉันสามารถทำได้ใน Win32 แต่จำไวยากรณ์ไม่ได้ ฉันลงเอยด้วยการดึงไฟล์ VC ++ 6 เก่า ๆ เพื่อค้นหา อย่างไรก็ตามฉันยังคงอ้างถึง "The Petzold Book" เป็นครั้งคราวสำหรับบางสิ่ง ว้าวฉันรู้สึกแก่แล้ว ...
Brad Bruce

25
แน่นอนว่าสิ่งนี้สามารถอ่านได้มากขึ้นContextMenu.Items.Add(new ToolStripSeparator()); ดูคำตอบของกาเบรียล
MarkJ

9
@MarkJ บริบทเมนูไม่มีคุณสมบัติรายการอีกต่อไป ToolStripSeperator () ยังไม่ใช่อาร์กิวเมนต์ที่ถูกต้องสำหรับ ContextMenuItems.Add ()
Cypher

3
โปรดทราบว่าคุณสามารถทำได้โดยการป้อนยัติภังค์ในช่องรายการ "Type here" ของตัวออกแบบเมนูในตัวออกแบบ Visual Studio Windows Forms ตัวคั่นจะปรากฏทันทีในตัวออกแบบ
Buggieboy

วิธีเดียวที่จะใช้ใน. NET Compact Framework
Behzad Ebrahimi

49

สิ่งนี้ใช้งานได้เช่นเดียวกับเส้นประและฉันสงสัยว่า Winforms จะแปลเส้นประเป็น ToolStripSeparator ฉันคิดว่าวิธีนี้ชัดเจนกว่าสำหรับทุกคนที่ต้องรักษารหัส

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

5
คลาส ContextMenu. Net 2 winforms ไม่มีคุณสมบัติรายการ
AndrewS

6
สิ่งนี้เป็นไปได้เฉพาะกับ ContextMenuStrip ไม่ใช่ด้วย ContextMenu
Gerben Limburg

1
และคุณสามารถทำได้yourContextMenu.Items.Insert(3, new ToolStripSeparator());แต่คุณไม่สามารถInsertขีดกลาง "-" ได้
Otiel

1
Perfect ขอบคุณมาก
Garuda Prasad K


7

หากคุณใช้ตัวออกแบบให้ใส่ยัติภังค์ "-" ตัวเดียวเป็นข้อความแบบเดียวกับที่คุณตั้งชื่อรายการเมนูของคุณ หลังจากกด Enter แล้วตัวคั่นจะถูกสร้างขึ้น



1

ตัวคั่นแนวนอนนั้นเจ๋ง แต่ถ้าคุณต้องการตัวคั่นแนวตั้งแทนล่ะ?

ไม่ต้องกังวล - คุณสามารถมีได้!

ตั้งค่าBarBreakคุณสมบัติtrueเป็นMenuItemซึ่งควรเป็นคุณสมบัติแรกหลังจากตัวแยก:

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

ป้อนคำอธิบายภาพที่นี่

ในการเพิ่มรายการในMenuItemsคอลเลกชัน: yourContextMenu.MenuItems.Add(item).


0

บางทีใน Visual Studio เวอร์ชันหลัง ๆ พวกเขาทำให้สิ่งนี้ง่ายขึ้น ฉันใช้ VS 2012 คุณสามารถเพิ่มตัวคั่นผ่านตัวออกแบบฟอร์ม 1) เลือก / สร้าง MenuStrip 2) บน "พิมพ์ที่นี่" เมาส์ขวา 3) เลือก "แทรก" 4) เลือก "ตัวคั่น" 5) ลากตัวคั่นใหม่ไปยังข้อความที่คุณต้องการให้อยู่ด้านบน เสร็จแล้ว


0

ContextMenuมีตัวสร้างที่รับอาร์เรย์ของMenuItemวัตถุ ไม่จำเป็นต้องพูดคุณไม่สามารถเพิ่มสตริงในอาร์เรย์นั้นได้ อย่างไรก็ตามคุณสามารถรับตัวแยกได้โดยเพิ่มnew MenuItem("-"):

    var contextMenu = new ContextMenu(new[]
    {
        timerMenuItem,
        keypressMenuItem,
        new MenuItem("-"), // Seperator
        new MenuItem(text: "Exit", onClick: (sender, args) => Application.Exit())
    });
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.