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?


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

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

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


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.



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).


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.


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())
    });
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.