Bagaimana cara menambahkan pemisah ke WinForms ContextMenu?

103

Di dalam kendali saya, saya memiliki:

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

Bagaimana cara menambahkan garis pemisah ke ContextMenu ini?

Adam Pierce
sumber
Apa gunanya '&' di depan nama?
Gerben Limburg
3
@GerbenLimburg: '&' memungkinkan Anda untuk mendesain tombol pintas (disebut " mnemonic ") yang akan tersedia untuk pengguna (digabungkan dengan Alt).
Otiel

Jawaban:

225

Saya percaya itu hanya sejumput:

ContextMenu.MenuItems.Add("-");
SqlRyan
sumber
Ini adalah salah satu dari banyak item yang didokumentasikan dengan buruk di Windows. Saya perlu melakukan ini beberapa bulan yang lalu. Saya ingat bahwa saya bisa melakukannya di Win32, tetapi tidak dapat mengingat sintaksnya. Saya akhirnya menarik beberapa file VC ++ 6 lama untuk menemukannya. Ngomong-ngomong, saya kadang-kadang masih mengacu pada "Buku Petzold" untuk beberapa hal. Wow, aku merasa tua ...
Brad Bruce
24
Tentunya ini lebih mudah dibaca ContextMenu.Items.Add(new ToolStripSeparator()); lihat jawaban Gabriel
MarkJ
9
@MarkJ, The ContextMenu tidak lagi memiliki properti Item. ToolStripSeperator () juga bukan argumen yang valid untuk ContextMenu.Items.Add ().
Cypher
3
Perhatikan bahwa Anda dapat melakukan ini secara visual dengan memasukkan tanda hubung di bidang entri "Ketik di sini" dari desainer menu di desainer Visual Studio Windows Forms. Pemisah akan segera muncul di desainer.
Buggieboy
48

Ini berfungsi sama baiknya dengan tanda hubung, dan saya curiga Winforms akan menerjemahkan tanda hubung ke ToolStripSeparator. Saya pikir solusi ini lebih jelas bagi siapa saja yang harus memelihara kode.

yourContextMenu.Items.Add(new ToolStripSeparator());
Gabriel
sumber
5
Kelas ContextMenu winform .Net 2 tidak memiliki properti Item.
AndrewS
6
Ini hanya mungkin dengan ContextMenuStrip dan tidak dengan ContextMenu.
Gerben Limburg
1
Dan Anda dapat melakukannya yourContextMenu.Items.Insert(3, new ToolStripSeparator());, tetapi Anda tidak dapat Insertmenggunakan tanda "-".
Otiel
1
Sempurna Terima kasih banyak
Garuda Prasad K
11

Di WPF:

ContextMenu.MenuItems.Add(new Separator());
al2suarez.dll
sumber
7

Jika Anda menggunakan Desainer, letakkan satu tanda hubung "-" sebagai teks dengan cara yang sama seperti Anda memberi nama item menu Anda. Setelah menekan enter, pemisah akan dibuat.

Aziz
sumber
3

Setel properti teks ke tanda hubung.

shahkalpesh.dll
sumber
1

Pemisah horizontal itu keren, tetapi bagaimana jika Anda menginginkan pemisah vertikal?

Nah, jangan khawatir - Anda dapat memilikinya!

Set BarBreakproperti untuk truedi MenuItemmana harus menjadi yang pertama setelah seperator yang:

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

masukkan deskripsi gambar di sini

Untuk menambahkan item ke MenuItemskoleksi: yourContextMenu.MenuItems.Add(item).

Stephen Kennedy
sumber
0

Mungkin di versi Visual Studio mereka membuat ini lebih sederhana. Saya menggunakan VS 2012. Anda dapat menambahkan pemisah melalui desainer formulir. 1) Pilih / Buat MenuStrip. 2) Pada "Type Here", mouse kanan. 3) Pilih "Sisipkan". 4) Pilih "Pemisah". 5) Seret pemisah baru ke teks yang Anda inginkan di atasnya. Selesai.

JimMoore
sumber
0

ContextMenumemiliki konstruktor yang menerima larik MenuItemobjek. Tak perlu dikatakan, Anda tidak bisa menambahkan string ke array itu. Namun Anda bisa mendapatkan pemisah dengan menambahkan new MenuItem("-"):

    var contextMenu = new ContextMenu(new[]
    {
        timerMenuItem,
        keypressMenuItem,
        new MenuItem("-"), // Seperator
        new MenuItem(text: "Exit", onClick: (sender, args) => Application.Exit())
    });
Stephen Kennedy
sumber